Files
kopia/internal/metrics/prom_cache.go
dependabot[bot] b7074f76bf build(deps): bump github.com/prometheus/client_golang (#4070)
Bumps the telemetry-dependencies group with 1 update in the / directory: [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang).


Updates `github.com/prometheus/client_golang` from 1.19.1 to 1.20.1
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/v1.20.1/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.19.1...v1.20.1)

---
updated-dependencies:
- dependency-name: github.com/prometheus/client_golang
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: telemetry-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-24 04:44:35 +00:00

52 lines
1.2 KiB
Go

package metrics
import (
"sync"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"golang.org/x/exp/maps"
)
const (
prometheusCounterSuffix = "_total"
prometheusPrefix = "kopia_"
)
//nolint:gochecknoglobals
var (
promCacheMutex sync.Mutex
// +checklocks:promCacheMutex
promCounters = map[string]*prometheus.CounterVec{}
// +checklocks:promCacheMutex
promHistograms = map[string]*prometheus.HistogramVec{}
)
func getPrometheusCounter(opts prometheus.CounterOpts, labels map[string]string) prometheus.Counter {
promCacheMutex.Lock()
defer promCacheMutex.Unlock()
prom := promCounters[opts.Name]
if prom == nil {
prom = promauto.NewCounterVec(opts, maps.Keys(labels))
promCounters[opts.Name] = prom
}
return prom.WithLabelValues(maps.Values(labels)...)
}
func getPrometheusHistogram(opts prometheus.HistogramOpts, labels map[string]string) prometheus.Observer { //nolint:gocritic
promCacheMutex.Lock()
defer promCacheMutex.Unlock()
prom := promHistograms[opts.Name]
if prom == nil {
prom = promauto.NewHistogramVec(opts, maps.Keys(labels))
promHistograms[opts.Name] = prom
}
return prom.WithLabelValues(maps.Values(labels)...)
}