--- /dev/null
+<?php
+
+chdir('../');
+require_once('mitsql.cfg.php');
+require_once('mitsql.lib.php');
+define('MAX_PROC_TIME', 10);
+
+echo '<pre>';
+
+$baddbs = $badusers = $bad = array();
+$result = mysql_query('SHOW FULL PROCESSLIST');
+while ($row = mysql_fetch_assoc($result)){
+ if ($row['Time']>MAX_PROC_TIME && $row['Command']!='Sleep') {
+ $bad[] = $row;
+ $baddbs[] = $row['db'];
+ $badusers[] = $row['User'];
+ }
+}
+mysql_free_result($result);
+
+foreach($bad as $badproc) {
+ $mailtos = $mailnames = array();
+ $baddb = mysql_escape_string($badproc['db']);
+ $badtime = $badproc['Time'];
+ $badquery = $badproc['Info'];
+ mysql_query('KILL '.$badproc['Id']);
+ if (empty($baddb)) continue;
+ $sql = "SELECT User.UserId,User.Name,User.Email
+ FROM `User`
+ NATURAL JOIN DBOwner
+ NATURAL JOIN DB
+ WHERE DB.Name = '$baddb'";
+ $r = fetchRows(DBSelect($sql),'UserId');
+ foreach($r as $addy) {
+ $mailtos[] = $addy['Email'];
+ $mailnames[] = $addy['Name'];
+ }
+ $mailto = implode(', ',$mailtos);
+ $mailname = implode(', ',$mailnames);
+ $mailsubj = "[sql] Slow Query on $baddb";
+ $mailbody = "Dear $mailname:
+
+A slow query was found on your database: $baddb
+It took $badtime seconds and has been aborted.
+
+We do not allow inefficient SQL queries to run this long to conserve server
+resources. Your query has been appended to this message for your records.
+Please optimize your queries to avoid having your query killed in the
+future. If you have any questions, please contact sql@mit.edu.
+
+The SQL Service is available at http://sql.mit.edu/
+
+---------------------------------------------------------------------------
+
+$badquery";
+
+ $mailto = 'jwp@mit.edu';
+ mail($mailto,$mailsubj,$mailbody,"From: SQL Service <sql@mit.edu>\r\nBcc: sql@mit.edu\r\n");
+}
+
+?>