smeserver-unjunkmgr/root/usr/local/unjunkmgr/index.php

444 lines
16 KiB
PHP

<?php
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
// These are called from the HTML further down due to the way Jpgraph renders
// Check for a type. This is not called on the first run through
$parm1 = $_GET['type'];
// For tests
// printf("TYPE=%s - %s\n",$type,$parm1);
// So we only run these if we are called with a type. Which is what happens in the html further down.
if ($parm1 == 'spamhour') {
read_and_print_spam_log('/usr/local/unjunkmgr/spamfilterstats.spam.hour', 'last hour', 'graph');
} elseif ($parm1 == 'spamday') {
read_and_print_spam_log('/usr/local/unjunkmgr/spamfilterstats.spam.day', 'last 24 hours', 'graph');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Corporate Virus and Spam Statistics</title>
<meta http-equiv="Refresh" content="300">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="Mon, 19 Aug 2002 07:47:20 GMT">
<link rel="stylesheet" type="text/css" href="unjunkmgr.css">
</head>
<body>
<center>
<table border="3" width="940">
<tr>
<td align="center">
<h1>Corporate Spam and Virus Statistics</h1><br>
</td>
</tr>
<tr>
<td>
<table border="0" width="920" align="center">
<tr>
<!-- Top row 24 hours Spam & Virus stats -->
<td width="25%" align="center">
<h2 style="word-spacing: 0; margin-top: 0; margin-bottom: 0" align="center">Hourly Spam Statistics over last 24 hours</h2>
<h2 style="word-spacing: 0; margin-top: 0; margin-bottom: 0"><a href="spam.html"><img border="1" src="spam-day.png" width="450" height="121"></a></h2>
</td>
<td width="25%" align="center">
<h2 style="word-spacing: 0; margin-top: 0; margin-bottom: 0" align="center">Hourly Virus Statistics over last 24 hours</h2>
<h2 style="word-spacing: 0; margin-top: 0; margin-bottom: 0"><a href="virus.html"><img border="1" src="virus-day.png" width="450" height="121"></a></h2>
</td>
</tr>
<tr><td colspan="2">&nbsp;</td></tr>
<tr>
<!-- Second row last hour/24 hours Spam Pie charts-->
<!-- this is where we call the script again to draw the Pie Charts-->
<td align="center"><img src="index.php?type=spamhour"></td>
<td align="center"><img src="index.php?type=spamday"></td>
</tr>
<tr><td colspan=2>&nbsp;</td></tr>
<!-- This does the Virus stats charts -->
<tr>
<td align="center">
<?php
read_and_print_virus_log('/usr/local/unjunkmgr/spamfilterstats.virus.hour', 'hour', 'table'); ?>
</td>
<td align="center">
<?php
read_and_print_virus_log('/usr/local/unjunkmgr/spamfilterstats.virus.day', '24 hours', 'table'); ?>
</td>
</tr>
<tr><td colspan=2>&nbsp;</td></tr>
<!-- This does the Spam pie charts -->
<tr>
<td align="center">
<?php //read_and_print_spam_log('/usr/local/unjunkmgr/spamfilterstats.spam.hour', 'hour', 'table');
?>
</td>
<td align="center">
<?php //read_and_print_virus_log('/usr/local/unjunkmgr/spamfilterstats.spam.day', '24 hours', 'table');
?>
</td>
</tr>
<tr><td colspan=2>&nbsp;</td></tr>
</table>
</td>
</tr>
</table>
</center>
</body>
</html>
<?php
function read_and_print_virus_log($log_filename, $text, $style)
{
if (!file_exists($log_filename) || !is_readable($log_filename) || !$fd = fopen($log_filename, "r")) {
print ('<td width="10%" align="left"><H3 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2" colspan=2>');
print ('Statistics database not found');
print ('</td>');
return;
}
//print ('get data virus_log');
flock($fd, 1); // get a shared lock
$linecount = 0;
while (!feof($fd)) {
$line = fgets($fd);
if ($line) {
// printf("line = %s\n",$line);
// $keys = split ("\|", $line) ;
$keys = preg_split("/\|/", $line);
$list = array();
foreach ($keys as $item) {
// $key = split ("\=", $item);
$key = preg_split("/\=/", $item);
// printf("key = %s\n",$key);
if ($key[0] == 'SCANNED') {
$scanned = $key[1];
}
if ($key[0] == 'BAD') {
$bad = $key[1];
}
if ($key[0] == 'NAME') {
$name = $key[1];
} elseif ($key[0] == 'COUNT') {
$count = $key[1];
$list['count'] = $count;
} elseif ($key[0] == 'LATEST') {
$latest = $key[1];
$list['latest'] = $latest;
}
}
if ($name) {
$list = array(
'name' => $name,
'count' => $count,
'latest' => $latest
);
$print_list[$linecount++] = $list;
}
}
}
flock($fd, 3); // release the lock
fclose($fd);
// Now print out results if they exist
if (isset($print_list)) {
$sorted_list = msort($print_list, "count", false);
}
// print_r($sorted_list);
print ('<table border="2" align="center"width="98%">');
// This will always be table - used to have 'oldstyle'
if ($style == 'table') {
print ('<tr><td width="100%" align="center" valign="top" colspan=2 bgcolor=#888888>');
print ('<H2 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
printf("Virus Threats last %s ", $text);
print ('</td>');
print ('<tr><td width="70%" align="left" valign="top"><H3 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
printf("Emails Scanned for Virus");
print ('</td>');
print ('<td align="right"><H3 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
printf("%s", number_format($scanned, 0, 0, '.'));
print ('</td>');
print ('</tr>');
print ('<tr><td width="50%" align="left"><H3 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
printf("Infected with Virus");
print ('</td>');
print ('<td align="right"><H3 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
if ($scanned > 0) printf("%s (%.2f %%)", number_format($bad, 0, 2, '.') , number_format(($bad / $scanned) * 100, 2, '.', ''));
print ('</td>');
print ('</tr>');
}
if (isset($sorted_list)) {
// This will print emails if there are any
if ($linecount > 0) {
$linecount = 0;
print ('<tr><H3><td width="100%" align="left" valign="top" colspan=2 bgcolor=#888888>');
print ('<H4 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
// Always table ??
if ($style == 'table') {
print ('Top Blocked Virus Threats');
} else {
printf("Top Spammed Emails last %s", $text);
}
print ('</td>');
print ('</tr>');
print ('<tr><td width="70%" align="left" bgcolor=#BBBBBB><H5 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
// Always table ??
if ($style == 'table') {
print ('Name');
} else {
print ('Email address');
}
print ('</td>');
print ('<td align="right" bgcolor=#BBBBBB><H5 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
print ('Count');
print ('</td>');
print ('</tr>');
foreach ($sorted_list as $item) {
print ('<tr><td width="70%" align="left"><H5 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2">');
printf("%s", $item['name']);
print ('</td>');
print ('<td align="right"><H5 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2">');
printf("%s", $item['count']);
print ('</td>');
print ('</tr>');
$linecount++;
// Only show top 10...
if ($linecount >= 10) {
break;
}
}
}
} // End isset
print ('</table>');
return;
}
function read_and_print_spam_log($log_filename, $text, $style)
{
if (!file_exists($log_filename) || !is_readable($log_filename) || !$fd = fopen($log_filename, "r")) {
print ('<td width="10%" align="left"><H3 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2" colspan=2>');
print ('Statistics database not found');
print ('</td>');
return;
}
//print ('get data spam_log');
flock($fd, 1); // get a shared lock
$linecount = 0;
while (!feof($fd)) {
$line = fgets($fd);
if ($line) {
// printf("line = %s\n",$line);
// $keys = split ("\|", $line) ;
$keys = preg_split("/\|/", $line);
$list = array();
foreach ($keys as $item) {
// $key = split ("\=", $item);
$key = preg_split("/\=/", $item);
// printf("key = %s\n",$key);
if ($key[0] == 'SCANNED') {
$scanned = $key[1];
}
if ($key[0] == 'REJECT') {
$reject = $key[1];
}
if ($key[0] == 'TAGGED') {
$tagged = $key[1];
}
}
}
}
flock($fd, 3); // release the lock
fclose($fd);
//if ($style == 'oldstyle') {
// print('<table border="2" align="center" width="98%">');
//
// print('<tr><td width="70%" align="left"><H3 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2">');
// printf("Scanned for Spam");
// print('</td>');
// print('<td align="right"><H3 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2">');
// printf("%s",number_format($scanned,0,0,'.'));
// print('</td>');
// print('</tr>');
//
// print('<tr><td width="70%" align="left" valign="top"><H3 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
// printf("Good");
// print('</td>');
// print('<td align="right"><H3 style="word-spacing: 0; margin-top: 0; margin-bottom: 2; margin-left: 2">');
// $good_emails = $scanned-($reject+$tagged);
// printf("%s (%.2d %%)",number_format($good_emails,0,0,'.'),($good_emails/$scanned)*100);
// print('</td>');
// print('</tr>');
//
//
// print('<tr><td width="50%" align="left"><H3 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2">');
// printf("Rejected as Spam");
// print('<td align="right"><H3 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2">');
// printf("%s (%.2d %%)",number_format($reject,0,0,'.'),($reject/$scanned)*100);
// print('</td>');
// print('</tr>');
//
// print('<tr><td width="50%" align="left"><H3 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2">');
// printf("Accepted but Tagged as Spam");
// print('<td align="right"><H3 style="word-spacing: 0; margin-top: 2; margin-bottom: 2; margin-left: 2">');
// printf("%s (%.2d %%)",number_format($tagged,0,0,'.'),($tagged/$scanned)*100);
// print('</td>');
// print('</tr>');
// print('<br>');
// print('</table>');
//
//} else {
$good_emails = $scanned - ($reject + $tagged);
// what if no emails went through??
if ($scanned == 0) {
include "jpgraph/jpgraph_canvas.php";
include "jpgraph/jpgraph_canvtools.php";
$g = new CanvasGraph(450, 260, 'auto');
$scale = new CanvasScale($g);
$scale->Set(0, 27, 0, 53);
$g->SetMargin(1, 2, 1, 2);
$g->SetColor('white');
$g->SetMarginColor("black");
$g->InitFrame();
$t = new CanvasRectangleText();
$t->SetFillColor('');
$t->SetFontColor('black');
$t->SetColor('');
$t->SetShadow('');
$t->SetFont(FF_ARIAL, FS_BOLD, 14);
$t->Set('No emails scanned for spam last hour', 8, 1, 8);
$t->Stroke($g->img, $scale);
$g->Stroke();
return;
}
// Some data
$data = array(
$good_emails,
$tagged,
$reject
);
// A new pie graph
$graph = new PieGraph(450, 260, 'auto');
// Setup title
$graph->title->Set("Spam Statistics " . $text);
$graph->title->SetFont(FF_ARIAL, FS_BOLD, 14);
$graph->title->SetMargin(3); // Add a little bit more margin from the top
$graph->footer->center->Set("Generated " . date('l jS \of F Y h:i:s A'));
// Create the pie plot
$p1 = new PiePlotC($data);
// $p1->value->SetColor("navy");
$p1->SetCenter(0.35, 0.50);
$p1->SetLegends(array(
"Good (" . number_format($good_emails, 0, 0, '.') . ")",
"Tagged (" . number_format($tagged, 0, 0, '.') . ")",
"Rejected (" . number_format($reject, 0, 0, '.') . ")",
));
$graph->legend->Pos(0.10, 0.30);
$graph->legend->SetLayout(LEGEND_VERT);
$p1->SetSliceColors(array(
"green",
"orange",
"red"
));
// Create the extra text box to show scanned emails number
// $txt = new Text();
// $txt->Set("Total scanned " . number_format($scanned,0,0,'.'));
// $txt->ParagraphAlign('right');
// $txt->Show();
// $txt->SetFont(FF_VERDANA,FS_NORMAL,8);
// $txt->Pos(0.82,0.5,'center','bottom');
// $txt->SetBox('gray9','black','gray9',0,2);
// $txt->SetShadow();
// $graph->AddText($txt);
// $p1->Explode(array(0,15,15,25,15));
// Set size of pie
$p1->SetSize(0.32);
// Label font and color setup
$p1->value->SetFont(FF_VERDANA, FS_BOLD, 10);
$p1->value->SetColor('black');
// Setup the title on the center circle
$p1->midtitle->Set("Total of\n" . number_format($scanned, 0, 0, '.') . "\nscanned");
$p1->midtitle->SetFont(FF_VERDANA, FS_NORMAL, 10);
// Set color for mid circle
$p1->SetMidColor('yellow');
// Use percentage values in the legends values (This is also the default)
$p1->SetLabelType(PIE_VALUE_PER);
// $p1->SetLabelPos(0.8);
// Add plot to pie graph
$graph->Add($p1);
// .. and send the image on it's merry way to the browser
$graph->Stroke();
//}
return;
}
function msort($array, $id = "id", $sort_ascending = true)
{
$temp_array = array();
while (count($array) > 0) {
$lowest_id = 0;
$index = 0;
foreach ($array as $item) {
if (isset($item[$id])) {
if ($array[$lowest_id][$id]) {
if ($item[$id] < $array[$lowest_id][$id]) {
$lowest_id = $index;
}
}
}
$index++;
}
$temp_array[] = $array[$lowest_id];
$array = array_merge(array_slice($array, 0, $lowest_id) , array_slice($array, $lowest_id + 1));
}
if ($sort_ascending) {
return $temp_array;
} else {
return array_reverse($temp_array);
}
}
?>