30.3. Step 2: Creating the graph

We will use a basic accumulated bar graphs with a text scale and integer y-scale. The remainder of the script should be fairly self explanatory since this is a straightforward graph with no "tricks".

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
/**
* Class SpamGraph
*/
class SpamGraph {
    private $iWidth, $iHeight;
    /**
    * Constructor
    * 
    * @param $aWidth Width of generated graph
    * @param $aHeight Height of generated graph
    * @return SpamGraph 
    */
    public function __construct($aWidth,$aHeight) {
        $this->iWidth = $aWidth;
        $this->iHeight = $aHeight;
    } 
    /**
    * Create an accumulated bar graph
    * 
    * @param string $aFile File to write graph to
    * @param array $aXData Date x-labels
    * @param array $aYData Spam data 1 (/dev/null)
    * @param array $aY2Data Spam data 2 (Spam folder)
    */
    public function Create($aFile,$aXData,$aYData,$aY2Data) {
 
        $graph = new Graph($this->iWidth,$this->iHeight);    
        $graph->SetMargin(40,20,50,110); 
        $graph->SetScale('textint');
        $graph->SetMarginColor('khaki2@0.6');
 
        $graph->legend->SetPos(0.5,0.97,'center','bottom');
        $graph->legend->SetLayout(10);
        $graph->legend->SetFillColor('white');
        $graph->legend->SetFont(FF_ARIAL,FS_NORMAL,10);
 
        $graph->title->Set('Identified spams');
        $graph->title->SetMargin(10);
        $graph->title->SetFont(FF_ARIAL,FS_NORMAL,14);
 
        $graph->subtitle->Set('(Updated: '.date('j M Y, H:i'.' T)'));
        $graph->subtitle->SetMargin(5);
        $graph->subtitle->SetFont(FF_ARIAL,FS_ITALIC,11);
 
        $graph->xaxis->SetTickLabels($aXData);
        $graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
        $graph->xaxis->SetLabelAngle(45);
 
        $graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,10);
        $graph->yscale->SetGrace(10);
 
        $bar1 = new BarPlot($aYData);
        $bar1->SetFillGradient('darkred:1.2','darkred:0.7',GRAD_VER);
        $bar1->SetLegend('To "/dev/null"');
 
        $bar2 = new BarPlot($aY2Data);
        $bar2->SetFillGradient('orange','orange:0.7',GRAD_VER);
        $bar2->SetLegend('To Spam folder');
 
        $abar = new AccBarPlot(array($bar1,$bar2));
        $abar->value->Show();
        $abar->value->SetFormat('%d');
        $graph->Add($abar);
        $graph->Stroke($aFile);
        
        syslog(LOG_INFO,"Created spam image in $aFile."); 
    }
}
  
?>