From 93116f5d4791ef68a17b0644d2b7bb6a34bd5244 Mon Sep 17 00:00:00 2001 From: TheFox0x7 Date: Tue, 8 Jul 2025 11:08:25 +0200 Subject: [PATCH] add database histogram --- models/db/engine_hook.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/models/db/engine_hook.go b/models/db/engine_hook.go index 8709a2c2a1..8ac40ec9d2 100644 --- a/models/db/engine_hook.go +++ b/models/db/engine_hook.go @@ -10,6 +10,8 @@ import ( "code.gitea.io/gitea/modules/gtprof" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" "xorm.io/xorm/contexts" ) @@ -21,12 +23,22 @@ type EngineHook struct { var _ contexts.Hook = (*EngineHook)(nil) +// follows: https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration +var durationHistogram = promauto.NewHistogram(prometheus.HistogramOpts{ + Namespace: "db", + Subsystem: "client", + Name: "operation.duration", + Help: "Duration of database client operations.", + // ConstLabels: prometheus.Labels{"db.system.name": BuilderDialect()}, //TODO: add type of database per spec. +}) + func (*EngineHook) BeforeProcess(c *contexts.ContextHook) (context.Context, error) { ctx, _ := gtprof.GetTracer().Start(c.Ctx, gtprof.TraceSpanDatabase) return ctx, nil } func (h *EngineHook) AfterProcess(c *contexts.ContextHook) error { + durationHistogram.Observe(c.ExecuteTime.Seconds()) span := gtprof.GetContextSpan(c.Ctx) if span != nil { // Do not record SQL parameters here: