Utility to assert queries result on PostgreSQL/MySQL DB
Go Makefile
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib
vendor
.gitignore
.travis.yml
CHANGELOG.md
LICENSE
Makefile
README.md
db-checker.go
glide.lock
glide.yaml

README.md

Build Status

db-checker

Utility to run queries on PostgreSQL/MySQL database, and alert on some assertions against query result.

For example, one can check if query returns data, or query does not return data.

Installation

Grab latest release on releases page, or build from source.

Building from source

You need working Go compiler. Tested against Go 1.5+

On Linux/OSX:

# set GOPATH to some valid path
export GOPATH=~/go && mkdir -p ~/go
go get github.com/abulimov/db-checker

Now you have db-checker binary.

Checks

Checks are specified as YAML files, with only 3 mandatory fields:

  • query: any SQL query you can imagine
  • description: human-readable description of performed check
  • assert: type of check assertion, present, absent, true or false

Check example

Check if we have any locks in our database. We set the assertion type as absent because any found lock will result in non-zero exit status.

query: |
    SELECT
      COALESCE(blockingl.relation::regclass::text,blockingl.locktype) as locked_item,
      (now() - blockeda.query_start)::time AS waiting_duration,
      blockeda.pid AS blocked_pid,
      blockeda.query as blocked_query, blockedl.mode as blocked_mode,
      blockinga.pid AS blocking_pid, blockinga.query as blocking_query,
      blockingl.mode as blocking_mode
    FROM pg_catalog.pg_locks blockedl
    JOIN pg_stat_activity blockeda ON blockedl.pid = blockeda.pid
    JOIN pg_catalog.pg_locks blockingl ON(
      ( (blockingl.transactionid=blockedl.transactionid) OR
      (blockingl.relation=blockedl.relation AND blockingl.locktype=blockedl.locktype)
      ) AND blockedl.pid != blockingl.pid)
    JOIN pg_stat_activity blockinga ON blockingl.pid = blockinga.pid
      AND blockinga.datid = blockeda.datid
    WHERE NOT blockedl.granted;
description: Locks in database
assert: absent

More examples in examples directory.

Usage

This utility is a Nagios-compatible plugin.

You must at least specify credentials to access the database and a directory to get checks from.

nagios@example.com:~$ ./db-checker --dbname stupid --dbuser=checker --dbhost=localhost --dbpassword=SomePassword --checks /opt/checks/stupid
WARNING:
* Stupid check
No results found
 | problems=1;0;0;0;0

nagios@example.com:~$ ./db-checker --dbname movies --dbuser=checker --dbhost=localhost --dbpassword=SomePassword --checks /opt/checks/movies --critical
CRITICAL:
* Found movies with zero duration
N. ¦ column1 ¦ orig_title                ¦ rus_title
1. ¦ 1346    ¦ Midnight Express          ¦ Полуночный экспресс
2. ¦ 2165    ¦ In the Loop               ¦ В петле
3. ¦ 2254    ¦ Sex & Drugs & Rock & Roll ¦ Секс, наркотики и рок-н-ролл
4. ¦ 2534    ¦ Resident Evil: Damnation  ¦ Обитель Зла: Проклятие

* Found movies with zero rating
N. ¦ column1 ¦ orig_title  ¦ rus_title
1. ¦ 2165    ¦ In the Loop ¦ В петле
 | problems=5;0;0;0;0

License

Licensed under the MIT License, see LICENSE.