Path: blob/main/components/common-go/tracing/promreporter.go
2496 views
// Copyright (c) 2020 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package tracing56import (7"time"89"github.com/prometheus/client_golang/prometheus"10jaeger "github.com/uber/jaeger-client-go"11)1213// PromReporter reports Jaeger span durations to Prometheus14type PromReporter struct {15Operations map[string]SpanMetricMapping1617metrics map[string]prometheus.Histogram18}1920// SpanMetricMapping defines how a span is to be reported to Prometheus21type SpanMetricMapping struct {22Name string23Help string24Buckets []float6425}2627// RegisterMetrics registers all metrics created throug the mapping28func (r *PromReporter) RegisterMetrics() error {29r.metrics = make(map[string]prometheus.Histogram)30for k, m := range r.Operations {31metric := prometheus.NewHistogram(prometheus.HistogramOpts{32Name: m.Name,33Help: m.Help,34Buckets: m.Buckets,35})36err := prometheus.Register(metric)37if err != nil {38return err39}4041r.metrics[k] = metric42}43return nil44}4546// Report reports a span as Prometheus metric47func (r *PromReporter) Report(span *jaeger.Span) {48metric, ok := r.metrics[span.OperationName()]49if !ok {50return51}5253metric.Observe(float64(span.Duration() / time.Millisecond))54}5556// Close implements Close() method of Reporter by closing each underlying reporter.57func (r *PromReporter) Close() {5859}606162