271 lines
10 KiB
PHP
271 lines
10 KiB
PHP
<?php
|
|
include_once ("php/config.php");
|
|
$UTENTE = login();
|
|
//isadmin();
|
|
|
|
include_once "jpgraph/jpgraph.php";
|
|
include_once "jpgraph/jpgraph_line.php";
|
|
include_once "jpgraph/jpgraph_plotline.php";
|
|
include_once "jpgraph/jpgraph_bar.php";
|
|
|
|
if (isset ($_GET['datainizio'])) $datainizio = $_GET['datainizio'];
|
|
if (isset ($_GET['orainizio'])) $orainizio = $_GET['orainizio'];
|
|
if (isset ($_GET['mininizio'])) $mininizio = $_GET['mininizio'];
|
|
if (isset ($_GET['datafine'])) $datafine = $_GET['datafine'];
|
|
if (isset ($_GET['orafine'])) $orafine = $_GET['orafine'];
|
|
if (isset ($_GET['minfine'])) $minfine = $_GET['minfine'];
|
|
if (isset ($_GET['dettaglio'])) $dettaglio = $_GET['dettaglio'];
|
|
if (isset ($_GET['rif'])) $riferimento = $_GET['rif'];
|
|
if (isset ($_GET['device'])) $device = $_GET['device'];
|
|
|
|
if ($dettaglio == 'ora') {
|
|
$mininizio = $minfine = 0;
|
|
}
|
|
|
|
$data_ini = explode ("-", $datainizio);
|
|
$data_fin = explode ("-", $datafine);
|
|
$data_ini_TS = mktime (0, 0, 0, $data_ini[1], $data_ini[2], $data_ini[0] );
|
|
$data_fin_TS = mktime (0, 0, 0, $data_fin[1], $data_fin[2], $data_fin[0] );
|
|
|
|
$data_dif = ceil (($data_fin_TS - $data_ini_TS) / 86400 );
|
|
|
|
list ($annoinizio, $meseinizio, $giornoinizio) = explode ("-",$datainizio);
|
|
list ($annofine, $mesefine, $giornofine) = explode ("-",$datafine);
|
|
|
|
$l = 900;
|
|
$h = 400;
|
|
|
|
$datainizioquery = $inizio = @mktime ($orainizio, $mininizio, 0, $meseinizio, $giornoinizio, $annoinizio);
|
|
$datafinequery = $fine = @mktime ($orafine, $minfine, 0, $mesefine, $giornofine, $annofine);
|
|
$mezzanotte = mktime (0,0,0,$mesefine ,$giornofine, $annofine);
|
|
|
|
if ($riferimento == 0) {
|
|
$query = "SELECT descrizione AS servizio, rate * 1024 AS garantiti, ceil * 1024 AS massimo FROM interfacce WHERE id='$device'";
|
|
} else {
|
|
$query = "SELECT descrizione AS servizio, rate * 1024 AS garantiti, ceil * 1024 AS massimo FROM defrule WHERE id='$riferimento' and idinterfacce='$device'";
|
|
}
|
|
|
|
$res = mysql_query( $query );
|
|
list ($servizio, $garantiti, $limite) = mysql_fetch_array($res);
|
|
|
|
switch ($dettaglio) {
|
|
case "minuto":
|
|
$query = "SELECT idfirewall, dataunix AS time, rate AS picco, rate AS media, diff AS dati FROM dati_traffico WHERE ((iddefrule='$riferimento' and idinterfacce='$device') and (dataunix between '$datainizioquery' and '$datafinequery')) order by dataunix";
|
|
$query_max = "SELECT firewall.nome, MAX(dati_traffico.rate) AS massimo, AVG(dati_traffico.rate) AS media, STDDEV(dati_traffico.rate) AS deviazione, SUM(dati_traffico.diff) AS traffico FROM dati_traffico JOIN firewall ON firewall.id=dati_traffico.idfirewall WHERE iddefrule='$riferimento' AND idinterfacce='$device' AND dataunix BETWEEN '$datainizioquery' AND '$datafinequery' GROUP BY idfirewall";
|
|
$txt_sotto = "Dalle ore ".date ("H:i",$inizio)." del ".date ("d.m.Y",$inizio)." alle ore ".date ("H:i",$fine)." del ".date ("d.m.Y",$fine);
|
|
$querysum = "SELECT UNIX_TIMESTAMP(FROM_UNIXTIME(dataunix,'%Y-%m-%d %H:%i')) AS time, SUM(rate) AS picco, SUM(rate) AS media, SUM(diff) AS dati FROM dati_traffico WHERE ((iddefrule='$riferimento' and idinterfacce='$device') and (dataunix between '$datainizioquery' and '$datafinequery')) GROUP BY FROM_UNIXTIME(dataunix,'%Y-%m-%d %H:%i') ORDER BY dataunix";
|
|
break;
|
|
|
|
case "ora":
|
|
$query = "SELECT idfirewall, dataunix AS time, max AS picco, media, traffico AS dati FROM dati_ora WHERE ((iddefrule='$riferimento' and idinterfacce='$device') and (dataunix between '$datainizioquery' and '$datafinequery')) order by dataunix";
|
|
$query_max = "SELECT firewall.nome, MAX(dati_ora.max) AS massimo, avg(dati_ora.max) AS media, stddev(dati_ora.max) AS deviazione, sum(dati_ora.traffico) AS traffico FROM dati_ora JOIN firewall ON firewall.id=dati_ora.idfirewall WHERE iddefrule='$riferimento' AND idinterfacce='$device' AND dataunix BETWEEN '$datainizioquery' and '$datafinequery' GROUP BY idfirewall";
|
|
$txt_sotto = "Dalle ore ".date ("H",$inizio).":00 del ".date ("d.m.Y",$inizio)." alle ore ".date ("H",$fine).":00 del ".date ("d.m.Y",$fine);
|
|
$barre = array();
|
|
break;
|
|
|
|
case "giorno":
|
|
$query = "SELECT idfirewall, UNIX_TIMESTAMP(data) AS time, max AS picco, media, traffico AS dati FROM dati_giorno WHERE ((iddefrule='$riferimento' and idinterfacce='$device') and (data BETWEEN DATE('$datainizio') and DATE('$datafine'))) order by data";
|
|
$query_max = "SELECT firewall.nome, MAX(dati_giorno.max) AS massimo, AVG(dati_giorno.max) AS media, STDDEV(dati_giorno.max) AS deviazione, SUM(dati_giorno.traffico) AS traffico FROM dati_giorno JOIN firewall ON firewall.id=dati_giorno.idfirewall WHERE iddefrule='$riferimento' AND idinterfacce='$device' AND (data BETWEEN DATE('$datainizio') AND DATE('$datafine')) GROUP BY idfirewall";
|
|
$txt_sotto = "Dal giorno ".date ("d.m.Y",$inizio)." al giorno ".date ("d.m.Y",$fine);
|
|
$barre = array();
|
|
break;
|
|
|
|
case "settimana":
|
|
|
|
break;
|
|
}
|
|
|
|
$testo_leg = "";
|
|
$res_max = mysql_query( $query_max );
|
|
while ($dati_max = mysql_fetch_array($res_max)) {
|
|
if ($dettaglio == "minuto") {
|
|
$testo_leg .= "(".$dati_max['nome'].") Picco: ".fsize ($dati_max['massimo'])."/s Media: ".fsize($dati_max['media'])."/s Traffico Totale: ".fsize($dati_max['traffico']*1024)."\n";
|
|
} else {
|
|
$testo_leg .= "(".$dati_max['nome'].") Picco: ".fsize ($dati_max['massimo'])."/s Traffico Totale: ".fsize($dati_max['traffico']*1024)."\n";
|
|
}
|
|
}
|
|
|
|
$res = mysql_query( $query );
|
|
if ($dettaglio == "minuto") {
|
|
$ressum = mysql_query( $querysum );
|
|
}
|
|
$xdata = array(array());
|
|
$ydata = array(array());
|
|
$tag = array(array());
|
|
$alt = array(array());
|
|
$cambiogiorno = array();
|
|
|
|
while ( list ($fw, $tempo, $picco, $media, $dati) = mysql_fetch_array($res)) {
|
|
switch ($dettaglio) {
|
|
case "minuto":
|
|
inslabel ($tempo, $fw, $data_dif);
|
|
$ydata[$fw][] = $picco / 1024;
|
|
$mediadata[$fw][] = $media / 1024;
|
|
break;
|
|
case "ora":
|
|
inslabel ($tempo, $fw, $data_dif);
|
|
$ydata[$fw][] = $picco / 1024;
|
|
$tag[$fw][] = " ";
|
|
$alt[$fw][] = "Picco: ".fsize($picco)."/s\nMedia: ".fsize($media)."/s\nTraffico: ".fsize($dati*1024);
|
|
$ytraffico[$fw][] = $dati;
|
|
break;
|
|
case "giorno":
|
|
$xdata[$fw][] = date ("d.m.Y",$tempo);
|
|
$ydata[$fw][] = $picco / 1024;
|
|
$tag[$fw][] = " ";
|
|
$alt[$fw][] = "Picco: ".fsize($picco)."/s\nMedia: ".fsize($media)."/s\nTraffico: ".fsize($dati*1024);
|
|
$ytraffico[$fw][] = $dati;
|
|
break;
|
|
}
|
|
};
|
|
|
|
if ($dettaglio == "minuto") {
|
|
while ( list ($tempo, $picco, $media, $dati) = mysql_fetch_array($ressum)) {
|
|
inslabel ($tempo, 0, $data_dif);
|
|
$ydata[0][] = $picco / 1024;
|
|
$ytraffico[0][] = $dati;
|
|
}
|
|
$testo_leg .= "(System) Picco: ".fsize (max($ydata[0]) * 1024)."/s Media: ".fsize(array_sum($ydata[0]) / count ($ydata[0]) * 1024)."/s Traffico Totale: ".fsize(array_sum($ytraffico[0]) * 1024)."\n";
|
|
} else {
|
|
$somma_traffico = 0;
|
|
foreach ($ytraffico as $k=>$subArray) {
|
|
$somma_traffico += array_sum ($subArray);
|
|
}
|
|
$testo_leg .= "(System) Traffico Totale: ".fsize($somma_traffico * 1024)."\n";
|
|
}
|
|
|
|
// Create the graph
|
|
$g = new Graph($l,$h);
|
|
$g->SetMargin(60,20,50,80);
|
|
$g->title->SetFont(FF_VERDANA);
|
|
$g->title->Set("Traffico regola \"$servizio\"");
|
|
$g->subtitle->Set("$testo_leg Banda garantita: ".fsize ($garantiti * 1024)."/s - Banda massima: ".fsize($limite * 1024)."/s\n$txt_sotto");
|
|
$g->SetShadow();
|
|
$g->SetScale('textlin');
|
|
|
|
$g->xaxis->SetLabelAngle(90);
|
|
$g->yaxis->title->SetFont(FF_VERDANA);
|
|
$g->yaxis->SetLabelFormatCallback('udm');
|
|
|
|
if ($dettaglio == "minuto") {
|
|
$query = "SELECT id, nome, colore FROM firewall";
|
|
} else {
|
|
$query = "SELECT id, nome, colore FROM firewall WHERE id > 0";
|
|
|
|
}
|
|
$res = mysql_query( $query );
|
|
while ( list ($fwid, $fwnome, $fwcolore) = mysql_fetch_array($res)) {
|
|
|
|
switch ($dettaglio) {
|
|
case "minuto":
|
|
$$fwnome = new LinePlot($ydata[$fwid]);
|
|
$g->Add($$fwnome);
|
|
$g->xaxis->SetTickLabels($xdata[$fwid]);
|
|
$$fwnome->SetColor($fwcolore);
|
|
$$fwnome->SetLegend ($fwnome);
|
|
break;
|
|
case "ora":
|
|
case "giorno":
|
|
$$fwnome = new BarPlot($ydata[$fwid]);
|
|
$g->xaxis->SetTickLabels($xdata[$fwid]);
|
|
$$fwnome->SetCSIMTargets($tag[$fwid],$alt[$fwid]);
|
|
$barre[] = $$fwnome;
|
|
break;
|
|
|
|
}
|
|
};
|
|
|
|
if ($dettaglio == "ora" || $dettaglio == "giorno") {
|
|
// $gbarre = new GroupBarPlot ($barre);
|
|
$gbarre = new AccBarPlot ($barre);
|
|
$g->Add($gbarre);
|
|
|
|
$res = mysql_query( $query );
|
|
while ( list ($fwid, $fwnome, $fwcolore) = mysql_fetch_array($res)) {
|
|
$color1 = sprintf ("%s1",$fwcolore);
|
|
$color2 = sprintf ("%s4",$fwcolore);
|
|
$$fwnome->SetFillGradient($color1,$color2,GRAD_VERT);
|
|
$$fwnome->SetFillColor($fwcolore);
|
|
$$fwnome->SetColor($fwcolore);
|
|
$$fwnome->SetLegend ($fwnome);
|
|
}
|
|
}
|
|
|
|
if ($limite == $garantiti) {
|
|
$spessore = 2;
|
|
} else {
|
|
$spessore = 1;
|
|
}
|
|
|
|
# Inserisco linea di Massimo
|
|
if (($massimo / 1024 ) > $limite) {
|
|
$llim = new PlotLine (HORIZONTAL,$limite, "red",$spessore);
|
|
$g->Add($llim);
|
|
}
|
|
|
|
# Inserisco linea di Garantito
|
|
if (($massimo / 1024) > $garantiti) {
|
|
$lgar = new PlotLine (HORIZONTAL,$garantiti, "green",1);
|
|
$g->Add($lgar);
|
|
}
|
|
|
|
# Inserisco linea di Media
|
|
$lmedia = new PlotLine (HORIZONTAL,$med/1024, "yellow",1);
|
|
$g->Add($lmedia);
|
|
|
|
# Inserisco cambi di giorno
|
|
for ($i = 0; $i<count($cambiogiorno); $i++) {
|
|
$dayline = new PlotLine(VERTICAL,$cambiogiorno[$i],"black",2);
|
|
$g->AddLine($dayline);
|
|
}
|
|
|
|
$g->legend->Pos( 0.02,0.02,"right" ,"top");
|
|
$g->legend->SetColumns(1);
|
|
$g->legend->SetFrameWeight(2);
|
|
$g->legend->SetShadow();
|
|
|
|
$g->StrokeCSIM('graph.php','giorni');
|
|
|
|
function inslabel ($tempo, $fw, $data_dif) {
|
|
global $xdata, $cambiogiorno;
|
|
|
|
if ($data_dif <= 1) {
|
|
if (date("H:i",$tempo) == "00:00") {
|
|
$xdata[$fw][] = date ("d.m H:i",$tempo);
|
|
if (!array_search(count($xdata[$fw]), $cambiogiorno)) {
|
|
$cambiogiorno[] = count($xdata[$fw]);
|
|
}
|
|
} else if (date("i",$tempo) == "00") {
|
|
$xdata[$fw][] = date ("H:i",$tempo);
|
|
} else {
|
|
$xdata[$fw][] = "";
|
|
}
|
|
} else if ($data_dif <= 12) {
|
|
if (date("H:i",$tempo) == "00:00") {
|
|
$xdata[$fw][] = date ("d.m H:i",$tempo);
|
|
if (!array_search(count($xdata[$fw]), $cambiogiorno)) {
|
|
$cambiogiorno[] = count($xdata[$fw]);
|
|
}
|
|
} else if ((date("i",$tempo) == "00") && ( ( date("H",$tempo)%(floor(24/floor(24/$data_dif))) ) == 0 )) {
|
|
$xdata[$fw][] = date ("H:i",$tempo);
|
|
} else {
|
|
$xdata[$fw][] = "";
|
|
}
|
|
} else {
|
|
if (date("H:i",$tempo) == "00:00") {
|
|
$xdata[$fw][] = date ("d.m H:i",$tempo);
|
|
} else {
|
|
$xdata[$fw][] = "";
|
|
}
|
|
}
|
|
}
|
|
|
|
function udm ($valore) {
|
|
if ($valore)
|
|
return fsize ($valore*1024);
|
|
else
|
|
return "";
|
|
}
|
|
|
|
?>
|