1
0
Fork 0

Merge pull request #224 from rqlite/db_stats

Add low-level DB expvar stats
master
Philip O'Toole 8 years ago committed by GitHub
commit 9306ca49ff

@ -5,6 +5,7 @@
- [PR #206](https://github.com/rqlite/rqlite/pull/206), [#217](https://github.com/rqlite/rqlite/pull/217): Support loading from SQLite dump files (experimental). - [PR #206](https://github.com/rqlite/rqlite/pull/206), [#217](https://github.com/rqlite/rqlite/pull/217): Support loading from SQLite dump files (experimental).
- [PR #211](https://github.com/rqlite/rqlite/pull/211): Diagnostics show actual foreign key constraint state. - [PR #211](https://github.com/rqlite/rqlite/pull/211): Diagnostics show actual foreign key constraint state.
- [PR #212](https://github.com/rqlite/rqlite/pull/212): Add database configuration to diagnostics output. - [PR #212](https://github.com/rqlite/rqlite/pull/212): Add database configuration to diagnostics output.
- [PR #224](https://github.com/rqlite/rqlite/pull/224): Add low-level database layer expvar stats.
## 3.6.0 (October 1st 2016) ## 3.6.0 (October 1st 2016)
- [PR #195](https://github.com/rqlite/rqlite/pull/195): Set Content-type "application/json" on all HTTP responses. - [PR #195](https://github.com/rqlite/rqlite/pull/195): Set Content-type "application/json" on all HTTP responses.

@ -4,6 +4,7 @@ package db
import ( import (
"database/sql/driver" "database/sql/driver"
"expvar"
"fmt" "fmt"
"io" "io"
"time" "time"
@ -17,13 +18,24 @@ const (
fkChecks = "PRAGMA foreign_keys" fkChecks = "PRAGMA foreign_keys"
fkChecksEnabled = "PRAGMA foreign_keys=ON" fkChecksEnabled = "PRAGMA foreign_keys=ON"
fkChecksDisabled = "PRAGMA foreign_keys=OFF" fkChecksDisabled = "PRAGMA foreign_keys=OFF"
numExecutions = "executions"
numQueries = "queries"
numTransactions = "transactions"
) )
// DBVersion is the SQLite version. // DBVersion is the SQLite version.
var DBVersion string var DBVersion string
// stats captures stats for the DB layer.
var stats *expvar.Map
func init() { func init() {
DBVersion, _, _ = sqlite3.Version() DBVersion, _, _ = sqlite3.Version()
stats = expvar.NewMap("db")
stats.Add(numExecutions, 0)
stats.Add(numQueries, 0)
stats.Add(numTransactions, 0)
} }
// DB is the SQL database. // DB is the SQL database.
@ -161,6 +173,9 @@ func (db *DB) FKConstraints() (bool, error) {
// Execute executes queries that modify the database. // Execute executes queries that modify the database.
func (db *DB) Execute(queries []string, tx, xTime bool) ([]*Result, error) { func (db *DB) Execute(queries []string, tx, xTime bool) ([]*Result, error) {
stats.Add(numQueries, 1)
stats.Add(numExecutions, int64(len(queries)))
type Execer interface { type Execer interface {
Exec(query string, args []driver.Value) (driver.Result, error) Exec(query string, args []driver.Value) (driver.Result, error)
} }
@ -254,6 +269,8 @@ func (db *DB) Execute(queries []string, tx, xTime bool) ([]*Result, error) {
// Query executes queries that return rows, but don't modify the database. // Query executes queries that return rows, but don't modify the database.
func (db *DB) Query(queries []string, tx, xTime bool) ([]*Rows, error) { func (db *DB) Query(queries []string, tx, xTime bool) ([]*Rows, error) {
stats.Add(numQueries, int64(len(queries)))
type Queryer interface { type Queryer interface {
Query(query string, args []driver.Value) (driver.Rows, error) Query(query string, args []driver.Value) (driver.Rows, error)
} }

Loading…
Cancel
Save