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  }