mirror of
https://github.com/3ybactuk/marketplace-go-service-project.git
synced 2025-10-30 05:53:45 +03:00
39 lines
859 B
Go
39 lines
859 B
Go
package postgres
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"time"
|
|
|
|
"route256/loms/internal/infra/grpc/metrics"
|
|
|
|
"github.com/jackc/pgx/v5"
|
|
)
|
|
|
|
type startKey struct{}
|
|
|
|
type promTracer struct{}
|
|
|
|
func (promTracer) TraceQueryStart(ctx context.Context, _ *pgx.Conn, _ pgx.TraceQueryStartData) context.Context {
|
|
return context.WithValue(ctx, startKey{}, time.Now())
|
|
}
|
|
|
|
func (promTracer) TraceQueryEnd(ctx context.Context, _ *pgx.Conn, data pgx.TraceQueryEndData) {
|
|
start, _ := ctx.Value(startKey{}).(time.Time)
|
|
|
|
sql := strings.TrimSpace(strings.ToLower(data.CommandTag.String()))
|
|
parts := strings.SplitN(sql, " ", 2)
|
|
category := "unknown"
|
|
if len(parts) > 0 {
|
|
category = parts[0]
|
|
}
|
|
|
|
errLabel := "none"
|
|
if data.Err != nil {
|
|
errLabel = "error"
|
|
}
|
|
|
|
metrics.IncDBQueryCount(category, errLabel)
|
|
metrics.StoreDBQueryDuration(category, errLabel, time.Since(start))
|
|
}
|