Fixed checks in availability reports TICKETS #3449

This commit is contained in:
fermin831 2016-03-30 14:55:57 +02:00
parent ccf7da77a9
commit fb8c15e8c0
2 changed files with 86 additions and 6 deletions

View File

@ -2240,4 +2240,82 @@ function modules_get_first_contact_date($id_agent_module) {
return $first_date;
}
/**
* Get the unknown time status of a module in a period.
* If there is more than 1 days between data, there is some unknown time modules
*
* @param int id_agent_module.
* @param int ending interval timestamp
* @param int interval duration
*
* @return int unknown seconds.
*/
function modules_get_unknown_time ($id_agent_module, $date, $period){
// TODO REMOVE THE TIME IN PLANNED DOWNTIME
if (empty($id_agent_module) || empty($date))
return false;
// Set initial conditions
$unknown_seconds = 0;
$datelimit = $date - $period;
$search_in_history_db = db_search_in_history_db($datelimit);
// Get interval data
$sql = sprintf ('SELECT utimestamp
FROM tagente_datos
WHERE id_agente_modulo = %d
AND utimestamp > %d AND utimestamp <= %d',
$id_agent_module, $datelimit, $date);
$sql .= ' ORDER BY utimestamp ASC';
$interval_data = db_get_all_rows_sql ($sql, $search_in_history_db);
$previous_data = modules_get_previous_data ($id_agent_module, $datelimit);
// All alternatives on first data
if ($previous_data === false && $interval_data === false) {
return false;
} else if($previous_data !== false && $interval_data === false) {
if (($date - $previous_data['utimestamp']) <= SECONDS_1DAY) {
return 0;
}
if (($previous_data['utimestamp'] + SECONDS_1DAY) >= $datelimit) {
return $date - ($previous_data['utimestamp'] + SECONDS_1DAY);
} else {
return $period;
}
} else if ($previous_data === false && $interval_data !== false) {
$first_data = array_shift ($interval_data);
$unknown_seconds += $first_data['utimestamp'] - $datelimit;
array_unshift ($interval_data, $first_data);
} else {
$first_data = array_shift ($interval_data);
if (($previous_data['utimestamp'] + SECONDS_1DAY) >= $first_data['utimestamp']) {
if (($previous_data['utimestamp'] + SECONDS_1DAY) >= $datelimit) {
$unknown_seconds += $previous_data['utimestamp'] + SECONDS_1DAY - $first_data['utimestamp'];
} else {
$unknown_seconds += $first_data['utimestamp'] - $datetime;
}
}
array_unshift ($interval_data, $first_data);
}
// Put utimestamp like last data
$last_data['utimestamp'] = $date;
array_push ($interval_data, $last_data);
$previous_data = array_shift ($previous_data);
// Check if all datas have data maximum one day before
foreach ($interval_data as $data) {
$previous_1day = $previous_data['utimestamp'] + SECONDS_1DAY;
if ($previous_1day >= $data['utimestamp']) {
$unknown_period += $previous_1day - $data['utimestamp'];
}
$previous_data = $data;
}
return $unknown_seconds;
}
?>

View File

@ -3844,11 +3844,11 @@ function reporting_availability($report, $content) {
$content['time_from'],
$content['time_to']);
$count_checks = modules_get_count_datas(
$item['id_agent_module'],
$report["datetime"] - $content['period'],
$report["datetime"]);
$item['interval_agent_module'] = modules_get_interval ($item['id_agent_module']);
$unknown_seconds = modules_get_unknown_time ($item['id_agent_module'], $report["datetime"], $content['period']);
if ($unknown_seconds !== false) {
$count_checks = (int)(($content['period'] - $unknown_seconds)/$item['interval_agent_module']);
}
if ($sla_value === false) {
$row['checks'] = __('Unknown');
@ -3872,11 +3872,13 @@ function reporting_availability($report, $content) {
$row['failed'] =
format_numeric($percent_fail * $count_checks / 100, 0);
$row['poling_time'] = "-";
if ($percent_ok > 0) {
$row['poling_time'] =
human_time_description_raw(
($percent_ok * $count_checks / 100) * modules_get_interval($item['id_agent_module']),
true);
}
$row['time_unavaliable'] = "-";
if ($percent_fail > 0) {