@@ -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