@@ -14,6 +14,8 @@ import (
14
14
"github.com/Rican7/retry/backoff"
15
15
"github.com/Rican7/retry/strategy"
16
16
"github.com/k3s-io/kine/pkg/server"
17
+ "github.com/prometheus/client_golang/prometheus"
18
+ "github.com/prometheus/client_golang/prometheus/collectors"
17
19
"github.com/sirupsen/logrus"
18
20
)
19
21
@@ -179,7 +181,7 @@ func openAndTest(driverName, dataSourceName string) (*sql.DB, error) {
179
181
return db , nil
180
182
}
181
183
182
- func Open (ctx context.Context , driverName , dataSourceName string , connPoolConfig ConnectionPoolConfig , paramCharacter string , numbered bool ) (* Generic , error ) {
184
+ func Open (ctx context.Context , driverName , dataSourceName string , connPoolConfig ConnectionPoolConfig , paramCharacter string , numbered bool , metricsRegisterer prometheus. Registerer ) (* Generic , error ) {
183
185
var (
184
186
db * sql.DB
185
187
err error
@@ -201,6 +203,10 @@ func Open(ctx context.Context, driverName, dataSourceName string, connPoolConfig
201
203
202
204
configureConnectionPooling (connPoolConfig , db , driverName )
203
205
206
+ if metricsRegisterer != nil {
207
+ metricsRegisterer .MustRegister (collectors .NewDBStatsCollector (db , "kine" ))
208
+ }
209
+
204
210
return & Generic {
205
211
DB : db ,
206
212
@@ -248,13 +254,21 @@ func Open(ctx context.Context, driverName, dataSourceName string, connPoolConfig
248
254
}, err
249
255
}
250
256
251
- func (d * Generic ) query (ctx context.Context , sql string , args ... interface {}) (* sql.Rows , error ) {
257
+ func (d * Generic ) query (ctx context.Context , sql string , args ... interface {}) (result * sql.Rows , err error ) {
252
258
logrus .Tracef ("QUERY %v : %s" , args , Stripped (sql ))
259
+ startTime := time .Now ()
260
+ defer func () {
261
+ ObserveSQL (startTime , err == nil , Stripped (sql ), args )
262
+ }()
253
263
return d .DB .QueryContext (ctx , sql , args ... )
254
264
}
255
265
256
- func (d * Generic ) queryRow (ctx context.Context , sql string , args ... interface {}) * sql.Row {
266
+ func (d * Generic ) queryRow (ctx context.Context , sql string , args ... interface {}) ( result * sql.Row ) {
257
267
logrus .Tracef ("QUERY ROW %v : %s" , args , Stripped (sql ))
268
+ startTime := time .Now ()
269
+ defer func () {
270
+ ObserveSQL (startTime , result .Err () == nil , Stripped (sql ), args )
271
+ }()
258
272
return d .DB .QueryRowContext (ctx , sql , args ... )
259
273
}
260
274
@@ -267,7 +281,9 @@ func (d *Generic) execute(ctx context.Context, sql string, args ...interface{})
267
281
wait := strategy .Backoff (backoff .Linear (100 + time .Millisecond ))
268
282
for i := uint (0 ); i < 20 ; i ++ {
269
283
logrus .Tracef ("EXEC (try: %d) %v : %s" , i , args , Stripped (sql ))
284
+ startTime := time .Now ()
270
285
result , err = d .DB .ExecContext (ctx , sql , args ... )
286
+ ObserveSQL (startTime , err == nil , Stripped (sql ), args )
271
287
if err != nil && d .Retry != nil && d .Retry (err ) {
272
288
wait (i )
273
289
continue
0 commit comments