Skip to content

Commit b718a61

Browse files
committed
refactoring: move metrics to metrics.go
1 parent 981e143 commit b718a61

File tree

2 files changed

+82
-77
lines changed

2 files changed

+82
-77
lines changed

cache.go

Lines changed: 4 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,12 @@ import (
1313
"github.com/coocood/freecache"
1414
"github.com/go-redis/redis/v8"
1515
"github.com/klauspost/compress/s2"
16-
"github.com/prometheus/client_golang/prometheus"
1716
"github.com/rs/zerolog/log"
1817
uuid "github.com/satori/go.uuid"
1918
"github.com/vmihailenco/msgpack/v5"
2019
"golang.org/x/sync/singleflight"
2120
)
2221

23-
var _ = log.Logger
24-
2522
const (
2623
lockSuffix = "_LOCK"
2724
delimiter = "~|~"
@@ -50,10 +47,6 @@ const (
5047
s2Compression = 0x1
5148
)
5249

53-
var (
54-
getNow = time.Now
55-
)
56-
5750
var (
5851
// ErrTimeout is timeout error
5952
ErrTimeout = errors.New("timeout")
@@ -65,6 +58,10 @@ var (
6558
ErrTypeMismatch = errors.New("value type mismatches cached type")
6659
)
6760

61+
var (
62+
getNow = time.Now
63+
)
64+
6865
// SetNowFunc is a helper function to replace time.Now(), usually used for testing.
6966
func SetNowFunc(f func() time.Time) { getNow = f }
7067

@@ -81,76 +78,6 @@ type ValueBytesExpiredAt struct {
8178
ExpiredAt int64 `msgpack:"e,omitempty"` // UNIX timestamp in Milliseconds.
8279
}
8380

84-
type metricSet struct {
85-
Hit *prometheus.CounterVec
86-
Latency *prometheus.HistogramVec
87-
Error *prometheus.CounterVec
88-
}
89-
90-
type metricHitLabel string
91-
type metricErrLabel string
92-
93-
var (
94-
hitLabels = []string{"hit"}
95-
// metrics hit labels
96-
hitLabelMemory metricHitLabel = "mem"
97-
hitLabelRedis metricHitLabel = "redis"
98-
hitLabelDB metricHitLabel = "db"
99-
// The unit is ms.
100-
latencyBucket = []float64{
101-
1, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096}
102-
103-
errLabels = []string{"when"}
104-
// metrics error labels
105-
errLabelSetRedis metricErrLabel = "set_redis"
106-
errLabelSetMemCache metricErrLabel = "set_mem_cache"
107-
errLabelInvalidate metricErrLabel = "invalidate_error"
108-
errLabelMemoryUnmarshalFailed metricErrLabel = "mem_unmarshal_failed"
109-
errLabelRedisUnmarshalFailed metricErrLabel = "redis_unmarshal_failed"
110-
)
111-
112-
func newMetricSet(appName string) *metricSet {
113-
return &metricSet{
114-
Hit: prometheus.NewCounterVec(
115-
prometheus.CounterOpts{
116-
Name: fmt.Sprintf("%s_dcache_hit_total", appName),
117-
Help: "how many hits of 3 different operations: {mem, redis, db}.",
118-
}, hitLabels),
119-
Latency: prometheus.NewHistogramVec(
120-
prometheus.HistogramOpts{
121-
Name: fmt.Sprintf("%s_dcache_latency_milliseconds", appName),
122-
Help: "Cache read latency in milliseconds",
123-
Buckets: latencyBucket,
124-
}, hitLabels),
125-
Error: prometheus.NewCounterVec(
126-
prometheus.CounterOpts{
127-
Name: fmt.Sprintf("%s_dcache_error_total", appName),
128-
Help: "how many internal errors happened",
129-
}, errLabels),
130-
}
131-
}
132-
133-
func (m *metricSet) Register() {
134-
err := prometheus.Register(m.Hit)
135-
if err != nil {
136-
log.Err(err).Msgf("failed to register prometheus Hit counters")
137-
}
138-
err = prometheus.Register(m.Latency)
139-
if err != nil {
140-
log.Err(err).Msgf("failed to register prometheus Latency histogram")
141-
}
142-
err = prometheus.Register(m.Error)
143-
if err != nil {
144-
log.Err(err).Msgf("failed to register prometheus Error counter")
145-
}
146-
}
147-
148-
func (m *metricSet) Unregister() {
149-
prometheus.Unregister(m.Hit)
150-
prometheus.Unregister(m.Error)
151-
prometheus.Unregister(m.Latency)
152-
}
153-
15481
// DCache implements cache.
15582
type DCache struct {
15683
conn redis.UniversalClient

metrics.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package dcache
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/prometheus/client_golang/prometheus"
7+
"github.com/rs/zerolog/log"
8+
)
9+
10+
type metricSet struct {
11+
Hit *prometheus.CounterVec
12+
Latency *prometheus.HistogramVec
13+
Error *prometheus.CounterVec
14+
}
15+
16+
type metricHitLabel string
17+
type metricErrLabel string
18+
19+
var (
20+
hitLabels = []string{"hit"}
21+
// metrics hit labels
22+
hitLabelMemory metricHitLabel = "mem"
23+
hitLabelRedis metricHitLabel = "redis"
24+
hitLabelDB metricHitLabel = "db"
25+
// The unit is ms.
26+
latencyBucket = []float64{
27+
1, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096}
28+
29+
errLabels = []string{"when"}
30+
// metrics error labels
31+
errLabelSetRedis metricErrLabel = "set_redis"
32+
errLabelSetMemCache metricErrLabel = "set_mem_cache"
33+
errLabelInvalidate metricErrLabel = "invalidate_error"
34+
errLabelMemoryUnmarshalFailed metricErrLabel = "mem_unmarshal_failed"
35+
errLabelRedisUnmarshalFailed metricErrLabel = "redis_unmarshal_failed"
36+
)
37+
38+
func newMetricSet(appName string) *metricSet {
39+
return &metricSet{
40+
Hit: prometheus.NewCounterVec(
41+
prometheus.CounterOpts{
42+
Name: fmt.Sprintf("%s_dcache_hit_total", appName),
43+
Help: "how many hits of 3 different operations: {mem, redis, db}.",
44+
}, hitLabels),
45+
Latency: prometheus.NewHistogramVec(
46+
prometheus.HistogramOpts{
47+
Name: fmt.Sprintf("%s_dcache_latency_milliseconds", appName),
48+
Help: "Cache read latency in milliseconds",
49+
Buckets: latencyBucket,
50+
}, hitLabels),
51+
Error: prometheus.NewCounterVec(
52+
prometheus.CounterOpts{
53+
Name: fmt.Sprintf("%s_dcache_error_total", appName),
54+
Help: "how many internal errors happened",
55+
}, errLabels),
56+
}
57+
}
58+
59+
func (m *metricSet) Register() {
60+
err := prometheus.Register(m.Hit)
61+
if err != nil {
62+
log.Err(err).Msgf("failed to register prometheus Hit counters")
63+
}
64+
err = prometheus.Register(m.Latency)
65+
if err != nil {
66+
log.Err(err).Msgf("failed to register prometheus Latency histogram")
67+
}
68+
err = prometheus.Register(m.Error)
69+
if err != nil {
70+
log.Err(err).Msgf("failed to register prometheus Error counter")
71+
}
72+
}
73+
74+
func (m *metricSet) Unregister() {
75+
prometheus.Unregister(m.Hit)
76+
prometheus.Unregister(m.Error)
77+
prometheus.Unregister(m.Latency)
78+
}

0 commit comments

Comments
 (0)