Example #1
0
 static function cronCleanlogs()
 {
     global $DB;
     $pmLog = new PluginMonitoringLog();
     $pmConfig = new PluginMonitoringConfig();
     $id_restart = 0;
     $a_restarts = $pmLog->find("`action`='restart'", "`id` DESC", 1);
     if (count($a_restarts) > 0) {
         $a_restart = current($a_restarts);
         $id_restart = $a_restart['id'];
     }
     $pmConfig->getFromDB(1);
     $secs = $pmConfig->fields['logretention'] * DAY_TIMESTAMP;
     $query = "DELETE FROM `" . $pmLog->getTable() . "`\n         WHERE UNIX_TIMESTAMP(date_mod) < UNIX_TIMESTAMP()-{$secs}";
     if ($id_restart > 0) {
         $query .= " AND `id` < '" . $id_restart . "'";
     }
     $DB->query($query);
     // Clean too events
     PluginMonitoringServiceevent::cronUpdaterrd();
     $pmUnavaibility = new PluginMonitoringUnavaibility();
     $pmUnavaibility->runUnavaibility();
     $query = "DELETE FROM `glpi_plugin_monitoring_serviceevents`\n         WHERE UNIX_TIMESTAMP(date) < UNIX_TIMESTAMP()-{$secs}";
     $DB->query($query);
     return true;
 }
 static function runUnavaibility($services_id = 0)
 {
     global $DB;
     $pmUnavaibility = new PluginMonitoringUnavaibility();
     $pmServiceevent = new PluginMonitoringServiceevent();
     $where = '';
     if ($services_id != '0') {
         $where = " WHERE `id`='" . $services_id . "' ";
     }
     $query = "SELECT * FROM `glpi_plugin_monitoring_services` " . $where;
     $result = $DB->query($query);
     while ($data = $DB->fetch_array($result)) {
         $pmUnavaibility->getCurrentState($data['id']);
         $query2 = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n            WHERE `unavailability`='0'\n               AND `state_type`='HARD'\n               AND `plugin_monitoring_services_id`='" . $data['id'] . "'\n            ORDER BY `date`";
         $result2 = $DB->query($query2);
         while ($data2 = $DB->fetch_array($result2)) {
             $pmUnavaibility->checkState($data2['state'], $data2['date']);
             $input = array();
             $input['id'] = $data2['id'];
             $input['unavailability'] = 1;
             $pmServiceevent->update($input);
         }
     }
 }
   function generateData($rrdtool_template, $itemtype, $items_id, $timezone, $time, $enddate='', $todisplay=array()) {
      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);

      $_SESSION['plugin_monitoring_checkinterval'] = PluginMonitoringComponent::getTimeBetween2Checks($pmService->fields['plugin_monitoring_components_id']);

      $dateformat = "%Y-%m-%d %Hh";

      $begin = '';
      switch ($time) {

         case '2h':
            $begin = date('Y-m-d H:i:s', $enddate - (2 * 3600));
            $timecomplete = 0;
            $dateformat = "(%d)%H:%M";
            if (date('m', $enddate) != date('m', $enddate - (2 * 3600))) {
               $timecomplete = 2;
               $dateformat = "%m-%d %H:%M";
            }

            $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`
               WHERE `plugin_monitoring_services_id`='".$items_id."'
                  AND `date` > '".$begin."'
                  AND `date` <= '".date('Y-m-d H:i:s', $enddate)."'
               ORDER BY `date`";
            $result = $DB->query($query);
            $ret = array();
            if (isset($this->jsongraph_a_ref[$rrdtool_template])) {
               $ret = $pmServiceevent->getData(
                       $result,
                       $rrdtool_template,
                       $begin,
                       date('Y-m-d H:i:s', $enddate),
                       array($this->jsongraph_a_ref[$rrdtool_template],
                             $this->jsongraph_a_convert[$rrdtool_template]),
                       $timecomplete,
                       $todisplay);
            } else {
               $ret = $pmServiceevent->getData(
                       $result,
                       $rrdtool_template,
                       $begin,
                       date('Y-m-d H:i:s', $enddate),
                       array(),
                       $timecomplete,
                       $todisplay);
            }
            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));
            $timecomplete = 0;
            $dateformat = "(%d)%H:%M";
            if (date('m', $enddate) != date('m', $enddate - (12 * 3600))) {
               $timecomplete = 2;
               $dateformat = "%m-%d %H:%M";
            }

            $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`
               WHERE `plugin_monitoring_services_id`='".$items_id."'
                  AND `date` > '".$begin."'
                  AND `date` <= '".date('Y-m-d H:i:s', $enddate)."'
               ORDER BY `date`";
            $result = $DB->query($query);
            $ret = $pmServiceevent->getData(
                    $result,
                    $rrdtool_template,
                    $begin,
                    date('Y-m-d H:i:s', $enddate),
                    array(),
                    $timecomplete,
                    $todisplay);
            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));
            $timecomplete = 0;
            $dateformat = "(%d)%H:%M";
            if (date('m', $enddate) != date('m', $enddate - (24 * 3600))) {
               $timecomplete = 2;
               $dateformat = "%m-%d %H:%M";
            }

            $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`
               WHERE `plugin_monitoring_services_id`='".$items_id."'
                  AND `date` > '".$begin."'
                  AND `date` <= '".date('Y-m-d H:i:s', $enddate)."'
               ORDER BY `date`";
            $result = $DB->query($query);
            $ret = $pmServiceevent->getData(
                    $result,
                    $rrdtool_template,
                    $begin,
                    date('Y-m-d H:i:s', $enddate),
                    array(),
                    $timecomplete,
                    $todisplay);
            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', $enddate - (7 * 24 * 3600));
            $dateformat = "%Y-%m-%d %H:%M";

            $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`
               WHERE `plugin_monitoring_services_id`='".$items_id."'
                  AND `date` > '".$begin."'
                  AND `date` <= '".date('Y-m-d H:i:s', $enddate)."'
               ORDER BY `date`";
            $result = $DB->query($query);
            $ret = $pmServiceevent->getData(
                    $result,
                    $rrdtool_template,
                    $begin,
                    date('Y-m-d H:i:s', $enddate),
                    array(),
                    TRUE,
                    $todisplay);
            if (is_array($ret)) {
               $mydatat  = $ret[0];
               $a_labels = $ret[1];
               $a_ref    = $ret[2];

               $nb_val = count($a_labels);
               // May have 22 points in the graph
               $nb_val_period = $nb_val / 75;
               $mydatatNew = array();
               foreach ($mydatat as $name=>$data) {
                  $nb = 1;
                  $val = 0;
                  foreach ($data as $value) {
                     $val += $value;
                     $nb++;
                     if ($nb > $nb_val_period) {
                        $mydatatNew[$name][] = round($val / ($nb - 1), 2);
                        $nb = 1;
                        $val = 0;
                     }
                  }
                  if ($nb > 1
                          && $nb <= $nb_val_period) {

                        $mydatatNew[$name][] = round($val / ($nb - 1), 2);
                  }
               }
               $mydatat = $mydatatNew;
               $a_labelsNew = array();
               $nb = 1;
               $val = 0;
               foreach ($a_labels as $value) {
                  if ($nb == 1) {
                     $a_labelsNew[] = $value;
                  }
                  $nb++;
                  if ($nb > $nb_val_period) {
                     $nb = 1;
                  }
               }
               $a_labels = $a_labelsNew;
            }
            break;

         case '1m':
            $begin = date('Y-m-d H:i:s', $enddate - (30 * 24 * 3600));
            $dateformat = "%Y-%m-%d %H:%M";

            $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`
               WHERE `plugin_monitoring_services_id`='".$items_id."'
                  AND `date` > '".$begin."'
                  AND `date` <= '".date('Y-m-d H:i:s', $enddate)."'
               ORDER BY `date`";
            $result = $DB->query($query);
            $ret = $pmServiceevent->getData(
                    $result,
                    $rrdtool_template,
                    $begin,
                    date('Y-m-d H:i:s', $enddate),
                    array(),
                    TRUE,
                    $todisplay);
            if (is_array($ret)) {
               $mydatat  = $ret[0];
               $a_labels = $ret[1];
               $a_ref    = $ret[2];

               $nb_val = count($a_labels);
               // May have 22 points in the graph
               $nb_val_period = $nb_val / 75;
               $mydatatNew = array();
               foreach ($mydatat as $name=>$data) {
                  $nb = 1;
                  $val = 0;
                  foreach ($data as $value) {
                     $val += $value;
                     $nb++;
                     if ($nb > $nb_val_period) {
                        $mydatatNew[$name][] = ceil($val / ($nb - 1));
                        $nb = 1;
                        $val = 0;
                     }
                  }
                  if ($nb > 1
                          && $nb <= $nb_val_period) {

                        $mydatatNew[$name][] = ceil($val / ($nb - 1));
                  }
               }
               $mydatat = $mydatatNew;

               $a_labelsNew = array();
               $nb = 1;
               $val = 0;
               foreach ($a_labels as $value) {
                  if ($nb == 1) {
                     $a_labelsNew[] = $value;
                  }
                  $nb++;
                  if ($nb > $nb_val_period) {
                     $nb = 1;
                  }
               }
               $a_labels = $a_labelsNew;
            }
            break;

         case '0y6m':
            $begin = date('Y-m-d H:i:s', date('U') - ((364 / 2) * 24 * 3600));
            $dateformat = "%Y-%m-%d %H:%M";

            $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`
               WHERE `plugin_monitoring_services_id`='".$items_id."'
                  AND `date` > '".$begin."'
                  AND `date` <= '".date('Y-m-d H:i:s', $enddate)."'
               ORDER BY `date`";
            $result = $DB->query($query);
            $ret = $pmServiceevent->getData(
                    $result,
                    $rrdtool_template,
                    $begin,
                    date('Y-m-d H:i:s', $enddate),
                    array(),
                    TRUE,
                    $todisplay);
            if (is_array($ret)) {
               $mydatat  = $ret[0];
               $a_labels = $ret[1];
               $a_ref    = $ret[2];

               $nb_val = count($a_labels);
               // May have 22 points in the graph
               $nb_val_period = $nb_val / 75;
               $mydatatNew = array();
               foreach ($mydatat as $name=>$data) {
                  $nb = 1;
                  $val = 0;
                  foreach ($data as $value) {
                     $val += $value;
                     $nb++;
                     if ($nb > $nb_val_period) {
                        $mydatatNew[$name][] = ceil($val / ($nb - 1));
                        $nb = 1;
                        $val = 0;
                     }
                  }
                  if ($nb > 1
                          && $nb <= $nb_val_period) {

                        $mydatatNew[$name][] = ceil($val / ($nb - 1));
                  }
               }
               $mydatat = $mydatatNew;

               $a_labelsNew = array();
               $nb = 1;
               $val = 0;
               foreach ($a_labels as $value) {
                  if ($nb == 1) {
                     $a_labelsNew[] = $value;
                  }
                  $nb++;
                  if ($nb > $nb_val_period) {
                     $nb = 1;
                  }
               }
               $a_labels = $a_labelsNew;
            }
            break;

         case '1y':
            $begin = date('Y-m-d H:i:s', date('U') - (365 * 24 * 3600));
            $dateformat = "%Y-%m-%d %H:%M";

            $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`
               WHERE `plugin_monitoring_services_id`='".$items_id."'
                  AND `date` > '".$begin."'
                  AND `date` <= '".date('Y-m-d H:i:s', $enddate)."'
               ORDER BY `date`";
            $result = $DB->query($query);
            $ret = $pmServiceevent->getData(
                    $result,
                    $rrdtool_template,
                    $begin,
                    date('Y-m-d H:i:s', $enddate),
                    array(),
                    TRUE,
                    $todisplay);
            if (is_array($ret)) {
               $mydatat  = $ret[0];
               $a_labels = $ret[1];
               $a_ref    = $ret[2];

               $nb_val = count($a_labels);
               // May have 22 points in the graph
               $nb_val_period = $nb_val / 75;
               $mydatatNew = array();
               foreach ($mydatat as $name=>$data) {
                  $nb = 1;
                  $val = 0;
                  foreach ($data as $value) {
                     $val += $value;
                     $nb++;
                     if ($nb > $nb_val_period) {
                        $mydatatNew[$name][] = ceil($val / ($nb - 1));
                        $nb = 1;
                        $val = 0;
                     }
                  }
                  if ($nb > 1
                          && $nb <= $nb_val_period) {

                        $mydatatNew[$name][] = ceil($val / ($nb - 1));
                  }
               }
               $mydatat = $mydatatNew;

               $a_labelsNew = array();
               $nb = 1;
               $val = 0;
               foreach ($a_labels as $value) {
                  if ($nb == 1) {
                     $a_labelsNew[] = $value;
                  }
                  $nb++;
                  if ($nb > $nb_val_period) {
                     $nb = 1;
                  }
               }
               $a_labels = $a_labelsNew;
            }
            break;
      }
      return array($mydatat, $a_labels, $dateformat);
   }
 function sendDowntime($host_id = -1, $service_id = -1, $author = '', $comment = '', $flexible = '0', $start_time = '0', $end_time = '0', $duration = '3600', $operation = '')
 {
     global $DB;
     if ($host_id == -1 && $service_id == -1) {
         return false;
     }
     $pmTag = new PluginMonitoringTag();
     $pmService = new PluginMonitoringService();
     $pmService->getFromDB($service_id);
     $service_description = $pmService->getName(array('shinken' => '1'));
     $pmHost = new PluginMonitoringHost();
     $pmHost->getFromDB($host_id == -1 ? $pmService->getHostID() : $host_id);
     $hostname = $pmHost->getName(true);
     // Downtime an host ...
     $acknowledgeServiceOnly = true;
     $a_fields = array();
     if ($host_id == -1) {
         $tag = PluginMonitoringEntity::getTagByEntities($pmService->getEntityID());
     } else {
         // ... one service of the host.
         $tag = PluginMonitoringEntity::getTagByEntities($pmHost->getEntityID());
     }
     $ip = $pmTag->getIP($tag);
     $auth = $pmTag->getAuth($tag);
     $port = $pmTag->getPort($tag);
     $url = 'http://' . $ip . ':' . $port . '/';
     $action = 'downtime';
     $a_fields = array('action' => empty($operation) ? 'add' : $operation, 'host_name' => $hostname, 'service_description' => $service_description, 'author' => $author, 'comment' => mb_convert_encoding($comment, "iso-8859-1"), 'flexible' => $flexible, 'start_time' => PluginMonitoringServiceevent::convert_datetime_timestamp($start_time), 'end_time' => PluginMonitoringServiceevent::convert_datetime_timestamp($end_time), 'trigger_id' => '0', 'duration' => $duration);
     // Send downtime command ...
     return $this->sendCommand($url, $action, $a_fields, '', $auth);
 }
 function type_other($type = 'average')
 {
     global $DB;
     $pmService = new PluginMonitoringService();
     $pmServiceevent = new PluginMonitoringServiceevent();
     $pmComponent = new PluginMonitoringComponent();
     $pmPerfdataDetail = new PluginMonitoringPerfdataDetail();
     $a_date = PluginMonitoringCustomitem_Common::getTimeRange($this->fields);
     $val = 0;
     $a_val = array();
     $nb_val = 0;
     $a_tocheck = array('warn' => 0, 'crit' => 0, 'limit' => 0);
     $a_types = array('warn', 'crit', 'limit');
     for ($i = 0; $i < count($a_types); $i++) {
         if (is_numeric($this->fields['aggregate_' . $a_types[$i]])) {
             $a_ret[$a_types[$i]] = $this->fields['aggregate_' . $a_types[$i]];
         } else {
             $a_ret[$a_types[$i]] = 0;
             $a_tocheck[$a_types[$i]] = 1;
         }
     }
     $items = importArrayFromDB($this->fields['aggregate_items']);
     foreach ($items as $itemtype => $data) {
         switch ($itemtype) {
             case 'PluginMonitoringService':
                 foreach ($data as $items_id => $data2) {
                     $pmService->getFromDB($items_id);
                     $_SESSION['plugin_monitoring_checkinterval'] = PluginMonitoringComponent::getTimeBetween2Checks($pmService->fields['plugin_monitoring_components_id']);
                     $pmComponent->getFromDB($pmService->fields['plugin_monitoring_components_id']);
                     $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n                     WHERE `plugin_monitoring_services_id`='" . $items_id . "'\n                        AND `date` >= '" . $a_date['begin'] . "'\n                     ORDER BY `date`";
                     $result = $DB->query($query);
                     $ret = $pmServiceevent->getData($result, $pmComponent->fields['graph_template'], $a_date['begin'], $a_date['end']);
                     foreach ($data2 as $a_perfdatadetails) {
                         $pmPerfdataDetail->getFromDB($a_perfdatadetails['perfdatadetails_id']);
                         $nb_val += count($ret[0][$pmPerfdataDetail->fields['dsname' . $a_perfdatadetails['perfdatadetails_dsname']]]);
                         $val += array_sum($ret[0][$pmPerfdataDetail->fields['dsname' . $a_perfdatadetails['perfdatadetails_dsname']]]);
                         $a_val = array_merge($a_val, $ret[0][$pmPerfdataDetail->fields['dsname' . $a_perfdatadetails['perfdatadetails_dsname']]]);
                     }
                     // for manage warn, crit and limit
                     foreach ($a_tocheck as $other_type => $num_type) {
                         if ($num_type == 1) {
                             $other_items = importArrayFromDB($this->fields['aggregate_' . $other_type]);
                             foreach ($other_items[$itemtype][$items_id] as $a_perfdatadetails) {
                                 $pmPerfdataDetail->getFromDB($a_perfdatadetails['perfdatadetails_id']);
                                 $a_ret[$other_type] += array_sum($ret[0][$pmPerfdataDetail->fields['dsname' . $a_perfdatadetails['perfdatadetails_dsname']]]);
                             }
                         }
                     }
                 }
                 break;
             case 'PluginMonitoringComponentscatalog':
                 $pmComponentscatalog = new PluginMonitoringComponentscatalog();
                 foreach ($data as $items_id => $data2) {
                     $ret = $pmComponentscatalog->getInfoOfCatalog(str_replace('id', '', $items_id));
                     $a_hosts = $ret[6];
                     foreach ($data2['PluginMonitoringComponent'] as $items_id_components => $data4) {
                         $query = "SELECT * FROM `glpi_plugin_monitoring_services`\n                        WHERE `plugin_monitoring_components_id`='" . str_replace('id', '', $items_id_components) . "'\n                           AND `plugin_monitoring_componentscatalogs_hosts_id` IN\n                              ('" . implode("','", $a_hosts) . "')\n                           AND `entities_id` IN (" . $_SESSION['glpiactiveentities_string'] . ")";
                         $result = $DB->query($query);
                         while ($dataq = $DB->fetch_array($result)) {
                             $pmService->getFromDB($dataq['id']);
                             $_SESSION['plugin_monitoring_checkinterval'] = PluginMonitoringComponent::getTimeBetween2Checks($pmService->fields['plugin_monitoring_components_id']);
                             $pmComponent->getFromDB($dataq['plugin_monitoring_components_id']);
                             $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n                           WHERE `plugin_monitoring_services_id`='" . $dataq['id'] . "'\n                              AND `date` >= '" . $a_date['begin'] . "'\n                           ORDER BY `date`";
                             $result = $DB->query($query);
                             $ret = $pmServiceevent->getData($result, $pmComponent->fields['graph_template'], $a_date['begin'], $a_date['end']);
                             foreach ($data4 as $a_perfdatadetails) {
                                 $pmPerfdataDetail->getFromDB($a_perfdatadetails['perfdatadetails_id']);
                                 $nb_val += count($ret[0][$pmPerfdataDetail->fields['dsname' . $a_perfdatadetails['perfdatadetails_dsname']]]);
                                 $val += array_sum($ret[0][$pmPerfdataDetail->fields['dsname' . $a_perfdatadetails['perfdatadetails_dsname']]]);
                                 $a_val = array_merge($a_val, $ret[0][$pmPerfdataDetail->fields['dsname' . $a_perfdatadetails['perfdatadetails_dsname']]]);
                             }
                             // for manage warn, crit and limit
                             foreach ($a_tocheck as $other_type => $num_type) {
                                 if ($num_type == 1) {
                                     $other_items = importArrayFromDB($this->fields['aggregate_' . $other_type]);
                                     foreach ($other_items[$itemtype][$items_id]['PluginMonitoringComponent'][$items_id_components] as $a_perfdatadetails) {
                                         $pmPerfdataDetail->getFromDB($a_perfdatadetails['perfdatadetails_id']);
                                         $a_ret[$other_type] += array_sum($ret[0][$pmPerfdataDetail->fields['dsname' . $a_perfdatadetails['perfdatadetails_dsname']]]);
                                     }
                                 }
                             }
                         }
                     }
                 }
                 break;
         }
     }
     if ($nb_val != 0) {
         if ($type == 'average') {
             $val = $val / $nb_val;
         } else {
             if ($type == 'median') {
                 sort($a_val);
                 $count = count($a_val);
                 //total numbers in array
                 $middleval = floor(($count - 1) / 2);
                 // find the middle value, or the lowest middle value
                 if ($count % 2) {
                     // odd number, middle is the median
                     $median = $a_val[$middleval];
                 } else {
                     // even number, calculate avg of 2 medians
                     $low = $arr[$middleval];
                     $high = $arr[$middleval + 1];
                     $median = ($low + $high) / 2;
                 }
                 $val = $median;
             }
         }
     }
     foreach ($a_tocheck as $other_type => $num_type) {
         if ($num_type == 1) {
             $a_ret[$other_type] = $a_ret[$other_type] / $nb_val;
         }
     }
     $a_ret['val'] = $val;
     return $a_ret;
 }
   function generateSyntheseReport($array, $pdf=TRUE) {
      global $DB;

      if (count($array) == 0) {
         return;
      }
      $end_date = $array['synthesedate_end'];
      $end_date_timestamp = strtotime($end_date);
      $number   = $array['synthesenumber'];
      $period   = $array['syntheseperiod'];

      $componentscatalogs_id = $array['componentscatalogs_id'];

      $pmComponent    = new PluginMonitoringComponent();
      $pmUnavailability = new PluginMonitoringUnavailability();
      $pmServiceevent = new PluginMonitoringServiceevent();

      if ($pdf) {
         PluginMonitoringReport::beginCapture();
      }
      echo "<table class='tab_cadrehov'>";
      foreach ($array['components_id'] as $components_id) {
         $pmComponent->getFromDB($components_id);
         array_unshift($array['perfname'][$components_id], 'avaibility');
         array_unshift($array['perfname_val'][$components_id], 1);
         echo '<tr class="tab_bg_1" height="90">';
         echo '<th colspan="'.(3 + ($number * 2)).'">';
         echo $pmComponent->getName();
         echo '</th>';
         echo '</tr>';

         foreach ($array['perfname'][$components_id] as $num=>$groupname) {
            echo '<tr class="tab_bg_1">';
            echo '<th colspan="'.(3 + ($number * 2)).'">';
            if ($groupname == 'avaibility') {
               echo __('Avaibility', 'monitoring');
            } else {
               echo $groupname;
            }
            echo '</th>';
            echo '</tr>';

            echo '<tr class="tab_bg_1">';
            echo '<th rowspan="2">';
            echo __('Name');
            echo '</th>';
            echo '<th rowspan="2">';
            echo __('Entity');
            echo '</th>';
            echo '<th rowspan="2">';
            echo __('Itemtype');
            echo '</th>';
            $a_year = array();
            for ($i = $number; $i >= 1;$i--) {
               $year = date('Y', strtotime("-".$i." ".$period, $end_date_timestamp));
               if (!isset($a_year[$year])) {
                  $a_year[$year] = 2;
               } else {
                  $a_year[$year] += 2;
               }
            }
            foreach ($a_year as $year=>$colspan) {
               echo '<th colspan="'.$colspan.'">';
               echo $year;
               echo '</th>';
            }
            echo '</tr>';

            echo '<tr class="tab_bg_1">';
            for ($i = $number; $i >= 1;$i--) {
               echo '<th colspan="2">';
               echo Html::convDate(date('m-d', strtotime("-".$i." ".$period, $end_date_timestamp)));
               echo "<br/>";
               echo Html::convDate(date('m-d', strtotime("-".($i-1)." ".$period, $end_date_timestamp)));
               echo '</th>';
            }
            echo '</tr>';

            $query = "SELECT `glpi_plugin_monitoring_componentscatalogs_hosts`.*,
                  `glpi_plugin_monitoring_services`.`id` as sid FROM `glpi_plugin_monitoring_componentscatalogs_hosts`
               LEFT JOIN `glpi_plugin_monitoring_services`
                  ON `glpi_plugin_monitoring_componentscatalogs_hosts`.`id`=`plugin_monitoring_componentscatalogs_hosts_id`
               WHERE `plugin_monitoring_componentscalalog_id`='".$componentscatalogs_id."'
                  AND `plugin_monitoring_components_id`='".$components_id."'";
            $result = $DB->query($query);
            $rownb = true;
            while ($data=$DB->fetch_array($result)) {
               $itemtype = $data['itemtype'];
               $item = new $itemtype();
               $item->getFromDB($data['items_id']);

               if ($groupname == 'avaibility') {
                  $a_times = $pmUnavailability->parseEvents($data['id'], '',
                                                          date('Y-m-d', strtotime("-".($number + 1)." ".$period, $end_date_timestamp)),
                                                          date('Y-m-d', strtotime("-".$number." ".$period, $end_date_timestamp)));
                  $previous_value = round(((($a_times[1] - $a_times[0]) / $a_times[1]) * 100), 3);
               } else {
                  $previous_value = 0;
               }
               echo '<tr class="tab_bg'.(($rownb = !$rownb)?'_4':'_1').'">';
               echo '<td>';
               echo $item->getLink();
               echo '</td>';
               echo '<td>';
               echo Dropdown::getDropdownName("glpi_entities", $item->fields['entities_id']);
               echo '</td>';
               echo '<td>';
               echo $item->getTypeName();
               echo '</td>';
               for ($i = $number; $i >= 1;$i--) {
                  $startdatet = date('Y-m-d', strtotime("-".$i." ".$period, $end_date_timestamp));
                  $enddatet   = date('Y-m-d', strtotime("-".($i-1)." ".$period, $end_date_timestamp));
                  if ($groupname == 'avaibility') {
                     $a_times = $pmUnavailability->parseEvents($data['id'], '', $startdatet, $enddatet);
                     $value = round(((($a_times[1] - $a_times[0]) / $a_times[1]) * 100), 2);
                  } else {
                     $queryevents = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`
                        WHERE `plugin_monitoring_services_id`='".$data['sid']."'
                           AND `date` >= '".$startdatet."'
                           AND `date` <= '".$enddatet."'
                        ORDER BY `date`";
                     $resultevents = $DB->query($queryevents);
                     $_SESSION['plugin_monitoring_checkinterval'] = PluginMonitoringComponent::getTimeBetween2Checks($pmComponent->fields['id']);
                     $ret = $pmServiceevent->getData($resultevents, $pmComponent->fields['graph_template'], $startdatet, $enddatet);
                     if (!isset($ret[0][$groupname])) {
                        $value = 0;
                     } else {
                        $value = round(array_sum($ret[0][$groupname]) / count($ret[0][$groupname]), 2);
                     }
                  }

                  $bgcolor = '';
                  if ($array['perfname_val'][$components_id][$num] == 1) {
                     if ($previous_value < $value) {
                        $bgcolor = 'style="background-color:#d1ffc3"';
                     } else if ($previous_value > $value) {
                        $bgcolor = 'style="background-color:#ffd1d3"';
                     }
                  } else {
                     if ($previous_value < $value) {
                        $bgcolor = 'style="background-color:#ffd1d3"';
                     } else if ($previous_value > $value) {
                        $bgcolor = 'style="background-color:#d1ffc3"';
                     }
                  }

                  echo '<td '.$bgcolor.'>';
                  if ($groupname == 'avaibility') {
                     echo $value."%";
                  } else {
                     if ($value > 3000000000) {
                        echo round($value/1000000000, 2).'T';
                     } else if ($value > 3000000) {
                        echo round($value/1000000, 2).'M';
                     } else if ($value > 3000) {
                        echo round($value/1000, 2).'K';
                     } else {
                        echo $value;
                     }
                  }
                  echo '</td>';
                  echo '<td '.$bgcolor.'>';
                  if ($array['perfname_val'][$components_id][$num] == 1) {
                     if ($previous_value < $value) {
                        echo '<img src="../pics/arrow-up-right.png" width="16" />';
                     } else if ($previous_value == $value) {
                        echo '<img src="../pics/arrow-right.png" width="16" />';
                     } else if ($previous_value > $value) {
                        echo '<img src="../pics/arrow-down-right.png" width="16" />';
                     }
                  } else {
                     if ($previous_value < $value) {
                        echo '<img src="../pics/arrow-up-right_inv.png" width="16" />';
                     } else if ($previous_value == $value) {
                        echo '<img src="../pics/arrow-right.png" width="16" />';
                     } else if ($previous_value > $value) {
                        echo '<img src="../pics/arrow-down-right_inv.png" width="16" />';
                     }
                  }
                  $previous_value = $value;
                  echo '</td>';
               }
               echo "</tr>";

            }
         }
         echo '<tr class="tab_bg_1" height="50">';
         echo '<td colspan="'.(3 + ($number * 2)).'">';
         echo '</td>';
         echo '</tr>';
      }
      echo "</table>";
      if ($pdf) {
         $content = PluginMonitoringReport::endCapture();
         PluginMonitoringReport::generatePDF($content, 'L');
      }
   }
 function parseToDB($plugin_monitoring_services_id)
 {
     global $DB;
     $pmService = new PluginMonitoringService();
     $pmComponent = new PluginMonitoringComponent();
     if ($pmService->getFromDB($plugin_monitoring_services_id)) {
         $pmComponent->getFromDB($pmService->fields['plugin_monitoring_components_id']);
         if (!isset($pmComponent->fields['plugin_monitoring_commands_id'])) {
             return;
         }
         if (is_null($pmComponent->fields['graph_template'])) {
             return;
         }
         $pmUnavaibility = new PluginMonitoringUnavaibility();
         $pmUnavaibility->runUnavaibility($plugin_monitoring_services_id);
         $a_dateold = array();
         // *** 1 day (x 30 min)
         $dateold = date('Y-m-d H:i:s', mktime(date('H'), date('i'), date('s'), date('m'), date('d') - 1, date('Y')));
         $a_dateold['30m'] = $dateold;
         // Gest last value, and see if we must calculate new values
         $query = "SELECT * FROM `" . $this->getTable() . "`\n               WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                  AND `type`='30m'\n               ORDER BY `date` DESC\n               LIMIT 1";
         $result = $DB->query($query);
         $lastdate = $dateold;
         $new_date = '';
         if ($DB->numrows($result) == '1') {
             $data = $DB->fetch_assoc($result);
             $new_date = PluginMonitoringServiceevent::convert_datetime_timestamp($data['date']);
             $new_date += 30 * 60;
         } else {
             $split = explode(" ", $lastdate);
             $a_time = explode(":", $split[1]);
             $a_date = explode("-", $split[0]);
             $new_date = date('U', mktime($a_time[0], '0', '0', $a_date[1], $a_date[2], $a_date[0]));
         }
         //get data in serviceevents for each 30 minutes from this date to now
         while ($new_date + 15 * 60 < date('U')) {
             $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n                  WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                     AND `date` >= '" . date('Y-m-d H:i:m', $new_date - 15 * 60) . "'\n                     AND`date` <= '" . date('Y-m-d H:i:m', $new_date + 15 * 60) . "'\n                  ORDER BY `date`";
             $result = $DB->query($query);
             // get data
             $mydatat = array();
             $pmServiceevent = new PluginMonitoringServiceevent();
             $pmService = new PluginMonitoringService();
             $ret = $pmServiceevent->getData($result, $pmComponent->fields['graph_template']);
             if (is_array($ret)) {
                 $mydatat = $ret[0];
             }
             $array_data = array();
             foreach ($mydatat as $name => $a_values) {
                 $valfloat = array_sum($a_values) / count($a_values);
                 if ($valfloat > 2) {
                     $array_data[$name] = round($valfloat);
                 } else {
                     $array_data[$name] = round($valfloat, 2);
                 }
             }
             $input = array();
             $input['plugin_monitoring_services_id'] = $plugin_monitoring_services_id;
             $input['date'] = date('Y-m-d H:i:s', $new_date);
             $input['data'] = exportArrayToDB($array_data);
             $input['type'] = '30m';
             $this->add($input);
             $new_date = $new_date + 30 * 60;
         }
         // *** 1w (x 6 hours)
         $dateold = date('Y-m-d H:i:s', date('U') - 7 * 24 * 3600);
         $a_dateold['6h'] = $dateold;
         // Gest last value, and see if we must calculate new values
         $query = "SELECT * FROM `" . $this->getTable() . "`\n               WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                  AND `type`='6h'\n               ORDER BY `date` DESC\n               LIMIT 1";
         $result = $DB->query($query);
         $lastdate = $dateold;
         $new_date = '';
         if ($DB->numrows($result) == '1') {
             $data = $DB->fetch_assoc($result);
             $new_date = PluginMonitoringServiceevent::convert_datetime_timestamp($data['date']);
             $new_date += 6 * 3600;
         } else {
             $split = explode(" ", $lastdate);
             $a_time = explode(":", $split[1]);
             $a_date = explode("-", $split[0]);
             $hour = '0';
             $addtime = 0;
             if ($a_time[0] > 18) {
                 $hour = 0;
                 $addtime = 24 * 3600;
             } else {
                 if ($a_time[0] > 12) {
                     $hour = 18;
                 } else {
                     if ($a_time[0] > 6) {
                         $hour = 12;
                     } else {
                         $hour = 6;
                     }
                 }
             }
             $new_date = date('U', mktime($hour, '0', '0', $a_date[1], $a_date[2], $a_date[0])) + $addtime;
         }
         //get data in serviceevents for each 6 hours from this date to now
         while ($new_date + 3 * 3600 < date('U')) {
             $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n                  WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                     AND `date` >= '" . date('Y-m-d H:i:m', $new_date - 3 * 3600) . "'\n                     AND`date` <= '" . date('Y-m-d H:i:m', $new_date + 3 * 3600) . "'\n                  ORDER BY `date`";
             $result = $DB->query($query);
             // get data
             $mydatat = array();
             $pmServiceevent = new PluginMonitoringServiceevent();
             $pmService = new PluginMonitoringService();
             $ret = $pmServiceevent->getData($result, $pmComponent->fields['graph_template']);
             if (is_array($ret)) {
                 $mydatat = $ret[0];
             }
             $array_data = array();
             foreach ($mydatat as $name => $a_values) {
                 $valfloat = array_sum($a_values) / count($a_values);
                 if ($valfloat > 2) {
                     $array_data[$name] = round($valfloat);
                 } else {
                     $array_data[$name] = round($valfloat, 2);
                 }
             }
             $input = array();
             $input['plugin_monitoring_services_id'] = $plugin_monitoring_services_id;
             $input['date'] = date('Y-m-d H:i:s', $new_date);
             $input['data'] = exportArrayToDB($array_data);
             $input['type'] = '6h';
             $this->add($input);
             $new_date = $new_date + 6 * 3600;
         }
         // *** 1m (x 1 day)
         $dateold = date('Y-m-d H:i:s', mktime(date('H'), date('i'), date('s'), date('m') - 1, date('d'), date('Y')));
         //            $a_dateold['1d'] = $dateold; //NOTE to keep data for each day (if we want use it in future)
         // Gest last value, and see if we must calculate new values
         $query = "SELECT * FROM `" . $this->getTable() . "`\n               WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                  AND `type`='1d'\n               ORDER BY `date` DESC\n               LIMIT 1";
         $result = $DB->query($query);
         $lastdate = $dateold;
         $new_date = '';
         if ($DB->numrows($result) == '1') {
             $data = $DB->fetch_assoc($result);
             $new_date = PluginMonitoringServiceevent::convert_datetime_timestamp($data['date']);
             $new_date += 24 * 3600;
         } else {
             $split = explode(" ", $lastdate);
             $a_date = explode("-", $split[0]);
             $new_date = date('U', mktime('0', '0', '0', $a_date[1], $a_date[2], $a_date[0]));
         }
         //get data in serviceevents for each 6 hours from this date to now
         while ($new_date + 12 * 3600 < date('U')) {
             $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n                  WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                     AND `date` >= '" . date('Y-m-d H:i:m', $new_date - 12 * 3600) . "'\n                     AND`date` <= '" . date('Y-m-d H:i:m', $new_date + 12 * 3600) . "'\n                  ORDER BY `date`";
             $result = $DB->query($query);
             // get data
             $mydatat = array();
             $pmServiceevent = new PluginMonitoringServiceevent();
             $pmService = new PluginMonitoringService();
             $ret = $pmServiceevent->getData($result, $pmComponent->fields['graph_template']);
             if (is_array($ret)) {
                 $mydatat = $ret[0];
             }
             $array_data = array();
             foreach ($mydatat as $name => $a_values) {
                 $valfloat = array_sum($a_values) / count($a_values);
                 if ($valfloat > 2) {
                     $array_data[$name] = round($valfloat);
                 } else {
                     $array_data[$name] = round($valfloat, 2);
                 }
             }
             $input = array();
             $input['plugin_monitoring_services_id'] = $plugin_monitoring_services_id;
             $input['date'] = date('Y-m-d H:i:s', $new_date);
             $input['data'] = exportArrayToDB($array_data);
             $input['type'] = '1d';
             $this->add($input);
             $new_date = $new_date + 24 * 3600;
         }
         // *** 6m (x 5 days)
         $dateold = date('Y-m-d H:i:s', mktime(date('H'), date('i'), date('s'), date('m') - 6, date('d'), date('Y')));
         $a_dateold['5d'] = $dateold;
         // Gest last value, and see if we must calculate new values
         $query = "SELECT * FROM `" . $this->getTable() . "`\n               WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                  AND `type`='5d'\n               ORDER BY `date` DESC\n               LIMIT 1";
         $result = $DB->query($query);
         $lastdate = $dateold;
         $new_date = '';
         if ($DB->numrows($result) == '1') {
             $data = $DB->fetch_assoc($result);
             $new_date = PluginMonitoringServiceevent::convert_datetime_timestamp($data['date']);
             $new_date += 5 * 24 * 3600;
         } else {
             $split = explode(" ", $lastdate);
             $a_date = explode("-", $split[0]);
             $new_date = date('U', mktime('0', '0', '0', $a_date[1], $a_date[2], $a_date[0]));
         }
         //get data in serviceevents for each 6 hours from this date to now
         while ($new_date + 5 * 24 * 3600 / 2 < date('U')) {
             $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n                  WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                     AND `date` >= '" . date('Y-m-d H:i:m', $new_date - 5 * 24 * 3600 / 2) . "'\n                     AND`date` <= '" . date('Y-m-d H:i:m', $new_date + 5 * 24 * 3600 / 2) . "'\n                  ORDER BY `date`";
             $result = $DB->query($query);
             // get data
             $mydatat = array();
             $pmServiceevent = new PluginMonitoringServiceevent();
             $pmService = new PluginMonitoringService();
             $ret = $pmServiceevent->getData($result, $pmComponent->fields['graph_template']);
             if (is_array($ret)) {
                 $mydatat = $ret[0];
             }
             $array_data = array();
             foreach ($mydatat as $name => $a_values) {
                 $valfloat = array_sum($a_values) / count($a_values);
                 if ($valfloat > 2) {
                     $array_data[$name] = round($valfloat);
                 } else {
                     $array_data[$name] = round($valfloat, 2);
                 }
             }
             $input = array();
             $input['plugin_monitoring_services_id'] = $plugin_monitoring_services_id;
             $input['date'] = date('Y-m-d H:i:s', $new_date);
             $input['data'] = exportArrayToDB($array_data);
             $input['type'] = '5d';
             $this->add($input);
             $new_date = $new_date + 5 * 24 * 3600;
         }
         // *** 1y (x 10 days)
         $dateold = date('Y-m-d H:i:s', mktime(date('H'), date('i'), date('s'), date('m') - 10, date('d'), date('Y')));
         $a_dateold['5d'] = $dateold;
         // Gest last value, and see if we must calculate new values
         $query = "SELECT * FROM `" . $this->getTable() . "`\n               WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                  AND `type`='10d'\n               ORDER BY `date` DESC\n               LIMIT 1";
         $result = $DB->query($query);
         $lastdate = $dateold;
         $new_date = '';
         if ($DB->numrows($result) == '1') {
             $data = $DB->fetch_assoc($result);
             $new_date = PluginMonitoringServiceevent::convert_datetime_timestamp($data['date']);
             $new_date += 10 * 24 * 3600;
         } else {
             $split = explode(" ", $lastdate);
             $a_date = explode("-", $split[0]);
             $new_date = date('U', mktime('0', '0', '0', $a_date[1], $a_date[2], $a_date[0]));
         }
         //get data in serviceevents for each 6 hours from this date to now
         while ($new_date + 5 * 24 * 3600 < date('U')) {
             $query = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n                  WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                     AND `date` >= '" . date('Y-m-d H:i:m', $new_date - 5 * 24 * 3600) . "'\n                     AND`date` <= '" . date('Y-m-d H:i:m', $new_date + 5 * 24 * 3600) . "'\n                  ORDER BY `date`";
             $result = $DB->query($query);
             // get data
             $mydatat = array();
             $pmServiceevent = new PluginMonitoringServiceevent();
             $pmService = new PluginMonitoringService();
             $ret = $pmServiceevent->getData($result, $pmComponent->fields['graph_template']);
             if (is_array($ret)) {
                 $mydatat = $ret[0];
             }
             $array_data = array();
             foreach ($mydatat as $name => $a_values) {
                 $valfloat = array_sum($a_values) / count($a_values);
                 if ($valfloat > 2) {
                     $array_data[$name] = round($valfloat);
                 } else {
                     $array_data[$name] = round($valfloat, 2);
                 }
             }
             $input = array();
             $input['plugin_monitoring_services_id'] = $plugin_monitoring_services_id;
             $input['date'] = date('Y-m-d H:i:s', $new_date);
             $input['data'] = exportArrayToDB($array_data);
             $input['type'] = '10d';
             $this->add($input);
             $new_date = $new_date + 10 * 24 * 3600;
         }
         // *** Delete old values
         foreach ($a_dateold as $name => $date) {
             $query = "DELETE FROM `" . $this->getTable() . "`\n               WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                  AND `type`='" . $name . "'\n                  AND `date` < '" . $date . "'";
             $result = $DB->query($query);
         }
     }
 }
 function generateSyntheseReport($array)
 {
     global $DB;
     $end_date = $array[$array['reporttype'] . 'date_end'];
     $end_date_timestamp = strtotime($end_date);
     $number = $array[$array['reporttype'] . 'number'];
     $period = $array[$array['reporttype'] . 'period'];
     $componentscatalogs_id = $array['componentscatalogs_id'];
     $pmComponent = new PluginMonitoringComponent();
     $pmUnavaibility = new PluginMonitoringUnavaibility();
     $pmServiceevent = new PluginMonitoringServiceevent();
     PluginMonitoringReport::beginCapture();
     $a_groups = array("avaibility");
     foreach ($array['perfname'] as $perfname) {
         $a_groups[] = $perfname;
     }
     $a_groups = array_unique($a_groups);
     foreach ($a_groups as $groupname) {
         foreach ($array['components_id'] as $components_id) {
             $pmComponent->getFromDB($components_id);
             echo "<table class='tab_cadre_fixe'>";
             echo '<tr class="tab_bg_1">';
             echo '<th colspan="' . (3 + $number * 2) . '">';
             echo $pmComponent->getName() . " / ";
             if ($groupname == 'avaibility') {
                 echo __('Avaibility', 'monitoring');
             } else {
                 echo $groupname;
             }
             echo '</th>';
             echo '</tr>';
             echo '<tr class="tab_bg_1">';
             echo '<th>';
             echo __('Name');
             echo '</th>';
             echo '<th>';
             echo __('Entity');
             echo '</th>';
             echo '<th>';
             echo __('Itemtype');
             echo '</th>';
             for ($i = $number; $i >= 1; $i--) {
                 echo '<th colspan="2">';
                 echo Html::convDate(date('Y-m-d', strtotime("-" . $i . " " . $period, $end_date_timestamp)));
                 echo "<br/>";
                 echo Html::convDate(date('Y-m-d', strtotime("-" . ($i - 1) . " " . $period, $end_date_timestamp)));
                 echo '</th>';
             }
             echo '</tr>';
             $query = "SELECT `glpi_plugin_monitoring_componentscatalogs_hosts`.*, \n                  `glpi_plugin_monitoring_services`.`id` as sid FROM `glpi_plugin_monitoring_componentscatalogs_hosts`\n               LEFT JOIN `glpi_plugin_monitoring_services`\n                  ON `glpi_plugin_monitoring_componentscatalogs_hosts`.`id`=`plugin_monitoring_componentscatalogs_hosts_id`\n               WHERE `plugin_monitoring_componentscalalog_id`='" . $componentscatalogs_id . "'\n                  AND `plugin_monitoring_components_id`='" . $components_id . "'";
             $result = $DB->query($query);
             $rownb = true;
             while ($data = $DB->fetch_array($result)) {
                 $itemtype = $data['itemtype'];
                 $item = new $itemtype();
                 $item->getFromDB($data['items_id']);
                 if ($groupname == 'avaibility') {
                     $a_times = $pmUnavaibility->parseEvents($data['id'], '', date('Y-m-d', strtotime("-" . ($number + 1) . " " . $period, $end_date_timestamp)), date('Y-m-d', strtotime("-" . $number . " " . $period, $end_date_timestamp)));
                     $previous_value = round(($a_times[1] - $a_times[0]) / $a_times[1] * 100, 3);
                 } else {
                     $previous_value = 0;
                 }
                 echo '<tr class="tab_bg_1' . (($rownb = !$rownb) ? '_2' : '') . '">';
                 echo '<td>';
                 echo $item->getName();
                 echo '</td>';
                 echo '<td>';
                 echo Dropdown::getDropdownName("glpi_entities", $item->fields['entities_id']);
                 echo '</td>';
                 echo '<td>';
                 echo $item->getTypeName();
                 echo '</td>';
                 for ($i = $number; $i >= 1; $i--) {
                     echo '<td>';
                     $startdatet = date('Y-m-d', strtotime("-" . $i . " " . $period, $end_date_timestamp));
                     $enddatet = date('Y-m-d', strtotime("-" . ($i - 1) . " " . $period, $end_date_timestamp));
                     if ($groupname == 'avaibility') {
                         $a_times = $pmUnavaibility->parseEvents($data['id'], '', $startdatet, $enddatet);
                         $value = round(($a_times[1] - $a_times[0]) / $a_times[1] * 100, 3);
                         echo $value . "%";
                     } else {
                         $queryevents = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n                        WHERE `plugin_monitoring_services_id`='" . $data['sid'] . "'\n                           AND `date` >= '" . $startdatet . "'\n                           AND `date` <= '" . $enddatet . "'\n                        ORDER BY `date`";
                         $resultevents = $DB->query($queryevents);
                         $ret = $pmServiceevent->getData($resultevents, $pmComponent->fields['graph_template']);
                         $value = round(array_sum($ret[0][$groupname]) / count($ret[0][$groupname]), 3);
                         echo $value;
                     }
                     echo '</td>';
                     echo '<td>';
                     if ($previous_value < $value) {
                         echo '<img src="../pics/arrow-up-right.png" width="16" />';
                     } else {
                         if ($previous_value == $value) {
                             echo '<img src="../pics/arrow-right.png" width="16" />';
                         } else {
                             if ($previous_value > $value) {
                                 echo '<img src="../pics/arrow-down-right.png" width="16" />';
                             }
                         }
                     }
                     $previous_value = $value;
                     echo '</td>';
                 }
                 echo "</tr>";
             }
             echo "</table>";
         }
         echo "<br/><br/>";
     }
     $content = PluginMonitoringReport::endCapture();
     PluginMonitoringReport::generatePDF($content, 'L');
 }
