hakobox/metrics/main.go
2025-04-21 17:59:57 -03:00

46 lines
1.1 KiB
Go

package metrics
import (
"fmt"
"net/http"
"strconv"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
)
var (
responseLatency = promauto.NewHistogramVec(prometheus.HistogramOpts{
Name: "response_latency",
Help: "latency of the response",
},
// favor adicionar itens à essa lista com cautela.
// uma alta cardinalidade em vetores de uma métrica no prometheus
// pode causar impactos na performance do servidor remoto.
[]string{"status", "method", "path", "panic"},
)
TransactionLatency = promauto.NewHistogramVec(prometheus.HistogramOpts{
Name: "transaction_db_latency",
Help: "latency of the response",
}, []string{})
)
func ResponseLatencyObserve(latency time.Duration, statusCode int, panicked bool, r *http.Request) {
var (
method = r.Method
path = r.URL.Path
)
observer, err := responseLatency.GetMetricWithLabelValues(
strconv.Itoa(statusCode),
method,
path,
fmt.Sprint(panicked),
)
if err != nil {
// não temos como tratar esse erro
panic(err)
}
observer.Observe(latency.Seconds())
}