github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/metric/query_counter.go (about) 1 package metric 2 3 import ( 4 "database/sql" 5 6 "github.com/Masterminds/squirrel" 7 "github.com/pf-qiu/concourse/v6/atc/db" 8 ) 9 10 func CountQueries(conn db.Conn) db.Conn { 11 return &countingConn{ 12 Conn: conn, 13 } 14 } 15 16 type countingConn struct { 17 db.Conn 18 } 19 20 func (e *countingConn) Query(query string, args ...interface{}) (*sql.Rows, error) { 21 Metrics.DatabaseQueries.Inc() 22 23 return e.Conn.Query(query, args...) 24 } 25 26 func (e *countingConn) QueryRow(query string, args ...interface{}) squirrel.RowScanner { 27 Metrics.DatabaseQueries.Inc() 28 29 return e.Conn.QueryRow(query, args...) 30 } 31 32 func (e *countingConn) Exec(query string, args ...interface{}) (sql.Result, error) { 33 Metrics.DatabaseQueries.Inc() 34 35 return e.Conn.Exec(query, args...) 36 } 37 38 func (e *countingConn) Begin() (db.Tx, error) { 39 tx, err := e.Conn.Begin() 40 if err != nil { 41 return tx, err 42 } 43 44 return &countingTx{Tx: tx}, nil 45 } 46 47 type countingTx struct { 48 db.Tx 49 } 50 51 func (e *countingTx) Query(query string, args ...interface{}) (*sql.Rows, error) { 52 Metrics.DatabaseQueries.Inc() 53 54 return e.Tx.Query(query, args...) 55 } 56 57 func (e *countingTx) QueryRow(query string, args ...interface{}) squirrel.RowScanner { 58 Metrics.DatabaseQueries.Inc() 59 60 return e.Tx.QueryRow(query, args...) 61 } 62 63 func (e *countingTx) Exec(query string, args ...interface{}) (sql.Result, error) { 64 Metrics.DatabaseQueries.Inc() 65 66 return e.Tx.Exec(query, args...) 67 }