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  }