// Direct access to file
if (strpos($_SERVER['PHP_SELF'], "updatePerfdata.php")) {
    include "../../../inc/includes.php";
    header("Content-Type: text/html; charset=UTF-8");
    Html::header_nocache();
}
session_write_close();
if (!defined('GLPI_ROOT')) {
    die("Can not acces directly to this file");
}
Session::checkLoginUser();
// Get component graph configuration ...
if (!isset($_SESSION['glpi_plugin_monitoring']['perfname'][$_POST['components_id']])) {
    PluginMonitoringToolbox::loadPreferences($_POST['components_id']);
}
$pmServiceevent = new PluginMonitoringServiceevent();
$counters = array();
$counter_types = array('first' => __('First value', 'monitoring'), 'last' => __('Last value', 'monitoring'));
$counter_operations = array('difference' => __('Difference', 'monitoring'));
foreach ($counter_types as $type => $type_title) {
    if (isset($_POST['debug'])) {
        echo "<pre>Type : {$type}</pre>";
    }
    $counters[$type] = array();
    $a_ret = $pmServiceevent->getSpecificData($_POST['rrdtool_template'], $_POST['items_id'], $type);
    if (isset($_POST['debug'])) {
        echo "<pre>" . print_r($a_ret) . "</pre>";
    }
    foreach ($a_ret as $counter) {
        if (isset($_POST['debug'])) {
            echo "<pre>" . print_r($a_ret) . "</pre>";