PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` #!/usr/local/bin/perl use Proc::Daemon; # Settings, subs and shit sub get_settings { $proc_raw_log = '/tmp/mysqladmin_processlist_brand.raw'; $proc_log = '/tmp/mysqladmin_processlist_brand.pure'; $limit = '10'; $cmd = `mysqladmin processlist`; chomp($cmd); if ( -e $proc_raw_log or -e $proc_log) { system("rm -rf $proc_raw_log"); system ("rm -rf $proc_log"); } } # Generate raw log sub generate_log { open RAWLOG, ">", "$proc_raw_log"; print RAWLOG "$cmd"; close RAWLOG; } # Purify log sub purify_log { open RAWLOG, "<", "$proc_raw_log"; while() { $rawline = $_; chomp($rawline); if ($rawline =~ m/^\+/g or $rawline =~ m/^\S+\s+Id/g or $rawline =~ /root/ or $rawline !~ /localhost/ or $rawline !~ /Sleep/) { next; } else { open LOG, ">>", "$proc_log"; print LOG "$rawline \n"; } } close RAWLOG; close LOG; } sub analyze_log { open LOG, "<", "$proc_log"; while(){ my $line = $_; chomp($line); @list = split('\|', $line); my $sql_id = $list[1]; my $sql_user = $list[2]; my $sql_host = $list[3]; my $sql_db = $list[4]; my $sql_state = $list[5]; my $sql_time = $list[6]; chomp($sql_id,$sql_user,$sql_host,$sql_db,$sql_state,$sql_time); if ( $sql_time >= $limit ) { system("mysqladmin kill $sql_id"); } else { print "User $sql_user with query ID $sql_id is asking $sql_db in state $sql_state for $sql_time seconds now\n"; } } close LOG; } sub cycle_through { get_settings; generate_log; purify_log; analyze_log; } $0="sqlstallwatch"; Proc::Daemon::Init; while(1){ sleep(10); cycle_through; }