Skip to content

Commit 2ba5042

Browse files
committed
refactor metrics/sql and upload with off gocognit linter
1 parent 3343652 commit 2ba5042

File tree

2 files changed

+119
-24
lines changed

2 files changed

+119
-24
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
* Refactored `metrics/sql.go` and extract funcs
12
* Refactored `internal/table/retry_test.go` and extract func `retry_test.checkResultsRetryWithCustomErrors`
23
* Refactored `internal/table/client.go` and extract func `client.onCloseSession`
34
* Refactored `internal/decimal/decimal.go` and extract func `decimal.dotStringAnalysis`

metrics/sql.go

Lines changed: 118 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,34 @@ func databaseSQL(config Config) (t trace.DatabaseSQL) {
2727
txCommitLatency := config.WithSystem("commit").TimerVec("latency")
2828
txRollback := config.CounterVec("rollback", "status")
2929
txRollbackLatency := config.WithSystem("rollback").TimerVec("latency")
30-
t.OnConnectorConnect = func(info trace.DatabaseSQLConnectorConnectStartInfo) func(
30+
31+
databaseSQLConnectorEvents := config.Details() & trace.DatabaseSQLConnectorEvents
32+
databaseSQLTxEvents := config.Details() & trace.DatabaseSQLTxEvents
33+
databaseSQLEvents := config.Details() & trace.DatabaseSQLEvents
34+
databaseSQLConnEvents := config.Details() & trace.DatabaseSQLConnEvents
35+
36+
t.OnConnectorConnect = onConnectorConnect(databaseSQLConnectorEvents, conns)
37+
t.OnConnClose = onConnCloseDatabaseSQL(databaseSQLConnectorEvents, conns)
38+
t.OnConnBegin = onConnBeginDatabaseSQL(databaseSQLTxEvents, txBegin, txBeginLatency)
39+
t.OnTxCommit = onTxCommit(databaseSQLTxEvents, txCommit, txCommitLatency)
40+
t.OnTxExec = onTxExec(databaseSQLTxEvents, txExec, txExecLatency)
41+
t.OnTxQuery = onTxQuery(databaseSQLTxEvents, txQuery, txQueryLatency)
42+
t.OnTxRollback = onTxRollback(databaseSQLTxEvents, txRollback, txRollbackLatency)
43+
t.OnConnExec = onConnExec(databaseSQLEvents, databaseSQLConnEvents, inflight, exec, execLatency)
44+
t.OnConnQuery = onConnQuery(databaseSQLEvents, databaseSQLConnEvents, inflight, query, queryLatency)
45+
46+
return t
47+
}
48+
49+
// The `onConnectorConnect` function is called when a connection is established to the database.
50+
func onConnectorConnect(
51+
databaseSQLConnectorEvents trace.Details,
52+
conns GaugeVec,
53+
) func(info trace.DatabaseSQLConnectorConnectStartInfo) func(trace.DatabaseSQLConnectorConnectDoneInfo) {
54+
return func(info trace.DatabaseSQLConnectorConnectStartInfo) func(
3155
trace.DatabaseSQLConnectorConnectDoneInfo,
3256
) {
33-
if config.Details()&trace.DatabaseSQLConnectorEvents != 0 {
57+
if databaseSQLConnectorEvents != 0 {
3458
return func(info trace.DatabaseSQLConnectorConnectDoneInfo) {
3559
if info.Error == nil {
3660
conns.With(nil).Add(1)
@@ -40,18 +64,34 @@ func databaseSQL(config Config) (t trace.DatabaseSQL) {
4064

4165
return nil
4266
}
43-
t.OnConnClose = func(info trace.DatabaseSQLConnCloseStartInfo) func(trace.DatabaseSQLConnCloseDoneInfo) {
44-
if config.Details()&trace.DatabaseSQLConnectorEvents != 0 {
67+
}
68+
69+
// onConnCloseDatabaseSQL is a function that is used to handle the closing of a database connection.
70+
func onConnCloseDatabaseSQL(
71+
databaseSQLConnectorEvents trace.Details,
72+
conns GaugeVec,
73+
) func(info trace.DatabaseSQLConnCloseStartInfo) func(trace.DatabaseSQLConnCloseDoneInfo) {
74+
return func(info trace.DatabaseSQLConnCloseStartInfo) func(trace.DatabaseSQLConnCloseDoneInfo) {
75+
if databaseSQLConnectorEvents != 0 {
4576
return func(info trace.DatabaseSQLConnCloseDoneInfo) {
4677
conns.With(nil).Add(-1)
4778
}
4879
}
4980

5081
return nil
5182
}
52-
t.OnConnBegin = func(info trace.DatabaseSQLConnBeginStartInfo) func(trace.DatabaseSQLConnBeginDoneInfo) {
83+
}
84+
85+
// onConnBeginDatabaseSQL measures `trace.DatabaseSQLConnBeginStartInfo` events and updates `txBegin`
86+
// and `txBeginLatency`
87+
func onConnBeginDatabaseSQL(
88+
databaseSQLTxEvents trace.Details,
89+
txBegin CounterVec,
90+
txBeginLatency TimerVec,
91+
) func(info trace.DatabaseSQLConnBeginStartInfo) func(trace.DatabaseSQLConnBeginDoneInfo) {
92+
return func(info trace.DatabaseSQLConnBeginStartInfo) func(trace.DatabaseSQLConnBeginDoneInfo) {
5393
start := time.Now()
54-
if config.Details()&trace.DatabaseSQLTxEvents != 0 {
94+
if databaseSQLTxEvents != 0 {
5595
return func(info trace.DatabaseSQLConnBeginDoneInfo) {
5696
txBegin.With(map[string]string{
5797
"status": errorBrief(info.Error),
@@ -62,23 +102,41 @@ func databaseSQL(config Config) (t trace.DatabaseSQL) {
62102

63103
return nil
64104
}
65-
t.OnTxCommit = func(info trace.DatabaseSQLTxCommitStartInfo) func(trace.DatabaseSQLTxCommitDoneInfo) {
105+
}
106+
107+
// onTxCommit is a function that returns a closure function. The closure function
108+
// takes a trace.DatabaseSQLTxCommitDoneInfo argument and performs certain actions based on the input.
109+
func onTxCommit(
110+
databaseSQLTxEvents trace.Details,
111+
txCommit CounterVec,
112+
txCommitLatency TimerVec,
113+
) func(info trace.DatabaseSQLTxCommitStartInfo) func(trace.DatabaseSQLTxCommitDoneInfo) {
114+
return func(info trace.DatabaseSQLTxCommitStartInfo) func(trace.DatabaseSQLTxCommitDoneInfo) {
66115
start := time.Now()
67116

68117
return func(info trace.DatabaseSQLTxCommitDoneInfo) {
69-
if config.Details()&trace.DatabaseSQLTxEvents != 0 {
118+
if databaseSQLTxEvents != 0 {
70119
txCommit.With(map[string]string{
71120
"status": errorBrief(info.Error),
72121
}).Inc()
73122
txCommitLatency.With(nil).Record(time.Since(start))
74123
}
75124
}
76125
}
77-
t.OnTxExec = func(info trace.DatabaseSQLTxExecStartInfo) func(trace.DatabaseSQLTxExecDoneInfo) {
126+
}
127+
128+
// onTxExec is a function that returns a callback function to be executed when a trace.DatabaseSQLTxExecDoneInfo event
129+
// occurs.
130+
func onTxExec(
131+
databaseSQLTxEvents trace.Details,
132+
txExec CounterVec,
133+
txExecLatency TimerVec,
134+
) func(info trace.DatabaseSQLTxExecStartInfo) func(trace.DatabaseSQLTxExecDoneInfo) {
135+
return func(info trace.DatabaseSQLTxExecStartInfo) func(trace.DatabaseSQLTxExecDoneInfo) {
78136
start := time.Now()
79137

80138
return func(info trace.DatabaseSQLTxExecDoneInfo) {
81-
if config.Details()&trace.DatabaseSQLTxEvents != 0 {
139+
if databaseSQLTxEvents != 0 {
82140
status := errorBrief(info.Error)
83141
txExec.With(map[string]string{
84142
"status": status,
@@ -87,11 +145,20 @@ func databaseSQL(config Config) (t trace.DatabaseSQL) {
87145
}
88146
}
89147
}
90-
t.OnTxQuery = func(info trace.DatabaseSQLTxQueryStartInfo) func(trace.DatabaseSQLTxQueryDoneInfo) {
148+
}
149+
150+
// onTxQuery is a callback function that measures trace events related to database transactions and queries
151+
// in the "database/sql" package.
152+
func onTxQuery(
153+
databaseSQLTxEvents trace.Details,
154+
txQuery CounterVec,
155+
txQueryLatency TimerVec,
156+
) func(info trace.DatabaseSQLTxQueryStartInfo) func(trace.DatabaseSQLTxQueryDoneInfo) {
157+
return func(info trace.DatabaseSQLTxQueryStartInfo) func(trace.DatabaseSQLTxQueryDoneInfo) {
91158
start := time.Now()
92159

93160
return func(info trace.DatabaseSQLTxQueryDoneInfo) {
94-
if config.Details()&trace.DatabaseSQLTxEvents != 0 {
161+
if databaseSQLTxEvents != 0 {
95162
status := errorBrief(info.Error)
96163
txQuery.With(map[string]string{
97164
"status": status,
@@ -100,20 +167,39 @@ func databaseSQL(config Config) (t trace.DatabaseSQL) {
100167
}
101168
}
102169
}
103-
t.OnTxRollback = func(info trace.DatabaseSQLTxRollbackStartInfo) func(trace.DatabaseSQLTxRollbackDoneInfo) {
170+
}
171+
172+
// onTxRollback is a function that returns a closure. The closure takes in a `trace.DatabaseSQLTxRollbackStartInfo`
173+
// argument and returns another closure that takes in a `trace.Database`.
174+
func onTxRollback(
175+
databaseSQLTxEvents trace.Details,
176+
txRollback CounterVec,
177+
txRollbackLatency TimerVec,
178+
) func(info trace.DatabaseSQLTxRollbackStartInfo) func(trace.DatabaseSQLTxRollbackDoneInfo) {
179+
return func(info trace.DatabaseSQLTxRollbackStartInfo) func(trace.DatabaseSQLTxRollbackDoneInfo) {
104180
start := time.Now()
105181

106182
return func(info trace.DatabaseSQLTxRollbackDoneInfo) {
107-
if config.Details()&trace.DatabaseSQLTxEvents != 0 {
183+
if databaseSQLTxEvents != 0 {
108184
txRollback.With(map[string]string{
109185
"status": errorBrief(info.Error),
110186
}).Inc()
111187
txRollbackLatency.With(nil).Record(time.Since(start))
112188
}
113189
}
114190
}
115-
t.OnConnExec = func(info trace.DatabaseSQLConnExecStartInfo) func(trace.DatabaseSQLConnExecDoneInfo) {
116-
if config.Details()&trace.DatabaseSQLEvents != 0 {
191+
}
192+
193+
// onConnExec measures the execution of a database/sql connection command.
194+
func onConnExec(
195+
databaseSQLEvents trace.Details,
196+
databaseSQLConnEvents trace.Details,
197+
inflight GaugeVec,
198+
exec CounterVec,
199+
execLatency TimerVec,
200+
) func(info trace.DatabaseSQLConnExecStartInfo) func(trace.DatabaseSQLConnExecDoneInfo) {
201+
return func(info trace.DatabaseSQLConnExecStartInfo) func(trace.DatabaseSQLConnExecDoneInfo) {
202+
if databaseSQLEvents != 0 {
117203
inflight.With(nil).Add(1)
118204
}
119205
var (
@@ -122,10 +208,10 @@ func databaseSQL(config Config) (t trace.DatabaseSQL) {
122208
)
123209

124210
return func(info trace.DatabaseSQLConnExecDoneInfo) {
125-
if config.Details()&trace.DatabaseSQLEvents != 0 {
211+
if databaseSQLEvents != 0 {
126212
inflight.With(nil).Add(-1)
127213
}
128-
if config.Details()&trace.DatabaseSQLConnEvents != 0 {
214+
if databaseSQLConnEvents != 0 {
129215
status := errorBrief(info.Error)
130216
exec.With(map[string]string{
131217
"status": status,
@@ -137,8 +223,18 @@ func databaseSQL(config Config) (t trace.DatabaseSQL) {
137223
}
138224
}
139225
}
140-
t.OnConnQuery = func(info trace.DatabaseSQLConnQueryStartInfo) func(trace.DatabaseSQLConnQueryDoneInfo) {
141-
if config.Details()&trace.DatabaseSQLEvents != 0 {
226+
}
227+
228+
// onConnQuery handles the start and completion of a connection query event.
229+
func onConnQuery(
230+
databaseSQLEvents trace.Details,
231+
databaseSQLConnEvents trace.Details,
232+
inflight GaugeVec,
233+
query CounterVec,
234+
queryLatency TimerVec,
235+
) func(info trace.DatabaseSQLConnQueryStartInfo) func(trace.DatabaseSQLConnQueryDoneInfo) {
236+
return func(info trace.DatabaseSQLConnQueryStartInfo) func(trace.DatabaseSQLConnQueryDoneInfo) {
237+
if databaseSQLEvents != 0 {
142238
inflight.With(nil).Add(1)
143239
}
144240
var (
@@ -147,10 +243,10 @@ func databaseSQL(config Config) (t trace.DatabaseSQL) {
147243
)
148244

149245
return func(info trace.DatabaseSQLConnQueryDoneInfo) {
150-
if config.Details()&trace.DatabaseSQLEvents != 0 {
246+
if databaseSQLEvents != 0 {
151247
inflight.With(nil).Add(-1)
152248
}
153-
if config.Details()&trace.DatabaseSQLConnEvents != 0 {
249+
if databaseSQLConnEvents != 0 {
154250
status := errorBrief(info.Error)
155251
query.With(map[string]string{
156252
"status": status,
@@ -162,6 +258,4 @@ func databaseSQL(config Config) (t trace.DatabaseSQL) {
162258
}
163259
}
164260
}
165-
166-
return t
167261
}

0 commit comments

Comments
 (0)