static function cronUnavaibility() { ini_set("max_execution_time", "0"); $pmUnavaibility = new PluginMonitoringUnavaibility(); $pmUnavaibility->runUnavaibility(); return true; }
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; }
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); } }