aboutsummaryrefslogtreecommitdiffstats
path: root/config/dspam/www/dspam-admin-graph.php
diff options
context:
space:
mode:
Diffstat (limited to 'config/dspam/www/dspam-admin-graph.php')
-rw-r--r--config/dspam/www/dspam-admin-graph.php201
1 files changed, 201 insertions, 0 deletions
diff --git a/config/dspam/www/dspam-admin-graph.php b/config/dspam/www/dspam-admin-graph.php
new file mode 100644
index 00000000..508824e2
--- /dev/null
+++ b/config/dspam/www/dspam-admin-graph.php
@@ -0,0 +1,201 @@
+<?php
+/* $Id$ */
+/*
+ dspam-admin-graph.php
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+*/
+
+/* required because of system_groupmanager.php */
+$pgtitle = array(gettext("Services"),
+ gettext("DSPAM"),
+ gettext("System Status"),
+ gettext("Graph"));
+
+require_once 'Image/Graph.php';
+require_once 'Image/Canvas.php';
+require("guiconfig.inc");
+include("/usr/local/pkg/dspam.inc");
+
+if (! $_GET ||
+ strlen($_SERVER['QUERY_STRING']) == 0 ||
+ ! isDSPAMAdmin($HTTP_SERVER_VARS['AUTH_USER'])) {
+ return;
+}
+
+$FORM =& ReadParse($_SERVER['QUERY_STRING']);
+
+list($spam, $nonspam, $sm, $fp, $inoc, $wh, $period) = split('_', $FORM['data']);
+$spam = split(',', $spam);
+$nonspam = split(',', $nonspam);
+$sm = split(',', $sm);
+$fp = split(',', $fp);
+$inoc = split(',', $inoc);
+$wh = split(',', $wh);
+$period = split(',', $period);
+
+// create a PNG canvas and enable antialiasing (canvas implementation)
+$Canvas =& Image_Canvas::factory('png', array('width' => 725,
+ 'height' => 450,
+ 'antialias' => 'native'));
+
+// create the graph
+$Graph =& Image_Graph::factory('graph', $Canvas);
+// add a TrueType font
+$Font =& $Graph->addNew('font', 'Verdana');
+// set the font size to 8 pixels
+$Font->setSize(8);
+
+$Graph->setFont($Font);
+
+// setup the plotarea, legend and their layout
+$Graph->add(
+ Image_Graph::vertical(
+ Image_Graph::factory('title', array('', 12)),
+ Image_Graph::horizontal(
+ $Plotarea = Image_Graph::factory('plotarea'),
+ $Legend = Image_Graph::factory('legend'),
+ 80
+ ),
+ 0
+ )
+);
+
+// add grids
+$Grid =& $Plotarea->addNew('line_grid', IMAGE_GRAPH_AXIS_Y);
+$Grid->setLineColor('silver');
+
+// link the legend with the plotares
+$Legend->setPlotarea($Plotarea);
+
+// create the two datasets
+$i = 0;
+$spamds =& Image_Graph::factory('dataset');
+foreach($spam as $el){
+ $spamds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$hamds =& Image_Graph::factory('dataset');
+foreach($nonspam as $el){
+ $hamds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$smds =& Image_Graph::factory('dataset');
+foreach($sm as $el){
+ $smds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$fpds =& Image_Graph::factory('dataset');
+foreach($fp as $el){
+ $fpds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$inocds =& Image_Graph::factory('dataset');
+foreach($inoc as $el){
+ $inocds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+$i = 0;
+$whds =& Image_Graph::factory('dataset');
+foreach($wh as $el){
+ $whds->addPoint(strval($period[$i]), intval($el));
+ $i++;
+}
+
+// set the name/title of each dataset
+$spamds->setName('SPAM');
+$hamds->setName('Nonspam');
+$smds->setName('Spam Misses');
+$fpds->setName('False Positives');
+$inocds->setName('Inoculations');
+$whds->setName('Auto-Whitelisted');
+
+// put each dataset in a singel ds array
+$Datasets = array($inocds, $whds, $spamds, $hamds, $smds, $fpds);
+
+// create the plot as line chart using the dataset
+$Plot =& $Plotarea->addNew('Image_Graph_Plot_Bar', array($Datasets,'stacked'));
+
+// set a fill color
+$FillArray =& Image_Graph::factory('Image_Graph_Fill_Array');
+$FillArray->addColor('#000000');
+$FillArray->addColor('#BF00BF');
+$FillArray->addColor('#BF0000');
+$FillArray->addColor('#00BF00');
+$FillArray->addColor('#BFBF00');
+$FillArray->addColor('#FF7F00');
+
+// set a standard fill style
+$Plot->setFillStyle($FillArray);
+
+/* set axis labels */
+$XAxis =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_X);
+$XAxis->setTitle("{$FORM['x_label']}", array('size' => 8, 'angle' => 0));
+$XAxis->setFontAngle(60);
+$XAxis->setLabelOptions(array('offset' => intval($FORM['offset']),
+ 'showtext' => true,
+ 'position' => 'outside'), 1);
+
+
+$YAxis =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_Y);
+$YAxis->setTitle('Number of Messages', array('size' => 8, 'angle' => 90));
+
+// create a Y data value marker
+$Marker =& $Plot->addNew('Image_Graph_Marker_Value', IMAGE_GRAPH_VALUE_Y);
+$Marker->setFontSize(6);
+
+// and use the marker on the 1st plot
+$Plot->setMarker($Marker);
+$Plot->setDataSelector(Image_Graph::factory('Image_Graph_DataSelector_NoZeros'));
+
+// output the Graph
+$Graph->done();
+
+function &ReadParse($URI = "") {
+ if ($URI == "") {
+ return NULL;
+ }
+
+ $pairs = preg_split('/&/', $URI);
+ $FORM = array();
+
+ foreach($pairs as $pair){
+ list($name, $value) = preg_split('/\=/', $pair);
+ $pattern = '/%([a-fA-F0-9][a-fA-F0-9])/';
+
+ $name = preg_replace('/\+/', ' ', $name);
+ $name = preg_replace_callback(
+ $pattern,
+ create_function(
+ '$matches',
+ 'return pack("C", hexdec($matches[1]));'
+ ),
+ $name
+ );
+
+ $value = preg_replace('/\+/', ' ', $value);
+ $value = preg_replace_callback(
+ $pattern,
+ create_function(
+ '$matches',
+ 'return pack("C", hexdec($matches[1]));'
+ ),
+ $value
+ );
+
+ $FORM[$name] = $value;
+ } // end foreach
+
+ return $FORM;
+}
+?>