46 lines
1.1 KiB
Go
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())
|
|
}
|