Documentation
¶
Overview ¶
Package observability provides metrics collection and tracing for CLI operations.
Index ¶
- type CLIHooks
- func (h *CLIHooks) Level() int
- func (h *CLIHooks) OnOperationEnd(ctx context.Context, op basecamp.OperationInfo, err error, ...)
- func (h *CLIHooks) OnOperationStart(ctx context.Context, op basecamp.OperationInfo) context.Context
- func (h *CLIHooks) OnRequestEnd(ctx context.Context, info basecamp.RequestInfo, result basecamp.RequestResult)
- func (h *CLIHooks) OnRequestStart(ctx context.Context, info basecamp.RequestInfo) context.Context
- func (h *CLIHooks) OnRetry(ctx context.Context, info basecamp.RequestInfo, attempt int, err error)
- func (h *CLIHooks) SetLevel(level int)
- type OperationMetrics
- type RequestMetrics
- type RetryMetrics
- type SessionCollector
- func (c *SessionCollector) RecordOperation(m OperationMetrics)
- func (c *SessionCollector) RecordOperationFromSDK(op basecamp.OperationInfo, err error, duration time.Duration)
- func (c *SessionCollector) RecordRequest(m RequestMetrics)
- func (c *SessionCollector) RecordRequestFromSDK(info basecamp.RequestInfo, result basecamp.RequestResult)
- func (c *SessionCollector) RecordRetry(_ RetryMetrics)
- func (c *SessionCollector) RecordRetryFromSDK(info basecamp.RequestInfo, attempt int, err error)
- func (c *SessionCollector) Reset()
- func (c *SessionCollector) Summary() SessionMetrics
- type SessionMetrics
- type TraceWriter
- func (t *TraceWriter) Reset()
- func (t *TraceWriter) WriteOperationEnd(op basecamp.OperationInfo, err error, duration time.Duration)
- func (t *TraceWriter) WriteOperationStart(op basecamp.OperationInfo)
- func (t *TraceWriter) WriteRequestEnd(info basecamp.RequestInfo, result basecamp.RequestResult)
- func (t *TraceWriter) WriteRequestStart(info basecamp.RequestInfo)
- func (t *TraceWriter) WriteRetry(info basecamp.RequestInfo, attempt int, err error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CLIHooks ¶
type CLIHooks struct {
// contains filtered or unexported fields
}
CLIHooks implements basecamp.Hooks for CLI observability. It supports configurable verbosity levels:
- 0: Silent (collect stats only, no output)
- 1: Operations only (log SDK operations)
- 2: Operations + requests (log both operations and HTTP requests)
func NewCLIHooks ¶
func NewCLIHooks(level int, collector *SessionCollector, writer *TraceWriter) *CLIHooks
NewCLIHooks creates a new CLIHooks with the given verbosity level. If collector is nil, metrics are not collected. If writer is nil, no trace output is produced.
func (*CLIHooks) OnOperationEnd ¶
func (h *CLIHooks) OnOperationEnd(ctx context.Context, op basecamp.OperationInfo, err error, duration time.Duration)
OnOperationEnd is called when a semantic SDK operation completes.
func (*CLIHooks) OnOperationStart ¶
OnOperationStart is called when a semantic SDK operation begins.
func (*CLIHooks) OnRequestEnd ¶
func (h *CLIHooks) OnRequestEnd(ctx context.Context, info basecamp.RequestInfo, result basecamp.RequestResult)
OnRequestEnd is called after an HTTP request completes.
func (*CLIHooks) OnRequestStart ¶
OnRequestStart is called before an HTTP request is sent.
type OperationMetrics ¶
type OperationMetrics struct {
Service string // e.g., "Todos", "Projects"
Operation string // e.g., "Complete", "List"
ResourceType string // e.g., "todo", "project"
IsMutation bool
ResourceID int64
Duration time.Duration
Error error
}
OperationMetrics holds timing information for a high-level SDK operation.
type RequestMetrics ¶
type RequestMetrics struct {
Method string
URL string
Attempt int
StatusCode int
Duration time.Duration
FromCache bool
Retryable bool
Error error
}
RequestMetrics holds timing and status information for a single HTTP request.
type RetryMetrics ¶
RetryMetrics records a retry event.
type SessionCollector ¶
type SessionCollector struct {
// contains filtered or unexported fields
}
SessionCollector accumulates metrics across a CLI session. It is safe for concurrent use and uses counters instead of unbounded slices.
func NewSessionCollector ¶
func NewSessionCollector() *SessionCollector
NewSessionCollector creates a new SessionCollector.
func (*SessionCollector) RecordOperation ¶
func (c *SessionCollector) RecordOperation(m OperationMetrics)
RecordOperation records metrics for a high-level operation.
func (*SessionCollector) RecordOperationFromSDK ¶
func (c *SessionCollector) RecordOperationFromSDK(op basecamp.OperationInfo, err error, duration time.Duration)
RecordOperationFromSDK records metrics from SDK types.
func (*SessionCollector) RecordRequest ¶
func (c *SessionCollector) RecordRequest(m RequestMetrics)
RecordRequest records metrics for an HTTP request.
func (*SessionCollector) RecordRequestFromSDK ¶
func (c *SessionCollector) RecordRequestFromSDK(info basecamp.RequestInfo, result basecamp.RequestResult)
RecordRequestFromSDK records metrics from SDK types.
func (*SessionCollector) RecordRetry ¶
func (c *SessionCollector) RecordRetry(_ RetryMetrics)
RecordRetry records a retry event.
func (*SessionCollector) RecordRetryFromSDK ¶
func (c *SessionCollector) RecordRetryFromSDK(info basecamp.RequestInfo, attempt int, err error)
RecordRetryFromSDK records a retry event from SDK types.
func (*SessionCollector) Reset ¶
func (c *SessionCollector) Reset()
Reset clears all collected metrics and resets the start time.
func (*SessionCollector) Summary ¶
func (c *SessionCollector) Summary() SessionMetrics
Summary returns aggregated metrics for the session.
type SessionMetrics ¶
type SessionMetrics struct {
StartTime time.Time
EndTime time.Time
TotalRequests int
CacheHits int
CacheMisses int
TotalOperations int
FailedOps int
TotalRetries int
TotalLatency time.Duration
}
SessionMetrics aggregates metrics for an entire CLI session.
func SessionMetricsFromMap ¶
func SessionMetricsFromMap(stats map[string]any) *SessionMetrics
SessionMetricsFromMap creates a SessionMetrics from a stats map (as used in JSON output). This allows renderers to use the same formatting logic as direct SessionMetrics consumers.
func (*SessionMetrics) FormatParts ¶
func (m *SessionMetrics) FormatParts() []string
FormatParts returns the formatted parts for a stats summary line. The parts are: duration, requests, cached, retries, failed. Zero-value fields are omitted (except duration which is always included).
type TraceWriter ¶
type TraceWriter struct {
// contains filtered or unexported fields
}
TraceWriter outputs human-readable trace information to stderr. It formats output with timestamps relative to session start.
func NewTraceWriter ¶
func NewTraceWriter() *TraceWriter
NewTraceWriter creates a new TraceWriter that writes to stderr.
func NewTraceWriterTo ¶
func NewTraceWriterTo(w io.Writer) *TraceWriter
NewTraceWriterTo creates a new TraceWriter that writes to the given writer.
func (*TraceWriter) Reset ¶
func (t *TraceWriter) Reset()
Reset resets the start time for relative timestamps.
func (*TraceWriter) WriteOperationEnd ¶
func (t *TraceWriter) WriteOperationEnd(op basecamp.OperationInfo, err error, duration time.Duration)
WriteOperationEnd writes an operation completion trace line. Format: [0.234s] Completed Todos.Complete (234ms)
func (*TraceWriter) WriteOperationStart ¶
func (t *TraceWriter) WriteOperationStart(op basecamp.OperationInfo)
WriteOperationStart writes an operation start trace line. Format: [0.234s] Calling Todos.Complete
func (*TraceWriter) WriteRequestEnd ¶
func (t *TraceWriter) WriteRequestEnd(info basecamp.RequestInfo, result basecamp.RequestResult)
WriteRequestEnd writes a request completion trace line. Format: [0.234s] <- 200 (45ms) or [0.234s] <- 200 (cached)
func (*TraceWriter) WriteRequestStart ¶
func (t *TraceWriter) WriteRequestStart(info basecamp.RequestInfo)
WriteRequestStart writes a request start trace line. Format: [0.234s] -> GET /buckets/123/todos Sensitive query parameters are redacted.
func (*TraceWriter) WriteRetry ¶
func (t *TraceWriter) WriteRetry(info basecamp.RequestInfo, attempt int, err error)
WriteRetry writes a retry trace line. Format: [0.234s] RETRY #2: connection reset