package observability import ( "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promhttp" ) // Metrics holds Prometheus metrics for the wrapper type Metrics struct { requestsTotal prometheus.Counter errorsTotal prometheus.Counter decryptFails prometheus.Counter encryptFails prometheus.Counter policyDenials prometheus.Counter requestDuration prometheus.Histogram } // InitMetrics initializes Prometheus metrics func InitMetrics() *Metrics { return &Metrics{ requestsTotal: promauto.NewCounter(prometheus.CounterOpts{ Name: "seqthink_requests_total", Help: "Total number of requests received", }), errorsTotal: promauto.NewCounter(prometheus.CounterOpts{ Name: "seqthink_errors_total", Help: "Total number of errors", }), decryptFails: promauto.NewCounter(prometheus.CounterOpts{ Name: "seqthink_decrypt_failures_total", Help: "Total number of decryption failures", }), encryptFails: promauto.NewCounter(prometheus.CounterOpts{ Name: "seqthink_encrypt_failures_total", Help: "Total number of encryption failures", }), policyDenials: promauto.NewCounter(prometheus.CounterOpts{ Name: "seqthink_policy_denials_total", Help: "Total number of policy denials", }), requestDuration: promauto.NewHistogram(prometheus.HistogramOpts{ Name: "seqthink_request_duration_seconds", Help: "Request duration in seconds", Buckets: prometheus.DefBuckets, }), } } // IncrementRequests increments the request counter func (m *Metrics) IncrementRequests() { m.requestsTotal.Inc() } // IncrementErrors increments the error counter func (m *Metrics) IncrementErrors() { m.errorsTotal.Inc() } // IncrementDecryptFails increments the decrypt failure counter func (m *Metrics) IncrementDecryptFails() { m.decryptFails.Inc() } // IncrementEncryptFails increments the encrypt failure counter func (m *Metrics) IncrementEncryptFails() { m.encryptFails.Inc() } // IncrementPolicyDenials increments the policy denial counter func (m *Metrics) IncrementPolicyDenials() { m.policyDenials.Inc() } // ObserveRequestDuration records request duration func (m *Metrics) ObserveRequestDuration(seconds float64) { m.requestDuration.Observe(seconds) } // Handler returns the Prometheus metrics HTTP handler func (m *Metrics) Handler() http.Handler { return promhttp.Handler() }