package spool import ( "context" "errors" rvboxv1 "github.com/rvbox/rvbox/gen/go/rvbox/v1" ) // Telemetry is the bounded durable-spool state exposed as client gauges. It // contains no command body, output, UUID, or client identity. type Telemetry struct { QueuedCommands uint64 ChargedBytes uint64 } func (store *Store) Telemetry(ctx context.Context) (Telemetry, error) { if store == nil { return Telemetry{}, errors.New("client spool is unavailable") } store.mu.Lock() defer store.mu.Unlock() if store.db == nil { return Telemetry{}, errors.New("client spool is closed") } var result Telemetry if err := store.db.QueryRowContext(ctx, `SELECT count(*) FROM commands WHERE terminal = 0 AND phase IN (?, ?)`, uint32(rvboxv1.CommandLifecycle_COMMAND_QUEUED), uint32(rvboxv1.CommandLifecycle_COMMAND_DISPATCHED)).Scan(&result.QueuedCommands); err != nil { return Telemetry{}, err } if err := store.db.QueryRowContext(ctx, `SELECT client_total_charged_bytes FROM spool_counters WHERE singleton = 1`).Scan(&result.ChargedBytes); err != nil { return Telemetry{}, err } return result, nil }