]> andersk Git - sql-web.git/blob - cron/checkProcesses.php
c88131f5f51fdb7af8db9dc94da18382f2e3b375
[sql-web.git] / cron / checkProcesses.php
1 <?php
2
3 @chdir(dirname(__FILE__).'/../');
4 require_once('mitsql.cfg.php');
5 require_once('mitsql.lib.php');
6 isOffline() && exit;
7
8 define('MAX_PROC_TIME', 20);
9
10 $baddbs = $badusers = $bad = array();
11 $result = mysql_query('SHOW FULL PROCESSLIST');
12 while ($row = mysql_fetch_assoc($result)){
13         if ($row['Time']>MAX_PROC_TIME && $row['Command']!='Sleep') {
14                 $bad[] = $row;
15                 $baddbs[] = $row['db'];
16                 $badusers[] = $row['User'];
17         }
18 }
19 mysql_free_result($result);
20
21 foreach($bad as $badproc) {
22         $mailtos = $mailnames = array();
23         $baddb = mysql_escape_string($badproc['db']);
24         $badtime = $badproc['Time'];
25         $badquery = $badproc['Info'];
26         if (empty($baddb)) continue;
27         $sql = "SELECT User.UserId,User.Name,User.Email
28                         FROM `User`
29                         NATURAL JOIN DBOwner
30                         NATURAL JOIN DB
31                         WHERE DB.Name = '$baddb'";
32         $r = fetchRows(DBSelect($sql),'UserId');
33         foreach($r as $addy) {
34                 $mailtos[] = $addy['Email'];
35                 $mailnames[] = $addy['Name'];
36         }
37         if (empty($mailtos)) continue;
38         $mailto = implode(', ',$mailtos);
39         $mailname = implode(', ',$mailnames);
40         $mailsubj = "[sql] Slow Query on $baddb";
41         $mailbody = "Dear $mailname:
42
43 A slow query was found on your database: $baddb
44 It took $badtime seconds and has been aborted.
45
46 We do not allow inefficient SQL queries to run this long. Your query has
47 been appended to this message for your records. Please optimize your
48 queries to avoid having your queries killed in the future. If you have any
49 questions, please contact sql@mit.edu.
50
51 This SQL Service is available at sql.mit.edu.
52
53 ---------------------------------------------------------------------------
54
55 $badquery";
56
57         mysql_query('KILL '.$badproc['Id']);
58         mail($mailto,$mailsubj,$mailbody,"From: SQL Service <sql@mit.edu>\r\nBcc: sql@mit.edu\r\n");
59 }
60
61 ?>
This page took 0.094865 seconds and 3 git commands to generate.