Got this working on 3.8.2. I have it using the hook of "admin_index_main3". I also made slight change to the code to only allow Super Administrators to be able to view/kill processes due to the possible problems an unknowing user could cause. Here's my code:
PHP Code:
if (in_array($vbulletin->userinfo['userid'], preg_split('#\s*,\s*#s', $vbulletin->config['SpecialUsers']['superadministrators'], -1, PREG_SPLIT_NO_EMPTY)) )
{
/* Server Load */
if ($_REQUEST["kill_process"] && is_numeric($_REQUEST["kill_process"])) {
$process_id = $_REQUEST["kill_process"];
if ($_POST["no"]) {
} elseif ($_POST["yes"]) {
exec("kill -9 ".$process_id."");
print_table_start();
print_table_header('<a name="killprocess"></a>TOP - Server Load - Kill Process '.$process_id.'',1);
print_description_row('Process killed!',false,1);
print_table_footer(2, '', '', false);
} else {
exec('ls -la /proc/'.$process_id.'/', $procdata, $error );
$proctxt = '';
foreach ($procdata as $procline) {
$proctxt .= trim($procline)."\n";
}
print_table_start();
print_table_header('<a name="killprocess"></a>TOP - Server Load - Kill Process '.$process_id.'',1);
print_description_row('<form method="post" action="index.php?do=home&kill_process='.$process_id.'#killprocess">
Are you sure you want to kill this process?
<div style="padding:10px;"><textarea style="width:550px;height:200px;">'.$proctxt.'</textarea></div><input type="submit" name="yes" value="Yes"> <input type="submit" name="no" value="No">
</form>',false,1);
print_table_footer(2, '', '', false);
}
}
print_table_start();
print_table_header('TOP - Server Load',12);
exec('top n 1 b i', $top, $error );
$is_toptable = false;
foreach ($top as $topline) {
$topline = trim($topline);
if (!$topline) { continue 1; }
if (!$is_toptable && !preg_match('|^PID|Ui',$topline)) {
if (preg_match('|^top - (.*)$|Ui',$topline,$out)) {
print_description_row('<b>TOP:</b> '.$out[1],false,12);
} else {
if (preg_match('|^([^:]+): (.*)$|Ui',$topline,$out)) {
print_description_row('<b>'.$out[1].':</b> '.$out[2],false,12);
} else {
print_description_row($topline,false,12);
}
}
} else {
$topvals = preg_split('|[ ]+|s',$topline);
if (!$is_toptable) {
foreach ($topvals as $key => $value) {
$topvals[$key] = '<b>'.$value.'</b>';
}
} else {
$topvals[0] .= ' <a href="index.php?do=home&kill_process='.$topvals[0].'#killprocess" style="color:red;">X</a>';
}
print_cells_row(array(
$topvals[0],
$topvals[1],
$topvals[2],
$topvals[3],
$topvals[4],
$topvals[5],
$topvals[6],
$topvals[7],
$topvals[8],
$topvals[9],
$topvals[10],
$topvals[11]
), 0, 0, -5, 'top', 1, 1);
$is_toptable = true;
}
}
print_table_footer(2, '', '', false);
}
Thanks! *Installed*