]> andersk Git - sql-web.git/blob - cron/checkProcesses.php
more old code
[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.037535 seconds and 5 git commands to generate.