metrics

package
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 27, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Package metrics provides structured metrics collection and export for cloop runs. Metrics are exposed in Prometheus text format via an optional HTTP server, and written as a JSON summary to .cloop/metrics.json at plan completion.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DurationSummary

type DurationSummary struct {
	Count   int64            `json:"count"`
	Sum     float64          `json:"sum"`
	Buckets map[string]int64 `json:"buckets"`
}

DurationSummary summarizes the task_duration_seconds histogram.

type Metrics

type Metrics struct {
	// contains filtered or unexported fields
}

Metrics is the central metrics registry for a cloop run. All methods are safe for concurrent use.

func New

func New(provider, model string) *Metrics

New creates a new Metrics instance.

func (*Metrics) Prometheus

func (m *Metrics) Prometheus() string

Prometheus returns the current metrics in Prometheus text exposition format.

func (*Metrics) RecordCost

func (m *Metrics) RecordCost(provider, model string, usd float64)

RecordCost adds to cost_usd_total for the given provider/model.

func (*Metrics) RecordStep

func (m *Metrics) RecordStep()

RecordStep increments steps_total.

func (*Metrics) RecordTaskCompleted

func (m *Metrics) RecordTaskCompleted(durSeconds float64)

RecordTaskCompleted increments tasks_completed.

func (*Metrics) RecordTaskFailed

func (m *Metrics) RecordTaskFailed(durSeconds float64)

RecordTaskFailed increments tasks_failed.

func (*Metrics) RecordTaskSkipped

func (m *Metrics) RecordTaskSkipped()

RecordTaskSkipped increments tasks_skipped.

func (*Metrics) RecordTaskStarted

func (m *Metrics) RecordTaskStarted()

RecordTaskStarted increments tasks_total.

func (*Metrics) RecordTokens

func (m *Metrics) RecordTokens(provider, model string, inputTokens, outputTokens int)

RecordTokens increments tokens_used_total for the given provider/model.

func (*Metrics) Snapshot

func (m *Metrics) Snapshot() Summary

Snapshot returns the current state as a Summary.

func (*Metrics) WriteJSON

func (m *Metrics) WriteJSON(workDir string) error

WriteJSON saves the current metrics snapshot to .cloop/metrics.json.

The write is atomic: data is staged in a sibling .tmp file, fsynced, chmod'd, then renamed into place. POSIX rename is atomic with respect to readers, so `cloop status` and other consumers always see either the previous valid snapshot or the new one — never a half-written or zero-byte file produced by a crash, ENOSPC, or two writers racing across processes.

type Summary

type Summary struct {
	Timestamp            time.Time          `json:"timestamp"`
	Provider             string             `json:"provider"`
	Model                string             `json:"model"`
	DurationSecs         float64            `json:"duration_seconds"`
	TasksTotal           int64              `json:"tasks_total"`
	TasksCompleted       int64              `json:"tasks_completed"`
	TasksFailed          int64              `json:"tasks_failed"`
	TasksSkipped         int64              `json:"tasks_skipped"`
	StepsTotal           int64              `json:"steps_total"`
	TaskDuration         DurationSummary    `json:"task_duration_seconds"`
	TokensUsed           map[string]int64   `json:"tokens_used_total"`
	CostUSD              map[string]float64 `json:"cost_usd_total"`
	RetryBudgetExhausted int64              `json:"retry_budget_exhausted_total"`
}

Summary is a snapshot of all metrics for JSON serialization.

func LoadJSON

func LoadJSON(workDir string) (*Summary, error)

LoadJSON loads a previously written metrics summary from .cloop/metrics.json.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL