1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright © 2008 Julien Blache
# Copyright © 2008 Josselin Mouette
# Licensed under the LGPL version 2.1 or later
import sys
import _mssql
import pymssql
import optparse
from datetime import datetime
class MyParser(optparse.OptionParser):
def error(self,msg):
sys.stdout.write("UNKNOWN: %s\n" %msg)
sys.exit(3)
parser=MyParser(description="Nagios check for MS SQL Server 2000 & up")
parser.add_option ('-H', '--host', dest="hostname", help="Host to query (required)")
parser.add_option ('-u', '--user', dest="user", help="Database user name (required)")
parser.add_option ('-p', '--password', dest="password", help="Database password (required)")
parser.add_option ('-d', '--database', dest="database", help="Database to check (optional)")
(options, args) = parser.parse_args()
if options.hostname == None or options.user == None or options.password == None:
parser.error('missing a required argument')
if options.database:
if not options.database.replace('_','').isalnum():
parser.error('incorrect database name')
def escape (string, *args):
bs = '\\'
qt = '\''
l = []
for arg in args:
l.append (qt+str(arg).replace(bs, bs+bs).replace(qt, bs+qt)+qt)
return string%tuple(l)
try:
stamp1 = datetime.utcnow()
conn = pymssql.connect(host = options.hostname, user = options.user, password = options.password)
curs = conn.cursor()
if options.database:
curs.execute(escape('''SELECT COUNT(*) FROM sysprocesses p
JOIN sysdatabases d
ON d.dbid = p.dbid
WHERE p.sid > 50 AND d.name = %s;''',
options.database))
else:
curs.execute("SELECT COUNT(*) FROM sysprocesses WHERE spid > 50;")
nbusers = curs.fetchone()[0]
if options.database:
curs.execute("USE %s;"%options.database)
stamp2 = datetime.utcnow()
conn.close()
except pymssql.Error, errstr:
print "CRITICAL: %s" % str(errstr).splitlines()[-1]
sys.exit(2)
except _mssql.error, errstr:
print "CRITICAL: %s" % str(errstr).splitlines()[-1]
sys.exit(2)
#except:
# print "UNKNOWN: plugin error"
# sys.exit(3)
dstamp = stamp2 - stamp1
ms = dstamp.seconds * 1000.0 + dstamp.microseconds / 1000.0
print "OK: %d users, response time %0.03f ms|users=%d time=%0.03fms" % (nbusers, ms, nbusers, ms)
sys.exit(0)
|