function generateData($rrdtool_template, $itemtype, $items_id, $timezone, $time, $enddate = '') { global $DB; if ($enddate == '') { $enddate = date('U'); } // Manage timezones $converttimezone = '0'; if (strstr($timezone, '-')) { $timezone_temp = str_replace("-", "", $timezone); $converttimezone = $timezone_temp * 3600; $timezone = str_replace("-", "+", $timezone); } else { if (strstr($timezone, '+')) { $timezone_temp = str_replace("+", "", $timezone); $converttimezone = $timezone_temp * 3600; $timezone = str_replace("+", "-", $timezone); } } // ** Get in table serviceevents $mydatat = array(); $a_labels = array(); $a_ref = array(); $pmServiceevent = new PluginMonitoringServiceevent(); $pmService = new PluginMonitoringService(); $pmService->getFromDB($items_id); $dateformat = "%Y-%m-%d %Hh"; $begin = ''; switch ($time) { case '2h': $begin = date('Y-m-d H:i:s', $enddate - 2 * 3600); $dateformat = "(%d)%H:%M"; $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `date` > '" . $begin . "'\n AND `date` <= '" . date('Y-m-d H:i:s', $enddate) . "'\n ORDER BY `date`"; $result = $DB->query($query); $ret = array(); if (isset($this->jsongraph_a_ref[$rrdtool_template])) { $ret = $pmServiceevent->getData($result, $rrdtool_template, array($this->jsongraph_a_ref[$rrdtool_template], $this->jsongraph_a_convert[$rrdtool_template])); } else { $ret = $pmServiceevent->getData($result, $rrdtool_template); } if (is_array($ret)) { $mydatat = $ret[0]; $a_labels = $ret[1]; $a_ref = $ret[2]; if (!isset($this->jsongraph_a_ref[$rrdtool_template])) { $this->jsongraph_a_ref[$rrdtool_template] = $ret[2]; $this->jsongraph_a_convert[$rrdtool_template] = $ret[3]; } } break; case '12h': $begin = date('Y-m-d H:i:s', $enddate - 12 * 3600); $dateformat = "(%d)%H:%M"; $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `date` > '" . $begin . "'\n AND `date` <= '" . date('Y-m-d H:i:s', $enddate) . "'\n ORDER BY `date`"; $result = $DB->query($query); $ret = $pmServiceevent->getData($result, $rrdtool_template); if (is_array($ret)) { $mydatat = $ret[0]; $a_labels = $ret[1]; $a_ref = $ret[2]; } break; case '1d': $begin = date('Y-m-d H:i:s', $enddate - 24 * 3600); $dateformat = "(%d)%H:%M"; $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `date` > '" . $begin . "'\n AND `date` <= '" . date('Y-m-d H:i:s', $enddate) . "'\n ORDER BY `date`"; $result = $DB->query($query); $ret = $pmServiceevent->getData($result, $rrdtool_template); if (is_array($ret)) { $mydatat = $ret[0]; $a_labels = $ret[1]; $a_ref = $ret[2]; } break; case '1w': $begin = date('Y-m-d H:i:s', date('U') - 7 * 24 * 3600); $display_month = 0; $dateformat = "(%d) %Hh"; if (date('m', date('U') - 7 * 24 * 3600) != date('m', date('U'))) { $display_month = 1; $dateformat = "%m-%d %Hh"; } $query = "SELECT * FROM `" . $this->getTable() . "`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `type`='6h'\n ORDER BY `date`"; $result = $DB->query($query); while ($edata = $DB->fetch_array($result)) { $dat = importArrayFromDB($edata['data']); $datemod = $edata['date']; $daynum = Calendar::getDayNumberInWeek(PluginMonitoringServiceevent::convert_datetime_timestamp($edata['date'])); $split = explode(' ', $datemod); $split2 = explode(':', $split[1]); $splitymd = explode('-', $split[0]); $dateymd = "(" . $splitymd[2] . ")"; if ($display_month == 1) { $dateymd = $splitymd[1] . "-" . $splitymd[2]; } array_push($a_labels, $dateymd . " " . $split2[0] . 'h'); if (count($dat) == 0) { $a_perfnames = PluginMonitoringServicegraph::getperfdataNames($rrdtool_template); foreach ($a_perfnames as $name) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], ''); } } else { foreach ($dat as $name => $value) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], $value); } } } $ret = $pmServiceevent->getRef($rrdtool_template); break; case '1m': $begin = date('Y-m-d H:i:s', date('U') - 30 * 24 * 3600); $display_year = 0; $dateformat = "%m-%d %Hh"; if (date('Y', date('U') - 7 * 24 * 3600) != date('Y', date('U'))) { $display_year = 1; $dateformat = "%Y-%m-%d %Hh"; } $query = "SELECT * FROM `" . $this->getTable() . "`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `type`='1d'\n ORDER BY `date`"; $result = $DB->query($query); while ($edata = $DB->fetch_array($result)) { $dat = importArrayFromDB($edata['data']); $datemod = $edata['date']; // $daynum = Calendar::getDayNumberInWeek(PluginMonitoringServiceevent::convert_datetime_timestamp($edata['date'])); $split = explode(' ', $datemod); $split2 = explode(':', $split[1]); $day = explode("-", $split[0]); $dateymd = $day[1] . "-" . $day[2]; if ($display_year == 1) { $dateymd = $split[0]; } array_push($a_labels, $dateymd . " " . $split2[0] . 'h'); if (count($dat) == 0) { $a_perfnames = PluginMonitoringServicegraph::getperfdataNames($rrdtool_template); foreach ($a_perfnames as $name) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], ''); } } else { foreach ($dat as $name => $value) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], $value); } } } $ret = $pmServiceevent->getRef($rrdtool_template); break; case '0y6m': $begin = date('Y-m-d H:i:s', date('U') - 364 / 2 * 24 * 3600); $query = "SELECT * FROM `" . $this->getTable() . "`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `type`='5d'\n ORDER BY `date`"; $result = $DB->query($query); while ($edata = $DB->fetch_array($result)) { $dat = importArrayFromDB($edata['data']); $datemod = $edata['date']; $daynum = date('m', PluginMonitoringServiceevent::convert_datetime_timestamp($edata['date'])); $daynum = $daynum - 1; $split = explode(' ', $datemod); $split2 = explode(':', $split[1]); $day = explode("-", $split[0]); array_push($a_labels, $split[0] . " " . $split2[0] . 'h'); if (count($dat) == 0) { $a_perfnames = PluginMonitoringServicegraph::getperfdataNames($rrdtool_template); foreach ($a_perfnames as $name) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], ''); } } else { foreach ($dat as $name => $value) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], $value); } } } $ret = $pmServiceevent->getRef($rrdtool_template); $a_ref = $ret[0]; break; case '1y': $begin = date('Y-m-d H:i:s', date('U') - 365 * 24 * 3600); $query = "SELECT * FROM `" . $this->getTable() . "`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `type`='10d'\n ORDER BY `date`"; $result = $DB->query($query); while ($edata = $DB->fetch_array($result)) { $dat = importArrayFromDB($edata['data']); $datemod = $edata['date']; $daynum = date('m', PluginMonitoringServiceevent::convert_datetime_timestamp($edata['date'])); $daynum = $daynum - 1; $split = explode(' ', $datemod); $split2 = explode(':', $split[1]); $day = explode("-", $split[0]); array_push($a_labels, $split[0] . " " . $split2[0] . 'h'); if (count($dat) == 0) { $a_perfnames = PluginMonitoringServicegraph::getperfdataNames($rrdtool_template); foreach ($a_perfnames as $name) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], ''); } } else { foreach ($dat as $name => $value) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], $value); } } } $ret = $pmServiceevent->getRef($rrdtool_template); break; } return array($mydatat, $a_labels, $dateformat); }
function displayGraph($rrdtool_template, $itemtype, $items_id, $timezone, $time = '1d', $width = '470') { global $DB, $LANG; $timezonefile = str_replace("+", ".", $timezone); // Cache 1 minute if (file_exists(GLPI_PLUGIN_DOC_DIR . "/monitoring/" . $itemtype . "-" . $items_id . "-" . $time . $timezonefile . ".png")) { $time_generate = filectime(GLPI_PLUGIN_DOC_DIR . "/monitoring/" . $itemtype . "-" . $items_id . "-" . $time . $timezonefile . ".png"); if ($time_generate + 150 > date('U')) { return; } } $filename = GLPI_PLUGIN_DOC_DIR . "/monitoring/templates/" . $rrdtool_template . "_graph.json"; $loadfile = file_get_contents($filename); if (!$loadfile) { return; } $a_jsong = json_decode($loadfile); // Manage timezones $converttimezone = '0'; if (strstr($timezone, '-')) { $timezone_temp = str_replace("-", "", $timezone); $converttimezone = $timezone_temp * 3600; $timezone = str_replace("-", "+", $timezone); } else { if (strstr($timezone, '+')) { $timezone_temp = str_replace("+", "", $timezone); $converttimezone = $timezone_temp * 3600; $timezone = str_replace("+", "-", $timezone); } } $opts = ""; /* pChart library inclusions */ include_once "../lib/pChart2.1.3/class/pData.class.php"; include_once "../lib/pChart2.1.3/class/pDraw.class.php"; include_once "../lib/pChart2.1.3/class/pImage.class.php"; $MyData = new pData(); // ** Get in table serviceevents $mydatat = array(); $a_labels = array(); $a_ref = array(); $pmServiceevent = new PluginMonitoringServiceevent(); $pmService = new PluginMonitoringService(); $pmService->getFromDB($items_id); $begin = ''; switch ($time) { case '2h': $begin = date('Y-m-d H:i:s', date('U') - 2 * 3600); $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `date` > '" . $begin . "'\n ORDER BY `date`"; $result = $DB->query($query); $ret = array(); if (isset($this->jsongraph_a_ref[$rrdtool_template])) { $ret = $pmServiceevent->getData($result, $rrdtool_template, array($this->jsongraph_a_ref[$rrdtool_template], $this->jsongraph_a_convert[$rrdtool_template])); } else { $ret = $pmServiceevent->getData($result, $rrdtool_template); } if (is_array($ret)) { $mydatat = $ret[0]; $a_labels = $ret[1]; $a_ref = $ret[2]; if (!isset($this->jsongraph_a_ref[$rrdtool_template])) { $this->jsongraph_a_ref[$rrdtool_template] = $ret[2]; $this->jsongraph_a_convert[$rrdtool_template] = $ret[3]; } } break; case '12h': $begin = date('Y-m-d H:i:s', date('U') - 12 * 3600); $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `date` > '" . $begin . "'\n ORDER BY `date`"; $result = $DB->query($query); $ret = $pmServiceevent->getData($result, $rrdtool_template); if (is_array($ret)) { $mydatat = $ret[0]; $a_labels = $ret[1]; $a_ref = $ret[2]; } break; case '1d': $begin = date('Y-m-d H:i:s', date('U') - 24 * 3600); $query = "SELECT * FROM `" . $this->getTable() . "`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `type`='30m'\n ORDER BY `date`"; $result = $DB->query($query); while ($edata = $DB->fetch_array($result)) { $dat = importArrayFromDB($edata['data']); if (count($dat) > 0) { $datemod = $edata['date']; $split = explode(' ', $datemod); $split2 = explode(':', $split[1]); array_push($a_labels, $split2[0] . ':' . $split2[1]); } foreach ($dat as $name => $value) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], $value); } } $ret = $pmServiceevent->getRef($rrdtool_template); $a_ref = $ret[0]; break; case '1w': $begin = date('Y-m-d H:i:s', date('U') - 7 * 24 * 3600); $query = "SELECT * FROM `" . $this->getTable() . "`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `type`='6h'\n ORDER BY `date`"; $result = $DB->query($query); while ($edata = $DB->fetch_array($result)) { $dat = importArrayFromDB($edata['data']); if (count($dat) > 0) { $datemod = $edata['date']; $daynum = Calendar::getDayNumberInWeek(PluginMonitoringServiceevent::convert_datetime_timestamp($edata['date'])); $split = explode(' ', $datemod); $split2 = explode(':', $split[1]); array_push($a_labels, $LANG['calendarDay'][$daynum] . " " . $split2[0] . ':' . $split2[1]); } foreach ($dat as $name => $value) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], $value); } } $ret = $pmServiceevent->getRef($rrdtool_template); $a_ref = $ret[0]; break; case '1m': $begin = date('Y-m-d H:i:s', date('U') - 30 * 24 * 3600); $query = "SELECT * FROM `" . $this->getTable() . "`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `type`='1d'\n ORDER BY `date`"; $result = $DB->query($query); while ($edata = $DB->fetch_array($result)) { $dat = importArrayFromDB($edata['data']); if (count($dat) > 0) { $datemod = $edata['date']; $daynum = Calendar::getDayNumberInWeek(PluginMonitoringServiceevent::convert_datetime_timestamp($edata['date'])); $split = explode(' ', $datemod); $split2 = explode(':', $split[1]); $day = explode("-", $split[0]); array_push($a_labels, $LANG['calendarDay'][$daynum] . " " . $day[2]); } foreach ($dat as $name => $value) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], $value); } } $ret = $pmServiceevent->getRef($rrdtool_template); $a_ref = $ret[0]; break; case '0y6m': $begin = date('Y-m-d H:i:s', date('U') - 364 / 2 * 24 * 3600); $query = "SELECT * FROM `" . $this->getTable() . "`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `type`='5d'\n ORDER BY `date`"; $result = $DB->query($query); while ($edata = $DB->fetch_array($result)) { $dat = importArrayFromDB($edata['data']); if (count($dat) > 0) { $datemod = $edata['date']; $daynum = date('m', PluginMonitoringServiceevent::convert_datetime_timestamp($edata['date'])); $daynum = $daynum - 1; $split = explode(' ', $datemod); $day = explode("-", $split[0]); array_push($a_labels, $LANG['calendarM'][$daynum] . " " . $day[2]); } foreach ($dat as $name => $value) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], $value); } } $ret = $pmServiceevent->getRef($rrdtool_template); $a_ref = $ret[0]; break; case '1y': $begin = date('Y-m-d H:i:s', date('U') - 365 * 24 * 3600); $query = "SELECT * FROM `" . $this->getTable() . "`\n WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n AND `type`='10d'\n ORDER BY `date`"; $result = $DB->query($query); while ($edata = $DB->fetch_array($result)) { $dat = importArrayFromDB($edata['data']); if (count($dat) > 0) { $datemod = $edata['date']; $daynum = date('m', PluginMonitoringServiceevent::convert_datetime_timestamp($edata['date'])); $daynum = $daynum - 1; $split = explode(' ', $datemod); $day = explode("-", $split[0]); array_push($a_labels, $LANG['calendarM'][$daynum] . " " . $day[2]); } foreach ($dat as $name => $value) { if (!isset($mydatat[$name])) { $mydatat[$name] = array(); } array_push($mydatat[$name], $value); } } $ret = $pmServiceevent->getRef($rrdtool_template); $a_ref = $ret[0]; break; } $i = 0; foreach ($mydatat as $name => $data) { $i++; if ($i == '2') { $datat = $data; $data = array(); foreach ($datat as $val) { array_push($data, -$val); } } if (empty($data)) { array_push($data, 0); } $MyData->addPoints($data, $name); $color = str_split($a_ref[$name]); $MyData->setPalette($name, array("R" => hexdec($color[0] . $color[1]), "G" => hexdec($color[2] . $color[3]), "B" => hexdec($color[4] . $color[5]))); } $MyData->setAxisDisplay(0, AXIS_FORMAT_METRIC, 1); // $MyData->setSerieTicks("Probe 2",4); // $MyData->setAxisName(0,"Temperatures"); $MyData->addPoints($a_labels, "Labels"); // $MyData->setSerieDescription("Labels","Months"); $MyData->setAbscissa("Labels"); $myPicture = new pImage(700, 230, $MyData); $myPicture->Antialias = FALSE; $Settings = array("R" => 225, "G" => 204, "B" => 123); $myPicture->drawFilledRectangle(0, 0, 700, 230, $Settings); $Settings = array("R" => 255, "G" => 255, "B" => 255); $myPicture->drawFilledRectangle(60, 40, 650, 200, $Settings); /* Add a border to the picture */ $myPicture->drawRectangle(0, 0, 699, 229, array("R" => 0, "G" => 0, "B" => 0)); /* Write the chart title */ $myPicture->setFontProperties(array("FontName" => "../lib/pChart2.1.3/fonts/verdana.ttf", "FontSize" => 11)); $myPicture->drawText(350, 20, $a_jsong->data[0]->labels[0]->title, array("FontSize" => 13, "Align" => TEXT_ALIGN_MIDDLEMIDDLE)); /* Set the default font */ $myPicture->setFontProperties(array("FontName" => "../lib/pChart2.1.3/fonts/verdana.ttf", "FontSize" => 7)); /* Define the chart area */ $myPicture->setGraphArea(60, 40, 650, 200); /* Draw the scale */ $labelskip = round(count($a_labels) / 8); if ($time == '1d') { $labelskip = 3; } else { if ($time == '1m') { $labelskip = 3; } else { if ($time == '0y6m') { $labelskip = 4; } else { if ($time == '1y') { $labelskip = 3; } } } } $scaleSettings = array("XMargin" => 10, "YMargin" => 10, "Floating" => TRUE, "GridR" => 158, "GridG" => 158, "GridB" => 158, "GridAlpha" => 80, "DrawSubTicks" => TRUE, "CycleBackground" => FALSE, "LabelSkip" => $labelskip); $myPicture->drawScale($scaleSettings); /* Write the chart legend */ $myPicture->drawLegend(540, 20, array("Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL)); /* Turn on Antialiasing */ $myPicture->Antialias = TRUE; $Config = array("ForceTransparency" => 60); /* Draw the area chart */ $myPicture->drawAreaChart($Config); $myPicture->render(GLPI_PLUGIN_DOC_DIR . "/monitoring/" . $itemtype . "-" . $items_id . "-" . $time . $timezonefile . ".png"); return; }