/
retry.go
66 lines (62 loc) · 2.32 KB
/
retry.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
package promhelper
import (
"github.com/CharLemAznable/resilience4go/retry"
"github.com/prometheus/client_golang/prometheus"
)
const (
rtKindSuccessfulWithoutRetry = "successful_without_retry"
rtKindSuccessfulWithRetry = "successful_with_retry"
rtKindFailedWithoutRetry = "failed_without_retry"
rtKindFailedWithRetry = "failed_with_retry"
retryCallsName = "resilience4go_retry_calls"
retryCallsHelp = "The number of successful/failed calls with/without retry"
)
func RetryRegistry(entry retry.Retry) (RegisterFn, UnregisterFn) {
numberOfSuccessfulCallsWithoutRetryAttemptCounter := prometheus.NewCounterFunc(
prometheus.CounterOpts{
Name: retryCallsName,
Help: retryCallsHelp,
ConstLabels: prometheus.Labels{labelKeyName: entry.Name(), labelKeyKind: rtKindSuccessfulWithoutRetry},
},
func() float64 {
return float64(entry.Metrics().NumberOfSuccessfulCallsWithoutRetryAttempt())
},
)
numberOfSuccessfulCallsWithRetryAttemptCounter := prometheus.NewCounterFunc(
prometheus.CounterOpts{
Name: retryCallsName,
Help: retryCallsHelp,
ConstLabels: prometheus.Labels{labelKeyName: entry.Name(), labelKeyKind: rtKindSuccessfulWithRetry},
},
func() float64 {
return float64(entry.Metrics().NumberOfSuccessfulCallsWithRetryAttempt())
},
)
numberOfFailedCallsWithoutRetryAttemptCounter := prometheus.NewCounterFunc(
prometheus.CounterOpts{
Name: retryCallsName,
Help: retryCallsHelp,
ConstLabels: prometheus.Labels{labelKeyName: entry.Name(), labelKeyKind: rtKindFailedWithoutRetry},
},
func() float64 {
return float64(entry.Metrics().NumberOfFailedCallsWithoutRetryAttempt())
},
)
numberOfFailedCallsWithRetryAttempt := prometheus.NewCounterFunc(
prometheus.CounterOpts{
Name: retryCallsName,
Help: retryCallsHelp,
ConstLabels: prometheus.Labels{labelKeyName: entry.Name(), labelKeyKind: rtKindFailedWithRetry},
},
func() float64 {
return float64(entry.Metrics().NumberOfFailedCallsWithRetryAttempt())
},
)
collectors := []prometheus.Collector{
numberOfSuccessfulCallsWithoutRetryAttemptCounter,
numberOfSuccessfulCallsWithRetryAttemptCounter,
numberOfFailedCallsWithoutRetryAttemptCounter,
numberOfFailedCallsWithRetryAttempt,
}
return buildRegisterFn(collectors...), buildUnregisterFn(collectors...)
}