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;
 }