#!/usr/bin/python

# Ce script checke toutes les minutes les requetes MySQL et kille celles qui sont
# en cours depuis plus de 5 minutes (300 secondes).

import os, sys, MySQLdb as mysql, time

def hms(secs):
        s = secs % 60
        secs /= 60
        m = secs % 60
        secs /= 60
        h = secs
        return "%2d:%.2d:%.2d" % (h, m, s)

log = open('/var/log/mysql-kills.log', 'a')

sys.stdout.close()
sys.stderr.close()

sys.stdout = log
sys.stderr = log

logged = None

sql  = mysql.connect(host = 'localhost', user = 'root', passwd = 'xxxxxx')
sqlc = sql.cursor()

sqlc.execute("SHOW PROCESSLIST");

for a in sqlc.fetchall():

        if a[5] == None:
                continue

        try:
                t = int(a[5])
        except TypeError:
                print "--- Unexpected value for a[5] : ", a[5]

        if t >= 300 and a[4] in ('Locked', 'Query', 'Delayed_insert'):

                if not logged:

                        print time.ctime()
                        logged = 1

                print "  kill thread %-8d: base %16s   since %5d secs (%s)" % (int(a[0]), a[3], t, hms(t))

                sqlc.execute("KILL %d" % int(a[0]));



