summaryrefslogtreecommitdiff
path: root/internal/telemetry/metrics.go
diff options
context:
space:
mode:
authorChia <Chia@93.nz>2026-08-05 22:01:29 +1200
committerChia <Chia@93.nz>2026-08-05 22:07:50 +1200
commiteadb2ffe85c43cf6fc741c9823cd28eedb4a844c (patch)
tree1aba2536d57360da403aa35c9ced58b615c7064e /internal/telemetry/metrics.go
parentcd0dd91ab93653631904f2ea0e574ccde6d60339 (diff)
feat: harden prepaid billing and commercial operations
Diffstat (limited to 'internal/telemetry/metrics.go')
-rw-r--r--internal/telemetry/metrics.go48
1 files changed, 43 insertions, 5 deletions
diff --git a/internal/telemetry/metrics.go b/internal/telemetry/metrics.go
index 4942d8d..04cc494 100644
--- a/internal/telemetry/metrics.go
+++ b/internal/telemetry/metrics.go
@@ -4,14 +4,44 @@ import (
"fmt"
"net/http"
"sync/atomic"
+
+ "aigw/internal/billing"
)
type Metrics struct {
- requests atomic.Uint64
- failed atomic.Uint64
- inFlight atomic.Int64
- attempts atomic.Uint64
- droppedUsage atomic.Uint64
+ requests atomic.Uint64
+ failed atomic.Uint64
+ inFlight atomic.Int64
+ attempts atomic.Uint64
+ droppedUsage atomic.Uint64
+ settlementBacklog atomic.Int64
+ settlementSpool atomic.Int64
+ stripeRefundBacklog atomic.Int64
+ stripeUncollected atomic.Int64
+ stripeMismatches atomic.Int64
+ stripeWebhooks atomic.Int64
+ unmeteredSuccesses atomic.Int64
+ ready atomic.Int64
+}
+
+func (m *Metrics) SetSettlementQueue(backlog int64, spool int) {
+ m.settlementBacklog.Store(backlog)
+ m.settlementSpool.Store(int64(spool))
+}
+func (m *Metrics) SetReady(ready bool) {
+ if ready {
+ m.ready.Store(1)
+ } else {
+ m.ready.Store(0)
+ }
+}
+
+func (m *Metrics) SetStripeOperations(status billing.OperationalStatus) {
+ m.stripeRefundBacklog.Store(status.RefundBacklog)
+ m.stripeUncollected.Store(status.UncollectedMicros)
+ m.stripeMismatches.Store(status.ReconciliationMismatches)
+ m.stripeWebhooks.Store(status.UnprocessedWebhooks)
+ m.unmeteredSuccesses.Store(status.UnmeteredSuccesses)
}
func (m *Metrics) RequestStarted() {
@@ -41,4 +71,12 @@ func (m *Metrics) ServeHTTP(w http.ResponseWriter, _ *http.Request) {
fmt.Fprintf(w, "# TYPE aigw_requests_in_flight gauge\naigw_requests_in_flight %d\n", m.inFlight.Load())
fmt.Fprintf(w, "# TYPE aigw_upstream_attempts_total counter\naigw_upstream_attempts_total %d\n", m.attempts.Load())
fmt.Fprintf(w, "# TYPE aigw_usage_events_dropped_total counter\naigw_usage_events_dropped_total %d\n", m.droppedUsage.Load())
+ fmt.Fprintf(w, "# TYPE aigw_billing_settlement_backlog gauge\naigw_billing_settlement_backlog %d\n", m.settlementBacklog.Load())
+ fmt.Fprintf(w, "# TYPE aigw_billing_settlement_spool_records gauge\naigw_billing_settlement_spool_records %d\n", m.settlementSpool.Load())
+ fmt.Fprintf(w, "# TYPE aigw_stripe_refund_backlog gauge\naigw_stripe_refund_backlog %d\n", m.stripeRefundBacklog.Load())
+ fmt.Fprintf(w, "# TYPE aigw_billing_uncollected_micros gauge\naigw_billing_uncollected_micros %d\n", m.stripeUncollected.Load())
+ fmt.Fprintf(w, "# TYPE aigw_stripe_reconciliation_mismatches gauge\naigw_stripe_reconciliation_mismatches %d\n", m.stripeMismatches.Load())
+ fmt.Fprintf(w, "# TYPE aigw_stripe_webhook_backlog gauge\naigw_stripe_webhook_backlog %d\n", m.stripeWebhooks.Load())
+ fmt.Fprintf(w, "# TYPE aigw_billing_unmetered_successes gauge\naigw_billing_unmetered_successes %d\n", m.unmeteredSuccesses.Load())
+ fmt.Fprintf(w, "# TYPE aigw_ready gauge\naigw_ready %d\n", m.ready.Load())
}