-
Notifications
You must be signed in to change notification settings - Fork 25
/
dist-cache-metrics.go
80 lines (73 loc) · 2.69 KB
/
dist-cache-metrics.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package distcache
import (
"fmt"
"github.com/fluxninja/aperture/v2/pkg/metrics"
"github.com/prometheus/client_golang/prometheus"
)
// DistCacheMetrics holds metrics from DistCache, Olric, DMap statistics.
type DistCacheMetrics struct {
EntriesTotal *prometheus.GaugeVec
DeleteHits *prometheus.GaugeVec
DeleteMisses *prometheus.GaugeVec
GetMisses *prometheus.GaugeVec
GetHits *prometheus.GaugeVec
EvictedTotal *prometheus.GaugeVec
}
func newDistCacheMetrics() *DistCacheMetrics {
distCacheMetricsLabels := []string{metrics.DistCacheMemberIDLabel, metrics.DistCacheMemberNameLabel}
return &DistCacheMetrics{
EntriesTotal: prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: metrics.DistCacheEntriesTotalMetricName,
Help: "Total number of entries in the DMap.",
}, distCacheMetricsLabels),
DeleteHits: prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: metrics.DistCacheDeleteHitsMetricName,
Help: "Number of deletion requests resulting in an item being removed in the DMap.",
}, distCacheMetricsLabels),
DeleteMisses: prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: metrics.DistCacheDeleteMissesMetricName,
Help: "Number of deletion requests for missing keys in the DMap.",
}, distCacheMetricsLabels),
GetMisses: prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: metrics.DistCacheGetMissesMetricName,
Help: "Number of entries that have been requested and not found in the DMap.",
}, distCacheMetricsLabels),
GetHits: prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: metrics.DistCacheGetHitsMetricName,
Help: "Number of entries that have been requested and found present in the DMap.",
}, distCacheMetricsLabels),
EvictedTotal: prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: metrics.DistCacheEvictedTotalMetricName,
Help: "Total number of entries removed from cache to free memory for new entries in the DMap.",
}, distCacheMetricsLabels),
}
}
func (dm *DistCacheMetrics) allMetrics() []prometheus.Collector {
return []prometheus.Collector{
dm.EntriesTotal,
dm.DeleteHits,
dm.DeleteMisses,
dm.GetMisses,
dm.GetHits,
dm.EvictedTotal,
}
}
func (dm *DistCacheMetrics) registerMetrics(prometheusRegistry *prometheus.Registry) error {
for _, m := range dm.allMetrics() {
err := prometheusRegistry.Register(m)
if err != nil {
if _, ok := err.(prometheus.AlreadyRegisteredError); !ok {
return fmt.Errorf("unable to register distcache metrics: %v", err)
}
}
}
return nil
}
func (dm *DistCacheMetrics) unregisterMetrics(prometheusRegistry *prometheus.Registry) error {
for _, m := range dm.allMetrics() {
if !prometheusRegistry.Unregister(m) {
return fmt.Errorf("unable to unregister distcache metrics")
}
}
return nil
}