// Package metrics registers Prometheus metrics for the Veylant proxy.
package metrics

import (
	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promauto"
)

// Prometheus metrics exposed by the Veylant proxy.
// Labels follow the naming conventions of the OpenTelemetry semantic conventions
// where applicable.
var (
	// RequestsTotal counts all proxy requests by HTTP method, path, status code,
	// and provider name.
	RequestsTotal = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Name: "veylant_requests_total",
			Help: "Total number of proxy requests.",
		},
		[]string{"method", "path", "status", "provider"},
	)

	// RequestDuration measures the end-to-end latency of each proxy request in
	// seconds, broken down by method, path, and status code.
	RequestDuration = promauto.NewHistogramVec(
		prometheus.HistogramOpts{
			Name:    "veylant_request_duration_seconds",
			Help:    "End-to-end proxy request duration in seconds.",
			Buckets: []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10},
		},
		[]string{"method", "path", "status"},
	)

	// RequestErrors counts requests that resulted in an error, labelled by the
	// OpenAI error type (authentication_error, rate_limit_error, etc.).
	RequestErrors = promauto.NewCounterVec(
		prometheus.CounterOpts{
			Name: "veylant_request_errors_total",
			Help: "Total number of proxy request errors by error type.",
		},
		[]string{"method", "path", "error_type"},
	)
)
