package dbmetrics import ( "context" "fmt" "github.com/prometheus/client_golang/prometheus" ctrl "sigs.k8s.io/controller-runtime" "edge-infra.dev/pkg/k8s/runtime/controller/metrics" ) type DBMetrics struct { statusWritesTotal *prometheus.CounterVec errorsTotal *prometheus.CounterVec } const ( DBStatusWritesTotal = "db_status_writes_total" DBErrorsTotal = "db_errors_total" ) func New(prefix string) *DBMetrics { writesTotal := prometheus.NewCounterVec(prometheus.CounterOpts{ Name: metrics.Name(prefix, DBStatusWritesTotal), Help: "number of times the controller writes the status to the database", }, []string{"status", "kind"}) errorsTotal := prometheus.NewCounterVec(prometheus.CounterOpts{ Name: metrics.Name(prefix, DBErrorsTotal), Help: "number of database errors", }, []string{"kind", "name"}) return &DBMetrics{ statusWritesTotal: writesTotal, errorsTotal: errorsTotal, } } func (dbm *DBMetrics) Collectors() []prometheus.Collector { return []prometheus.Collector{ dbm.statusWritesTotal, dbm.errorsTotal, } } func (dbm *DBMetrics) RecordDBStatusWritesTotal(ctx context.Context, kind, status string) { if dbm.statusWritesTotal == nil { ctrl.LoggerFrom(ctx).Error( fmt.Errorf("databaseWritesTotal not set"), "unable to record database writes total", ) return } var l = prometheus.Labels{ "kind": kind, "status": status, } dbm.statusWritesTotal.With(l).Inc() } func (dbm *DBMetrics) RecordDBErrorsTotal(ctx context.Context, kind, name string) { if dbm.errorsTotal == nil { ctrl.LoggerFrom(ctx).Error( fmt.Errorf("databaseErrorsTotal not set"), "unable to record database errors total", ) return } var l = prometheus.Labels{ "kind": kind, "name": name, } dbm.errorsTotal.With(l).Inc() }