feat: time database queries

This commit is contained in:
2026-06-16 01:34:36 +02:00
committed by Milas Holsting
parent 50e74326c5
commit c70ec383c5
4 changed files with 107 additions and 2 deletions

View File

@@ -56,6 +56,7 @@ type Metrics struct {
jikanRequests *counterVec
jikanRequestErrors *counterVec
jikanLatency *histogramVec
dbQueryLatency *histogramVec
workerTicks *counterVec
cacheOperations *counterVec
}
@@ -67,6 +68,7 @@ func NewMetrics() *Metrics {
jikanRequests: newCounterVec("endpoint", "status"),
jikanRequestErrors: newCounterVec("endpoint", "status"),
jikanLatency: newHistogramVec(defaultDurationBuckets, "endpoint", "status"),
dbQueryLatency: newHistogramVec(defaultDurationBuckets, "operation", "result"),
workerTicks: newCounterVec("worker", "result"),
cacheOperations: newCounterVec("cache", "result"),
}
@@ -95,6 +97,14 @@ func (m *Metrics) ObserveJikanRequest(endpoint string, status int, duration time
}
}
func (m *Metrics) ObserveDBQuery(operation string, duration time.Duration, err error) {
result := "success"
if err != nil {
result = "error"
}
m.dbQueryLatency.Observe(duration.Seconds(), operation, result)
}
func (m *Metrics) ObserveWorkerTick(worker string, err error) {
if err != nil {
m.workerTicks.Inc(worker, "failure")
@@ -113,6 +123,7 @@ func (m *Metrics) writePrometheus(w http.ResponseWriter) {
writeCounterMetric(w, "mal_jikan_upstream_requests_total", "Total upstream Jikan requests by endpoint and status.", m.jikanRequests.snapshot())
writeCounterMetric(w, "mal_jikan_upstream_errors_total", "Total upstream Jikan errors by endpoint and status.", m.jikanRequestErrors.snapshot())
writeHistogramMetric(w, "mal_jikan_upstream_request_duration_seconds", "Upstream Jikan request latency in seconds.", m.jikanLatency.snapshot(), m.jikanLatency.bounds)
writeHistogramMetric(w, "mal_db_query_duration_seconds", "Database query latency in seconds.", m.dbQueryLatency.snapshot(), m.dbQueryLatency.bounds)
writeCounterMetric(w, "mal_worker_ticks_total", "Total background worker ticks by worker and result.", m.workerTicks.snapshot())
writeCounterMetric(w, "mal_cache_operations_total", "Total cache hits and misses by cache name.", m.cacheOperations.snapshot())
}