示例#1
0
 static function cronUnavaibility()
 {
     ini_set("max_execution_time", "0");
     $pmUnavaibility = new PluginMonitoringUnavaibility();
     $pmUnavaibility->runUnavaibility();
     return true;
 }
示例#2
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;
 }
示例#3
0
 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 parseToRrdtool($plugin_monitoring_services_id)
 {
     global $DB;
     $pmRrdtool = new PluginMonitoringRrdtool();
     $pmCommand = new PluginMonitoringCommand();
     $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;
         }
         $pmCommand->getFromDB($pmComponent->fields['plugin_monitoring_commands_id']);
         $pmUnavaibility = new PluginMonitoringUnavaibility();
         $pmUnavaibility->runUnavaibility($plugin_monitoring_services_id);
         $query = "SELECT * FROM `" . $this->getTable() . "`\n            WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n            ORDER BY `date`";
         $result = $DB->query($query);
         $i = 0;
         $nb_rows = $DB->numrows($result);
         $rrdtool_value = '';
         $last_date = '';
         while ($edata = $DB->fetch_array($result)) {
             $i++;
             if ($edata['unavailability'] == '0') {
                 if ($last_date != '') {
                     $pmRrdtool->addData($pmComponent->fields['graph_template'], $plugin_monitoring_services_id, 0, '', $rrdtool_value, 1);
                 }
                 break;
             }
             $perf_data = $edata['perf_data'];
             if ($edata['perf_data'] == '') {
                 $perf_data = $edata['output'];
             }
             if ($edata['unavailability'] != '2' and $i < $nb_rows) {
                 $rrdtool_value = $pmRrdtool->addData($pmComponent->fields['graph_template'], $plugin_monitoring_services_id, $this->convert_datetime_timestamp($edata['date']), $perf_data, $rrdtool_value, 0);
             }
             $last_date = $edata['date'];
             if ($i == $nb_rows) {
                 if ($edata['unavailability'] != '2') {
                     $input = array();
                     $input['id'] = $edata['id'];
                     $input['unavailability'] = 2;
                     $this->update($input);
                     $pmRrdtool->addData($pmComponent->fields['graph_template'], $plugin_monitoring_services_id, $this->convert_datetime_timestamp($edata['date']), $perf_data, $rrdtool_value, 1);
                     $queryd = "DELETE FROM `" . $this->getTable() . "`\n                     WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'\n                        AND `date`<'" . $edata['date'] . "'";
                     $DB->query($queryd);
                 }
             }
         }
         $a_list = array();
         $a_list[] = "2h";
         $a_list[] = "12h";
         $a_list[] = "1d";
         $a_list[] = "1w";
         $a_list[] = "1m";
         $a_list[] = "0y6m";
         $a_list[] = "1y";
         $pmConfig = new PluginMonitoringConfig();
         $pmConfig->getFromDB(1);
         $a_timezones = importArrayFromDB($pmConfig->fields['timezones']);
         foreach ($a_list as $time) {
             foreach ($a_timezones as $timezone) {
                 $pmRrdtool->displayGLPIGraph($pmComponent->fields['graph_template'], "PluginMonitoringService", $plugin_monitoring_services_id, $timezone, $time);
             }
         }
     } else {
         $query = "DELETE FROM `" . $this->getTable() . "`\n            WHERE `plugin_monitoring_services_id`='" . $plugin_monitoring_services_id . "'";
         $DB->query($query);
     }
 }