-
Notifications
You must be signed in to change notification settings - Fork 31
/
instrumented_client.go
executable file
·134 lines (114 loc) · 4.08 KB
/
instrumented_client.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package bitflyer
// Code generated by gowrap. DO NOT EDIT.
// template: ../../../.prom-gowrap.tmpl
// gowrap: http://github.com/hexdigest/gowrap
//go:generate gowrap gen -p github.com/brave-intl/bat-go/libs/clients/-i Client -t ../../../.prom-gowrap.tmpl -o instrumented_client.go -l ""
import (
"context"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
)
// ClientWithPrometheus implements Client interface with all methods wrapped
// with Prometheus metrics
type ClientWithPrometheus struct {
base Client
instanceName string
}
var clientDurationSummaryVec = promauto.NewSummaryVec(
prometheus.SummaryOpts{
Name: "bitflyer_client_duration_seconds",
Help: "client runtime duration and result",
MaxAge: time.Minute,
Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
},
[]string{"instance_name", "method", "result"})
// NewClientWithPrometheus returns an instance of the Client decorated with prometheus summary metric
func NewClientWithPrometheus(base Client, instanceName string) ClientWithPrometheus {
return ClientWithPrometheus{
base: base,
instanceName: instanceName,
}
}
// CheckInventory implements Client
func (_d ClientWithPrometheus) CheckInventory(ctx context.Context) (m1 map[string]Inventory, err error) {
_since := time.Now()
defer func() {
result := "ok"
if err != nil {
result = "error"
}
clientDurationSummaryVec.WithLabelValues(_d.instanceName, "CheckInventory", result).Observe(time.Since(_since).Seconds())
}()
return _d.base.CheckInventory(ctx)
}
// CheckPayoutStatus implements Client
func (_d ClientWithPrometheus) CheckPayoutStatus(ctx context.Context, payload CheckBulkStatusPayload) (wp1 *WithdrawToDepositIDBulkResponse, err error) {
_since := time.Now()
defer func() {
result := "ok"
if err != nil {
result = "error"
}
clientDurationSummaryVec.WithLabelValues(_d.instanceName, "CheckPayoutStatus", result).Observe(time.Since(_since).Seconds())
}()
return _d.base.CheckPayoutStatus(ctx, payload)
}
// FetchBalance implements Client
func (_d ClientWithPrometheus) FetchBalance(ctx context.Context) (ip1 *InventoryResponse, err error) {
_since := time.Now()
defer func() {
result := "ok"
if err != nil {
result = "error"
}
clientDurationSummaryVec.WithLabelValues(_d.instanceName, "FetchBalance", result).Observe(time.Since(_since).Seconds())
}()
return _d.base.FetchBalance(ctx)
}
// FetchQuote implements Client
func (_d ClientWithPrometheus) FetchQuote(ctx context.Context, productCode string, readFromFile bool) (qp1 *Quote, err error) {
_since := time.Now()
defer func() {
result := "ok"
if err != nil {
result = "error"
}
clientDurationSummaryVec.WithLabelValues(_d.instanceName, "FetchQuote", result).Observe(time.Since(_since).Seconds())
}()
return _d.base.FetchQuote(ctx, productCode, readFromFile)
}
// RefreshToken implements Client
func (_d ClientWithPrometheus) RefreshToken(ctx context.Context, payload TokenPayload) (tp1 *TokenResponse, err error) {
_since := time.Now()
defer func() {
result := "ok"
if err != nil {
result = "error"
}
clientDurationSummaryVec.WithLabelValues(_d.instanceName, "RefreshToken", result).Observe(time.Since(_since).Seconds())
}()
return _d.base.RefreshToken(ctx, payload)
}
// SetAuthToken implements Client
func (_d ClientWithPrometheus) SetAuthToken(authToken string) {
_since := time.Now()
defer func() {
result := "ok"
clientDurationSummaryVec.WithLabelValues(_d.instanceName, "SetAuthToken", result).Observe(time.Since(_since).Seconds())
}()
_d.base.SetAuthToken(authToken)
return
}
// UploadBulkPayout implements Client
func (_d ClientWithPrometheus) UploadBulkPayout(ctx context.Context, payload WithdrawToDepositIDBulkPayload) (wp1 *WithdrawToDepositIDBulkResponse, err error) {
_since := time.Now()
defer func() {
result := "ok"
if err != nil {
result = "error"
}
clientDurationSummaryVec.WithLabelValues(_d.instanceName, "UploadBulkPayout", result).Observe(time.Since(_since).Seconds())
}()
return _d.base.UploadBulkPayout(ctx, payload)
}