pandorafms/pandora_console/reporting/fgraph.php

1482 lines
52 KiB
PHP
Raw Blame History

<?php
// Pandora - the Free monitoring system
// ====================================
// Copyright (c) 2004-2006 Sancho Lerena, slerena@gmail.com
// Copyright (c) 2005-2006 Artica Soluciones Tecnologicas, info@artica.es
// Copyright (c) 2004-2006 Raul Mateos Martin, raulofpandora@gmail.com
// Copyright (c) 2006 Jose Navarro <contacto@indiseg.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
// Load global vars
include ("../include/config.php");
include ("../include/functions.php");
include ("../include/functions_db.php");
require ("../include/languages/language_".$language_code.".php");
function dame_fecha($mh){
// Return a MySQL timestamp date, formatted with actual date MINUS X minutes, given as parameter
$m_year = date("Y", time()-$mh*60);
$m_month = date("m", time()-$mh*60);
$m_day = date ("d", time()-$mh*60);
$m_hour = date ("H", time()-$mh*60);
$m_min = date ("i", time()-$mh*60);
$m = $m_year."-".$m_month."-".$m_day." ".$m_hour.":".$m_min.":00";
return $m;
}
function dame_fecha_grafico($mh){ // Devuelve fecha formateada en funcion de un numero de minustos antes de la fecha actual
// Date 24x7x30 hours ago (one month)
$m_year = date("Y", time()-$mh*60);
$m_month = date("m", time()-$mh*60);
$m_day = date ("d", time()-$mh*60);
$m_hour = date ("H", time()-$mh*60);
$m_min = date ("i", time()-$mh*60);
$m = $m_month."/".$m_day." ".$m_hour.":".$m_min;
return $m;
}
function dame_fecha_grafico_timestamp ($timestamp) { return date('d/m H:i', $timestamp); }
function grafico_modulo_sparse($id_agente_modulo, $periodo, $intervalo, $etiqueta, $color, $zoom=1, $draw_events=0){
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_line.php");
include ("jpgraph/jpgraph_scatter.php");
require ("../include/languages/language_".$language_code.".php");
// WHere periodo is lapse of time in minutes that we want to show in a graph, this could be a week, 1 hour, a day, etc
// 30.06.06 dervitx
// $draw_events behaves as a boolean: 1 implies that events for that module in that period of time
// will be represented with a line in the graph
$fechatope = dame_fecha($periodo); // Max old-date limit
$horasint = $periodo / $intervalo; // Each intervalo is $horasint seconds length
$nombre_agente = dame_nombre_agente_agentemodulo($id_agente_modulo);
$id_agente = dame_agente_id($nombre_agente);
$nombre_modulo = dame_nombre_modulo_agentemodulo($id_agente_modulo);
// Para crear las graficas vamos a crear un array de Ax4 elementos, donde
// A es el numero de posiciones diferentes en la grafica (30 para un mes, 7 para una semana, etc)
// y los 4 valores en el ejeY serian los detallados a continuacion:
// Rellenamos la tabla con un solo select, y los calculos se hacen todos sobre memoria
// esto acelera el tiempo de calculo al maximo, aunque complica el algoritmo :-)
// Where
// intervalo - This is the number of "rows" we are divided the time to fill data.
// more interval, more resolution, and slower.
// periodo - Gap of time, in seconds. This is now to (now-periodo) secs
// Init tables
for ($x = 0; $x <= $intervalo; $x++) {
$valores[$x][0] = 0; // [0] Value (counter)
$valores[$x][2] = dame_fecha($horasint * $x); // [2] Rango superior de fecha para ese rango
$valores[$x][3] = dame_fecha($horasint*($x+1)); // [3] Rango inferior de fecha para ese rango
$etiq_base[] = dame_fecha_grafico($horasint * $x);
$valores_min[$x]= 0; $valores_max[$x]=0;
}
// Get the last value, the last known value (more recent)
$sql1 = "SELECT * FROM tagente_datos WHERE id_agente_modulo = ".$id_agente_modulo." ORDER BY timestamp DESC limit 1";
if ($result=mysql_query($sql1)){
$row=mysql_fetch_array($result);
$old_value=$row["datos"];
$old_date = $row["timestamp"];
} else {
$old_value=0;
}
// Get the last known date (most near to now) for lastcontact in this module
$sql1 = "SELECT * FROM tagente_estado WHERE id_agente_modulo = ".$id_agente_modulo;
if ($result=mysql_query($sql1)){
$row=mysql_fetch_array($result);
$old_date = $row["timestamp"];
}
// Get the last first date (most far to now) for lastcontact in this module
// there is no data far away, so value must be 0 before this date
$sql1 = "SELECT * FROM tagente_datos WHERE id_agente_modulo = ".$id_agente_modulo." order by timestamp asc limit 1";
if ($result=mysql_query($sql1)){
$row=mysql_fetch_array($result);
$first_date = $row["timestamp"];
}
// Get the oldest known date just out of lower bound for global interval
$sql1 = "SELECT * FROM tagente_datos WHERE id_agente_modulo = ".$id_agente_modulo." and timestamp < '".$fechatope."' order by timestamp desc limit 1";
if ($result=mysql_query($sql1)){
$row=mysql_fetch_array($result);
$old_date_interval = $row["timestamp"];
$old_data_interval = $row["datos"];
$old_data_used = 0;
}
for ($i = $intervalo; $i >= 0; $i--){
$sql1 = "SELECT AVG(datos),MAX(datos),MIN(datos) FROM tagente_datos WHERE id_agente_modulo = ".$id_agente_modulo." and timestamp >= '".$valores[$i][3]."' and timestamp < '".$valores[$i][2]."'";
$sql2 = "SELECT datos FROM tagente_datos WHERE id_agente_modulo = ".$id_agente_modulo." and timestamp >= '".$valores[$i][3]."' and timestamp < '".$valores[$i][2]."' order by timestamp desc limit 1";
$result2=mysql_query($sql2);
$result=mysql_query($sql1);
$row=mysql_fetch_array($result);
$row2=mysql_fetch_array($result2);
#echo "AVG MAX MIN (old_value) ".$valores[$i][3]."<br>";
#echo $row[0]." ".$row[1]." ".$row[2]." old-".$old_value." ".$old_date;
#echo "<br><br>";
if ($row[0] != ""){
$data_item=$row[0];
$valores_max[$i] = $row[1];
$valores_min[$i] = $row[2];
if ($data_item == ""){
$data_item = $old_value;
$valores_min[$i] = $old_value;
$valores_max[$i] = $old_value;
} else {
$old_value = $row2[0]; // Last data
#$old_date = $valores[$i][3];
}
$old_data_used =1; // Dont use "previous value for this interval" anymore // if a real value its in database.
} else {
// Interval more recent that last module -contact-
if ((strtotime($old_date) < strtotime($valores[$i][2]))){
$data_item = 0;
$valores_min[$i] = 0;
$valores_max[$i] = 0;
// Get data from lower limit of this interval
} elseif ((isset($old_date_interval)) AND (strtotime($old_date_interval) < strtotime($valores[$i][2])) AND ($old_data_used == 0)) {
$data_item = $old_data_interval;
$valores_min[$i] = $data_item;
$valores_max[$i] = $data_item;
} elseif ( strtotime($valores[$i][2]) < strtotime($first_date)){
$data_item = 0;
$valores_min[$i] = 0;
$valores_max[$i] = 0;
} else {
$data_item = $old_value;
$valores_min[$i] = $old_value;
$valores_max[$i] = $old_value;
}
}
$valores[$i][0]=$data_item;
}
$sql1 = "SELECT MAX(datos) FROM tagente_datos WHERE id_agente_modulo = ".$id_agente_modulo." AND timestamp > '".$valores[0][2]."' AND timestamp > '".$valores[$intervalo][3]."'";
if ($result=mysql_query($sql1)){
$row=mysql_fetch_array($result);
$valor_maximo=$row[0];
if ($valor_maximo == ""){
$valor_maximo = 0;
}
} else {
$valor_maximo=0;
}
// Invert data order in graph
if ($config_graph_order == 1){
$valor_maximo=0;$valor_minimo=0;
for ($x = 0; $x <=$intervalo; $x++) {
$grafica[$x]=$valores[$x][0];
if ($valores_max[$x] > $valor_maximo){
$valor_maximo = $valores_max[$x];
}
if ($valores_min[$x] < $valor_minimo){
$valor_minimo = $valores_min[$x];
}
}
} else {
// Invert data
$valor_maximo=0;$valor_minimo=0;
for ($x = $intervalo; $x>=0; $x--) {
$grafica[$x]=$valores[$intervalo-$x][0];
$valores_max2[$x] = $valores_max[$intervalo-$x];
$valores_min2[$x] = $valores_min[$intervalo-$x];
if ($valores_max[$x] > $valor_maximo){
$valor_maximo = $valores_max[$x];
}
if ($valores_min[$x] < $valor_minimo){
$valor_minimo = $valores_min[$x] - 50;
}
$etiq_base2[$intervalo-$x]=$etiq_base[$x];
}
$valores_max = $valores_max2;
$valores_min = $valores_min2;
$etiq_base = $etiq_base2;
}
// 29.06.06 dervitx
// let's see if the module in this agent has some events associated
// if it has, let's fill $datax and $datay to scatter the events
// in the graphic
if ($draw_events) {
$initial_time = strtotime($fechatope);
$graph_duration = $periodo * 60; // in seconds
$final_time = $initial_time + $graph_duration; // now
// careful here! next sql sentence looks for the module by name in the "evento" field
// tevento database table SHOULD have module_id !!
$sql1 = "SELECT * FROM tevento WHERE id_agente = ".$id_agente." and timestamp > '".$fechatope."' and evento like '%" . $nombre_modulo . "%' ";
// we populate two arrays with validated and no validated events of the module:
// $datax[1] and $datax[0], respectively. There are $datay arrays for y values.
if ($result=mysql_query($sql1)){
while ($row=mysql_fetch_array($result)) {
if ($row["estado"]) { $estado=1; } else { $estado=0; }
$datax[$estado][count($datax[$estado])] = strtotime( $row["timestamp"] );
$datay[$estado][count($datay[$estado])] = ceil($valor_maximo / 6) + $valor_maximo;
}
}
}
// end 29.06.06 dervitx
$Graph_param = array (
'title' => " $etiqueta - $nombre_agente / $nombre_modulo",
'size_x' => intval(550 * $zoom) ,
'size_y' => intval(220 * $zoom) ,
'id_agente_modulo' => $id_agente_modulo ,
'valor_maximo' => $valor_maximo ,
'periodo' => $periodo ,
'draw_events' => 1
);
modulo_grafico_draw ( $Graph_param,
$etiq_base,
array('Maximum','Average','Minimum'),
array ( &$valores_max, &$grafica, &$valores_min ),
$datax
); // Replaced pass by reference (slerena, 11 Jul06)
/* PHP Warning: <20>Call-time pass-by-reference has
been deprecated - argument pass
ed by value; <20>If you would like to pass it by reference, modify the
declaration of [runtime function
<EFBFBD> name](). <20>If you would like to enable call-time pass-by-reference,
you can set allow_call_time_pass
_reference to true in your INI file. <20>However, future versions may not
support this any longer. <20>*/
}
function modulo_grafico_draw( $MGD_param, $MGD_labels, $MGD_data_name, $MGD_data, $MGD_event_data ) {
// draws the graph corresponding to the data of a module
// arguments:
// $MGD_param = array (
// 'title' => title ,
// 'size_x' => size of the graphic ,
// 'size_y' => ,
// 'id_agente_modulo' => agent-module id ,
// 'valor_maximo' => maximum value for y axis ,
// 'periodo' => interval ,
// 'draw_events' => draw events if equals to 1
// );
// &$MGD_labels = array ( $etiq_base ) // labels
// $MGD_data_name = array ( name1, name2, ... ) // name of the datasets (for the legend only)
// $MGD_data = array ( &array(data1), &array(data2), ... ); // data to be represented
// $MGD_event_data = array ( (notvalidated) &array(data_x), (validated) => &array(data_x) );
include ("../include/config.php");
require ("../include/languages/language_".$language_code.".php");
include 'Image/Graph.php';
// initializing parameters
if (!isset( $MGD_param['title'] )) { $MGD_param['title'] = '- no title -'; }
if (!isset( $MGD_param['size_x'] )) { $MGD_param['size_x'] = 550; }
if (!isset( $MGD_param['size_y'] )) { $MGD_param['size_y'] = 220; }
$count_datasets = count( $MGD_data_name ); // number of datasets to represent
// creating the graph with PEAR Image_Graph
$Graph =& Image_Graph::factory('graph',
array( $MGD_param['size_x'],
$MGD_param['size_y']
)
);
$Font =& $Graph->addNew('font', $config_fontpath);
$Font->setSize(8);
$Graph->setFont($Font);
$Graph->add(
Image_Graph::vertical(
$Title = Image_Graph::factory('title', array ($MGD_param['title'] , 10)),
Image_Graph::horizontal(
$Plotarea = Image_Graph::factory('plotarea','axis'),
$Legend = Image_Graph::factory('legend'),
80
),
5
)
);
$Title->setAlignment(IMAGE_GRAPH_ALIGN_LEFT);
$Grid =& $Plotarea->addNew('line_grid', false, IMAGE_GRAPH_AXIS_X);
$Grid->setBackgroundColor('silver@0.3');
$Grid->setBorderColor('black');
$Plotarea->addNew('line_grid', false, IMAGE_GRAPH_AXIS_Y);
// the next grid is only necessary for drawing the right black line of the PlotArea
$Grid_sec =& $Plotarea->addNew('line_grid', IMAGE_GRAPH_AXIS_Y_SECONDARY);
$Grid_sec->setBorderColor('black');
// now, datasets are created ...
for ($cc=0; $cc<$count_datasets; $cc++) {
$Datasets[$cc] = Image_Graph::factory('dataset') ;
$Datasets[$cc]->setName( $MGD_data_name[$cc] );
}
$Legend->setPlotarea($Plotarea);
// ... and populated with data ...
// next line suposes that all $MGD_data have the same number of points
for ($cc=0; $cc<count($MGD_data[0]); $cc++) {
$tdate=strtotime( $MGD_labels[$cc] );
for ($dd=0; $dd<$count_datasets; $dd++) {
$Datasets[$dd]->addPoint($tdate, $MGD_data[$dd][$cc]);
}
}
// ... and added to the Graph
$Plot =& $Plotarea->addNew('Image_Graph_Plot_Area', array($Datasets));
// some other properties of the Graph
$FillArray =& Image_Graph::factory('Image_Graph_Fill_Array');
$FillArray->addColor('blue');
$FillArray->addColor('orange');
$FillArray->addColor('yellow');
$Plot->setFillStyle($FillArray);
$AxisX =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_X);
$AxisX->setLabelInterval($MGD_param['periodo']*60/10);
$AxisX->setFontAngle(45);
$AxisX->setDataPreprocessor(Image_Graph::factory('Image_Graph_DataPreprocessor_Function', 'dame_fecha_grafico_timestamp'));
$AxisY =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_Y);
$AxisY->forceMaximum(ceil($MGD_param['valor_maximo'] / 4) + $MGD_param['valor_maximo']);
// let's draw the alerts zones
$sql1 = "SELECT dis_min, dis_max FROM talerta_agente_modulo WHERE id_agente_modulo = ".$MGD_param['id_agente_modulo'];
if ($result=mysql_query($sql1)){
while ($row=mysql_fetch_array($result)) {
$Marker_alertzone =& $Plotarea->addNew('Image_Graph_Axis_Marker_Area', IMAGE_GRAPH_AXIS_Y);
$Marker_alertzone->setFillColor('green@0.2');
$Marker_alertzone->setLowerBound($row["dis_min"]);
$Marker_alertzone->setUpperBound($row["dis_max"]);
}
}
// if there are some events to draw let's scatter them!
if ($MGD_param['draw_events']) {
for ($cc=1; $cc>=0; $cc--) {
if (isset($MGD_event_data[$cc])) {
$Dataset_events =& Image_Graph::factory('dataset');
$Dataset_events->setName($cc?'Validated events':'Not valid. events');
for ($nn=0; $nn<count($MGD_event_data[$cc]); $nn++) {
$Dataset_events->addPoint(
$MGD_event_data[$cc][$nn],
ceil($MGD_param['valor_maximo'] / 7) + $MGD_param['valor_maximo']);
}
$Plot =& $Plotarea->addNew('Plot_Impulse', array(&$Dataset_events));
$Plot->setLineColor($cc?'green@0.5':'red@0.5');
$Marker_event =& Image_Graph::factory('Image_Graph_Marker_Diamond');
$Plot->setMarker($Marker_event);
$Marker_event->setFillColor($cc?'green@0.5':'red@0.5');
$Marker_event->setLineColor('black');
}
}
}
$Graph->done();
// 30.06.06 dervitx end
}
function graphic_agentmodules($id_agent) {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$sql1="SELECT * FROM ttipo_modulo";
$result=mysql_query($sql1);
$ax = 0;
while ($row=mysql_fetch_array($result)){
$data_label[$ax]=$row["nombre"];
$data[$ax]=0;
$data_id[$ax] = $row["id_tipo"];
$ax++;
}
$cx=0;
$sql1="SELECT * FROM tagente_modulo WHERE id_agente = ".$id_agent;
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
$cx++;
for ($bx=0;$bx<=$ax;$bx++){
if (isset($data_id[$bx])){
if ($data_id[$bx] == $row["id_tipo_modulo"]){
$data[$bx]++;
}
}
}
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++)
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
$bx=0;
for ($a=0;$a < sizeof($data_label); $a++)
if ($data[$a] > 0){
$data_label2[$bx] = $data_label[$a];
$data2[$bx] = $data[$a];
$bx++;
}
$graph = new PieGraph(280,120,"auto");
// $graph->SetMarginColor('white@0.2');
$graph->SetMargin(15,4,2,2);
$graph->SetMarginColor('#f5f5f5');
$graph->img->SetCanvasColor('#f5f5f5');
$graph->SetFrame(True,'#f5f5f5',0);
$graph->SetAlphaBlending();
if ($cx > 1){
$p1 = new PiePlot3D($data2);
$p1->SetLegends($data_label2);
} else {
$data_void[]="1";
$legend_void[]="N/A";
$p1 = new PiePlot3D($data_void);
$p1->SetLegends($legend_void);
}
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.5);
$p1->SetCenter(0.3);
$p1->value->SetColor("#f5f5f5"); // Invisible
$graph->legend->SetAbsPos(5,5,'right','top');
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function graphic_agentaccess($id_agent, $periodo){
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_line.php");
require ("../include/languages/language_".$language_code.".php");
$color ="#437722"; // Green pandora 1.1 octopus color
$agent_interval = give_agentinterval($id_agent);
$intervalo = 30 * $config_graph_res; // Desired interval / range between dates
$intervalo_real = (86400 / $agent_interval); // 60x60x24 secs
if ($intervalo_real < $intervalo ) {
$intervalo = $intervalo_real;
}
$fechatope = dame_fecha($periodo);
$horasint = $periodo / $intervalo;
// $intervalo now stores "ideal" interval }
// interval is the number of rows that will store data. more rows, more resolution
// Para crear las graficas vamos a crear un array de Ax4 elementos, donde
// A es el numero de posiciones diferentes en la grafica (30 para un mes, 7 para una semana, etc)
// y los 4 valores en el ejeY serian los detallados a continuacion:
// Rellenamos la tabla con un solo select, y los calculos se hacen todos sobre memoria
// esto acelera el tiempo de calculo al maximo, aunque complica el algoritmo :-)
// Creamos la tabla (array) con los valores para el grafico. Inicializacion
for ($x = 0; $x <$intervalo; $x++) {
$valores[$x][0] = 0; // [0] Valor (contador)
$valores[$x][1] = 0; // [0] Valor (contador)
$valores[$x][2] = dame_fecha($horasint * $x); // [2] Rango superior de fecha para ese rango
$valores[$x][3] = dame_fecha($horasint*($x+1)); // [3] Rango inferior de fecha para ese rango
}
$sql1="SELECT * FROM tagent_access WHERE id_agent = ".$id_agent." and timestamp > '".$fechatope."'";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
for ($i = 0; $i < $intervalo; $i++){
if (($row["timestamp"] < $valores[$i][2]) and ($row["timestamp"] >= $valores[$i][3]) ){
// entra en esta fila
$valores[$i][0]++;
}
}
}
$valor_maximo = 0;
for ($i = 0; $i < $intervalo; $i++) { // 30 entries in graph, one by day
$grafica[]=$valores[$i][0];
}
// Create graph
$graph = new Graph(280,70);
$graph-> img-> SetImgFormat("png"); // GIF was causing odd problems in Redhat EL 4
$graph->SetMargin(25,5,3,3);
$graph->SetScale("textlin",0,0,0,0);
$graph->SetAlphaBlending(true);
$graph->yaxis->HideTicks(false);
$graph->xaxis->HideTicks(true);
$graph->xaxis->HideLabels(true);
$graph->yaxis->HideLabels(false);
$graph->SetMarginColor('#f5f5f5');
$graph->img->SetCanvasColor('#f5f5f5');
$graph->SetFrame(True,'#f5f5f5',0);
// Linea del eje Y de color
// $graph->ygrid->SetFill(true,'#EFEFEF@0.6','#BBCCFF@0.6');
// $graph->xgrid->Show();
// Titulo guay
//$graph->tabtitle->Set("Access Access");
//$graph->xaxis->SetTickLabels("Que ostias");
$graph->xaxis->SetFont(FF_FONT0);
$graph->xaxis->SetLabelAngle(90);
//$graph->xaxis->SetTextLabelInterval(ceil($intervalo / 10));
$graph->yaxis->SetFont(FF_FONT0);
// Creacion de la linea de datos
$line1=new LinePlot($grafica);
$line1->SetColor($color);
$line1->SetWeight(1);
$line1->SetFillColor($color."@0.2");
//$line1->SetLegend($lang_label["med"]);
// A<>dimos la linea a la imagen
$line1->SetFillColor($color."@0.2");
$graph->Add($line1);
//$graph->legend->Pos(0.01,0.2,"right","center");
// Lineas eje Y por encima del grafico
//$graph->SetGridDepth(DEPTH_BACK);
// Antialias
//$graph->img->SetAntiAliasing();
// Mostramos la imagen
$graph->Stroke();
}
function grafico_incidente_estados() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$data = array(0,0,0,0);
// 0 - Abierta / Sin notas
// 2 - Descartada
// 3 - Caducada
// 13 - Cerrada
$sql1="SELECT * FROM tincidencia";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
if ($row["estado"] == 0)
$data[0]=$data[0]+1;
if ($row["estado"] == 2)
$data[1]=$data[1]+1;
if ($row["estado"] == 3)
$data[2]=$data[2]+1;
if ($row["estado"] == 13)
$data[3]=$data[3]+1;
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++)
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
$graph = new PieGraph(370,180,"auto");
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["incident_status"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->setShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.4);
$p1->SetCenter(0.3);
$legend = array ("Open Incident", "Closed Incident", "Outdated", "Invalid");
$p1->SetLegends($legend);
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function grafico_incidente_prioridad() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$data = array(0,0,0,0,0,0);
// 0 - Abierta / Sin notas
// 2 - Descartada
// 3 - Caducada
// 13 - Cerrada
$sql1="SELECT * FROM tincidencia";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
if ($row["prioridad"] == 0)
$data[0]=$data[0]+1;
if ($row["prioridad"] == 1)
$data[1]=$data[1]+1;
if ($row["prioridad"] == 2)
$data[2]=$data[2]+1;
if ($row["prioridad"] == 3)
$data[3]=$data[3]+1;
if ($row["prioridad"] == 4)
$data[4]=$data[4]+1;
if ($row["prioridad"] == 10)
$data[5]=$data[5]+1;
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++)
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
$graph = new PieGraph(370,180,"auto");
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["incident_priority"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.4);
$p1->SetCenter(0.3);
$legend = array ("Informative","Low","Medium","Serious", "Very serious", "Maintance");
$p1->SetLegends($legend);
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function graphic_incident_group() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$data = array();
$legend = array();
$sql1="SELECT distinct id_grupo FROM tincidencia ";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
$sql1="SELECT COUNT(id_incidencia) FROM tincidencia WHERE id_grupo = ".$row[0];
$result2=mysql_query($sql1);
$row2=mysql_fetch_array($result2);
$data[] = $row2[0];
$legend[] = dame_nombre_grupo($row[0])."(".$row2[0].")";
}
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++){
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
}
$ajuste_altura = sizeof($data) * 20;
$graph = new PieGraph(370,80+$ajuste_altura,'auto');
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["incident_group"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.25);
$p1->SetCenter(0.3);
$p1->SetLegends($legend);
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function graphic_incident_user() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$data = array();
$legend = array();
$sql1="SELECT distinct id_usuario FROM tincidencia ";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
$sql1="SELECT COUNT(id_incidencia) FROM tincidencia WHERE id_usuario = '".$row[0]."'";
$result2=mysql_query($sql1);
$row2=mysql_fetch_array($result2);
$data[] = $row2[0];
$legend[] = $row[0]."(".$row2[0].")";
}
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++){
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
}
$ajuste_altura = sizeof($data) * 20;
$graph = new PieGraph(370,80+$ajuste_altura,'auto');
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["incident_user"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.25);
$p1->SetCenter(0.3);
$p1->SetLegends($legend);
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function graphic_user_activity() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$data = array();
$legend = array();
$sql1="SELECT DISTINCT ID_usuario FROM tsesion ";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
$entrada= entrada_limpia($row[0]);
$sql1='SELECT COUNT(ID_usuario) FROM tsesion WHERE ID_usuario = "'.$entrada.'"';
$result2=mysql_query($sql1);
$row2=mysql_fetch_array($result2);
$data[] = $row2[0];
$legend[] = substr($row[0],0,16)."(".$row2[0].")";
}
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++){
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
}
$ajuste_altura = sizeof($data) * 20;
$graph = new PieGraph(500,80+$ajuste_altura,'auto');
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["users_statistics"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.25);
$p1->SetCenter(0.3);
$p1->SetLegends($legend);
$graph->legend->Pos(0.05,0.49,"right","center");
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function graphic_incident_source() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$data = array();
$legend = array();
$sql1="SELECT DISTINCT origen FROM tincidencia";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
$sql1="SELECT COUNT(id_incidencia) FROM tincidencia WHERE origen = '".$row[0]."'";
$result2=mysql_query($sql1);
$row2=mysql_fetch_array($result2);
$data[] = $row2[0];
$legend[] = $row[0]."(".$row2[0].")";
}
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++){
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
}
$ajuste_altura = sizeof($data) * 20;
$graph = new PieGraph(370,80+$ajuste_altura,'auto');
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["incident_source"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.25);
$p1->SetCenter(0.3);
$p1->SetLegends($legend);
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function grafico_db_agentes_modulos() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_bar.php");
require ("../include/languages/language_".$language_code.".php");
$data = array();
$legend = array();
$sql1="SELECT * FROM tagente";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
$sql1="SELECT COUNT(id_agente_modulo) FROM tagente_modulo WHERE id_agente = ".$row["id_agente"];;
$result2=mysql_query($sql1);
$row2=mysql_fetch_array($result2);
$data[] = $row2[0];
$legend[] = $row["nombre"];
}
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++)
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
$ajuste_altura = sizeof($data) * 20;
//$graph = new PieGraph(400,140+$ajuste_altura,"auto");
$graph = new Graph(400,140+$ajuste_altura,'auto');
$graph->SetScale("textlin");
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["modules_per_agent"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->scale->SetGrace(0);
$graph->yaxis->SetLabelAlign('center','bottom');
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$graph->xaxis->SetLabelMargin(5);
$graph->Set90AndMargin(100,20,50,30);
$p1 = new BarPlot($data);
$p1->value->SetFormat('%.0f ');
$p1->value->Show();
$p1->value->SetAlign('left','center');
$p1->SetFillColor("#00bf00");
$p1->SetWidth(0.6);
$p1->SetShadow();
$graph->yaxis->SetLabelFormat('%d');
$graph->xaxis->SetTickLabels($legend);
$graph->legend->Pos(0.05,0.49,"right","center");
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function grafico_eventos_usuario() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$data = array();
$legend = array();
$sql1="SELECT * FROM tusuario";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
$sql1="SELECT COUNT(id_evento) FROM tevento WHERE id_usuario = '".$row["id_usuario"]."'";
$result2=mysql_query($sql1);
$row2=mysql_fetch_array($result2);
if ($row2[0] > 0){
$data[] = $row2[0];
$legend[] = $row["id_usuario"]." ( $row2[0] )";
}
}
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++)
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
$ajuste_altura = sizeof($data) * 17;
$graph = new PieGraph(430,170+$ajuste_altura,"auto");
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["events_per_user"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.2);
$p1->SetCenter(0.3);
$p1->SetLegends($legend);
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function grafico_eventos_total() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$data = array();
$legend = array();
$total = 0;
$sql1="SELECT COUNT(id_evento) FROM tevento WHERE estado = 1 ";
$result=mysql_query($sql1);
$row=mysql_fetch_array($result);
$data[] = $row[0];
$legend[] = "Revised ( $row[0] )";
$total = $row[0];
$sql1="SELECT COUNT(id_evento) FROM tevento WHERE estado = 0 ";
$result=mysql_query($sql1);
$row=mysql_fetch_array($result);
$data[] = $row[0];
$total = $total + $row[0];
$legend[] = "Not Revised ( $row[0] )";
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor=0; $mayor_data=0;
for ($a=0;$a < sizeof($data); $a++)
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
$graph = new PieGraph(430,200,"auto");
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["event_total"]." ( $total )");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.4);
$p1->SetCenter(0.28);
$p1->SetLegends($legend);
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function grafico_eventos_grupo() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
$data = array();
$legend = array();
$sql1="SELECT * FROM tgrupo";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
$sql1="SELECT COUNT(id_evento) fROM tevento WHERE id_grupo = ".$row["id_grupo"];
$result2=mysql_query($sql1);
$row2=mysql_fetch_array($result2);
if ($row2[0] > 0){
$data[] = $row2[0];
$legend[] = $row["nombre"]." ( $row2[0] )";
}
}
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor=0; $mayor_data=0;
for ($a=0;$a < sizeof($data); $a++)
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
$total_grupos = sizeof($data);
$ajuste_altura = $total_grupos * 10;
$graph = new PieGraph(430,150+$ajuste_altura,"auto");
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["events_per_group"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.35);
$p1->SetCenter(0.28);
$p1->SetLegends($legend);
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function grafico_db_agentes_paquetes() {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_bar.php");
require ("../include/languages/language_".$language_code.".php");
$data = array();
$legend = array();
$sql1="SELECT distinct (id_agente) FROM tagente_datos";
$result=mysql_query($sql1);
while ($row=mysql_fetch_array($result)){
if (! is_null($row["id_agente"])){
$sql1="SELECT COUNT(id_agente) FROM tagente_datos WHERE id_agente = ".$row["id_agente"];
$result3=mysql_query($sql1);
if ($row3=mysql_fetch_array($result3)){
$data[]= $row3[0];
$legend[] = dame_nombre_agente($row[0]);
}
}
}
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++)
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
$ajuste_altura = sizeof($data) * 20;
$graph = new Graph(400,140+$ajuste_altura,'auto');
$graph->SetScale("textlin");
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["packets_by_agent"]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->scale->SetGrace(0);
$graph->yaxis->SetLabelAlign('center','bottom');
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$graph->xaxis->SetLabelMargin(5);
$graph->Set90AndMargin(100,20,50,30);
$p1 = new BarPlot($data);
$p1->value->SetFormat('%.0f ');
$p1->value->Show();
$p1->value->SetAlign('left','center');
$p1->SetFillColor("#0000fd");
$p1->SetWidth(0.6);
$p1->SetShadow();
$graph->yaxis->SetLabelFormat('%d');
$graph->xaxis->SetTickLabels($legend);
$graph->legend->Pos(0.05,0.49,"right","center");
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function grafico_db_agentes_purge($id_agente) {
include ("../include/config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
require ("../include/languages/language_".$language_code.".php");
// All data (now)
$purge_all=date("Y-m-d H:i:s",time());
// 1 day
$d1_year = date("Y", time()-28800);
$d1_month = date("m", time()-28800);
$d1_day = date ("d", time()-28800);
$d1_hour = date ("H", time()-28800);
$minuto = date("i",time());
$segundo = date("s",time());
$d1 = $d1_year."-".$d1_month."-".$d1_day." ".$d1_hour.":".$minuto.":".$segundo."";
// 3 days
$d3_year = date("Y", time()-86400);
$d3_month = date("m", time()-86400);
$d3_day = date ("d", time()-86400);
$d3_hour = date ("H", time()-86400);
$d3 = $d3_year."-".$d3_month."-".$d3_day." ".$d3_hour.":".$minuto.":".$segundo."";
// Fecha 24x7 Horas (una semana)
$week_year = date("Y", time()-604800);
$week_month = date("m", time()-604800);
$week_day = date ("d", time()-604800);
$week_hour = date ("H", time()-604800);
$d7 = $week_year."-".$week_month."-".$week_day." ".$week_hour.":".$minuto.":".$segundo."";
// Fecha 24x7x2 Horas (dos semanas)
$week2_year = date("Y", time()-1209600);
$week2_month = date("m", time()-1209600);
$week2_day = date ("d", time()-1209600);
$week2_hour = date ("H", time()-1209600);
$d14 = $week2_year."-".$week2_month."-".$week2_day." ".$week2_hour.":".$minuto.":".$segundo."";
// Fecha de hace 24x7x30 Horas (un mes)
$month_year = date("Y", time()-2592000);
$month_month = date("m", time()-2592000);
$month_day = date ("d", time()-2592000);
$month_hour = date ("H", time()-2592000);
$d30 = $month_year."-".$month_month."-".$month_day." ".$month_hour.":".$minuto.":".$segundo."";
// Three months
$month3_year = date("Y", time()-7257600);
$month3_month = date("m", time()-7257600);
$month3_day = date ("d", time()-7257600);
$month3_hour = date ("H", time()-7257600);
$d90 = $month3_year."-".$month3_month."-".$month3_day." ".$month3_hour.":".$minuto.":".$segundo."";
$data = array();
$legend = array();
$fechas= array($d90, $d30, $d7, $d1);
$fechas_label = array("> 30 days","7-30 days","2-7 days","24Hr");
// Calc. total packets
$sql1="SELECT COUNT(id_agente_datos) FROM tagente_datos";;
$result2=mysql_query($sql1);
$row2=mysql_fetch_array($result2);
$total = $row2[0];
for ($a=0;$a<sizeof($fechas);$a++){ // 4 x intervals will be enought, increase if your database is very very quickly :)
if ($a==3)
$sql1="SELECT COUNT(id_agente_datos) FROM tagente_datos WHERE timestamp >= '".$fechas[$a]."' ";
else
$sql1="SELECT COUNT(id_agente_datos) FROM tagente_datos WHERE timestamp >= '".$fechas[$a]."' AND timestamp < '".$fechas[$a+1]."' ";
$result=mysql_query($sql1);
$row=mysql_fetch_array($result);
$data[] = $row[0];
$legend[]=$fechas_label[$a]." ( ".$row[0]." )";
}
// Sort array by bubble method (yes, I study more methods in university, but if you want more speed, please, submit a patch :)
// or much better, pay me to do a special version for you, highly optimized :-))))
for ($a=0;$a < sizeof($data);$a++){
for ($b=$a; $b <sizeof($data); $b++)
if ($data[$b] > $data[$a]){
$temp = $data[$a];
$temp_label = $legend[$a];
$data[$a] = $data[$b];
$legend[$a] = $legend[$b];
$data[$b] = $temp;
$legend[$b] = $temp_label;
}
}
$mayor = 0;
$mayor_data =0;
for ($a=0;$a < sizeof($data); $a++)
if ($data[$a] > $mayor_data){
$mayor = $a;
$mayor_data = $data[$a];
}
$graph = new PieGraph(500,200,"auto");
$graph->SetMarginColor('white@0.2');
$graph->title->Set($lang_label["packets_by_date"]." ( Tot - $total ) ");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetShadow();
$graph->SetAlphaBlending();
$graph->SetFrame(true);
$p1 = new PiePlot3D($data);
$p1->ExplodeSlice($mayor);
$p1->SetSize(0.35);
$p1->SetCenter(0.3);
$p1->SetLegends($legend);
$graph->Add($p1);
$graph->img->SetAntiAliasing();
$graph->Stroke();
}
function drawWarning($width,$height) {
include ("../include/config.php");
require ("../include/languages/language_".$language_code.".php");
if ($width == 0) {
$width = 50;
}
if ($height == 0) {
$height = 30;
}
$image = imagecreate($width,$height);
//colors
$back = ImageColorAllocate($image,255,255,255);
$border = ImageColorAllocate($image,0,0,0);
$red = ImageColorAllocate($image,255,60,75);
$fill = ImageColorAllocate($image,44,81,150);
ImageFilledRectangle($image,0,0,$width-1,$height-1,$back);
ImageRectangle($image,0,0,$width-1,$height-1,$border);
ImageTTFText($image, 8, 0, ($width/2)-($width/10), ($height/2)+($height/5), $border, $config_fontpath, $lang_label["no_data"]);
imagePNG($image);
imagedestroy($image);
}
function progress_bar($progress,$width,$height) {
// Copied from the PHP manual:
// http://us3.php.net/manual/en/function.imagefilledrectangle.php
// With some adds from sdonie at lgc dot com
// Get from official documentation PHP.net website. Thanks guys :-)
// Code ripped from Babel Project :-)
function drawRating($rating,$width,$height) {
include ("../include/config.php");
require ("../include/languages/language_".$language_code.".php");
if ($width == 0) {
$width = 150;
}
if ($height == 0) {
$height = 20;
}
//$rating = $_GET['rating'];
$ratingbar = (($rating/100)*$width)-2;
$image = imagecreate($width,$height);
//colors
$back = ImageColorAllocate($image,255,255,255);
$border = ImageColorAllocate($image,0,0,0);
$red = ImageColorAllocate($image,255,60,75);
$fill = ImageColorAllocate($image,44,81,150);
ImageFilledRectangle($image,0,0,$width-1,$height-1,$back);
ImageRectangle($image,0,0,$width-1,$height-1,$border);
if (($rating > 100) || ($rating < 0)){
ImageFilledRectangle($image,1,1,$width-1,$height-1,$red);
ImageTTFText($image, 8, 0, ($width/3)-($width/10), ($height/2)+($height/5), $back, $config_fontpath,$lang_label["out_of_limits"]);
}
else {
ImageFilledRectangle($image,1,1,$ratingbar,$height-1,$fill);
if ($rating > 50)
ImageTTFText($image, 8, 0, ($width/2)-($width/10), ($height/2)+($height/5), $back, $config_fontpath, $rating."%");
else
ImageTTFText($image, 8, 0, ($width/2)-($width/10), ($height/2)+($height/5), $border, $config_fontpath, $rating."%");
}
imagePNG($image);
imagedestroy($image);
}
Header("Content-type: image/png");
drawRating($progress,$width,$height);
}
// *****************************************************************************************************************
// MAIN Code
// parse get parameters
// *****************************************************************************************************************
if (isset($_GET["tipo"])){
if ($_GET["tipo"]=="sparse"){
if (isset($_GET["id"]) and (isset($_GET["label"])) and ( isset($_GET["periodo"])) and (isset ($_GET["intervalo"])) AND (isset ($_GET["color"])) ){
$id = $_GET["id"];
$color = $_GET["color"];
$tipo = $_GET["tipo"];
$periodo = $_GET["periodo"];
$intervalo = $_GET["intervalo"];
$label = $_GET["label"];
$color = "#".$color;
if ( isset($_GET["draw_events"]) and $_GET["draw_events"]==0 )
{ $draw_events = 0; } else { $draw_events = 1; }
if (isset($_GET['zoom']) and is_numeric($_GET['zoom']) and $_GET['zoom']>100) {
$zoom = $_GET['zoom'] / 100 ;
} else { $zoom = 1; }
grafico_modulo_sparse($id, $periodo, $intervalo, $label, $color, $zoom, $draw_events);
}
}
elseif ($_GET["tipo"] =="estado_incidente")
grafico_incidente_estados();
elseif ($_GET["tipo"] =="prioridad_incidente")
grafico_incidente_prioridad();
elseif ($_GET["tipo"]=="db_agente_modulo")
grafico_db_agentes_modulos();
elseif ($_GET["tipo"]=="db_agente_paquetes")
grafico_db_agentes_paquetes();
elseif ($_GET["tipo"] =="db_agente_purge")
grafico_db_agentes_purge(-1);
elseif ($_GET["tipo"] =="group_events")
grafico_eventos_grupo();
elseif ($_GET["tipo"] =="user_events")
grafico_eventos_usuario();
elseif ($_GET["tipo"] =="total_events")
grafico_eventos_total();
elseif ($_GET["tipo"] =="group_incident")
graphic_incident_group();
elseif ($_GET["tipo"] =="user_incident")
graphic_incident_user();
elseif ($_GET["tipo"] =="source_incident")
graphic_incident_source();
elseif ($_GET["tipo"] =="user_activity")
graphic_user_activity();
elseif ($_GET["tipo"] == "agentaccess")
graphic_agentaccess($_GET["id"], $_GET["periodo"]);
elseif ($_GET["tipo"] == "agentmodules")
graphic_agentmodules($_GET["id"]);
elseif ( $_GET["tipo"] =="progress"){
$percent= $_GET["percent"];
$width= $_GET["width"];
$height= $_GET["height"];
progress_bar($percent,$width,$height);
}
}
?>