]> andersk Git - sql-web.git/blob - cron/checkProcesses.php
5d1e5257d0d500858722e84b87988d73633c0f24
[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', 100);
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         mysql_query('KILL '.$badproc['Id']);
23     continue;
24         $mailtos = $mailnames = array();
25         $baddb = mysql_escape_string($badproc['db']);
26         if (empty($baddb)) continue;
27         $badtime = $badproc['Time'];
28         $badquery = $badproc['Info'];
29         $sql = "SELECT User.UserId,User.Name,User.Email
30                         FROM `User`
31                         NATURAL JOIN DBOwner
32                         NATURAL JOIN DB
33                         WHERE DB.Name = '$baddb'
34                           AND User.UL < 10";
35         $r = fetchRows(DBSelect($sql),'UserId');
36         foreach($r as $addy) {
37                 $mailtos[] = $addy['Email'];
38                 $mailnames[] = $addy['Name'];
39         }
40         if (empty($mailtos)) {
41                 echo "No email found for $baddb\n";
42                 continue;
43         }
44         $mailto = implode(', ',$mailtos);
45         $mailname = implode(', ',$mailnames);
46         $mailsubj = "[sql.mit.edu] Slow Query on $baddb";
47         $mailbody = "Dear $mailname:
48
49 A slow query was found on your database: $baddb
50 It took $badtime seconds and has been aborted.
51
52 We do not allow inefficient SQL queries to run this long. Your query has
53 been appended to this message for your records. Please optimize your
54 queries to avoid having your queries killed in the future. If you have any
55 questions, please contact sql@mit.edu.
56
57 The SQL Service
58 Email: <sql@mit.edu>
59 Web: http://sql.mit.edu/
60
61 ---------------------------------------------------------------------------
62
63 $badquery";
64
65         mysql_query('KILL '.$badproc['Id']);
66         #mail($mailto,$mailsubj,$mailbody,"From: SQL Service <sql@mit.edu>\r\nBcc: sql@mit.edu\r\n");
67     echo $mailbody;
68 }
69
70 ?>
This page took 0.040586 seconds and 5 git commands to generate.