github.com/grafana/pyroscope@v1.18.0/pkg/phlaredb/query/metrics.go (about) 1 package query 2 3 import ( 4 "context" 5 6 "github.com/prometheus/client_golang/prometheus" 7 8 "github.com/grafana/pyroscope/pkg/util" 9 ) 10 11 type contextKey uint8 12 13 const ( 14 metricsContextKey contextKey = iota 15 ) 16 17 type Metrics struct { 18 registerer prometheus.Registerer 19 pageReadsTotal *prometheus.CounterVec 20 } 21 22 func NewMetrics(reg prometheus.Registerer) *Metrics { 23 return &Metrics{ 24 registerer: reg, 25 26 pageReadsTotal: util.RegisterOrGet(reg, prometheus.NewCounterVec(prometheus.CounterOpts{ 27 Name: "pyroscopedb_page_reads_total", 28 Help: "Total number of pages read while querying", 29 }, []string{"table", "column"})), 30 } 31 } 32 33 func (m *Metrics) Unregister() { 34 m.registerer.Unregister(m.pageReadsTotal) 35 } 36 37 func AddMetricsToContext(ctx context.Context, m *Metrics) context.Context { 38 return context.WithValue(ctx, metricsContextKey, m) 39 } 40 41 func getMetricsFromContext(ctx context.Context) *Metrics { 42 m, ok := ctx.Value(metricsContextKey).(*Metrics) 43 if !ok { 44 return NewMetrics(nil) 45 } 46 return m 47 }