2012-01-31 Vanessa Gil <vanessa.gil@artica.es>

* include/functions_reporting: Modified SLA reports when
	downtime planned.


git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@5454 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
vgilc 2012-01-31 12:33:39 +00:00
parent f87cd81330
commit 6a82c5c0a9
2 changed files with 83 additions and 10 deletions

View File

@ -1,3 +1,8 @@
2012-01-31 Vanessa Gil <vanessa.gil@artica.es>
* include/functions_reporting: Modified SLA reports when
downtime planned.
2012-01-30 Juan Manuel Ramon <juanmanuel.ramon@artica.es>
* images/skin/skin_default/include/styles/pandora.css: Added grid

View File

@ -421,7 +421,6 @@ function reporting_get_agentmodule_sla ($id_agent_module, $period = 0, $min_valu
//Add the working times (mon - tue - wed ...) and from time to time
$days = array();
//Translate to mysql week days
if ($daysWeek) {
foreach ($daysWeek as $key => $value) {
if (!$value) {
@ -449,7 +448,7 @@ function reporting_get_agentmodule_sla ($id_agent_module, $period = 0, $min_valu
}
}
}
if (count($days) > 0) {
$sql .= ' AND DAYOFWEEK(FROM_UNIXTIME(utimestamp)) NOT IN (' . implode(',', $days) . ')';
}
@ -462,10 +461,33 @@ function reporting_get_agentmodule_sla ($id_agent_module, $period = 0, $min_valu
}
$sql .= ' ORDER BY utimestamp ASC';
$interval_data = db_get_all_rows_sql ($sql, true);
if ($interval_data === false) {
$interval_data = array ();
}
//calculate planned downtime dates
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $id_agent_module);
$sql_downtime = "SELECT id_downtime FROM tplanned_downtime_agents WHERE id_agent=$id_agent";
$downtimes = db_get_all_rows_sql($sql_downtime);
if ($downtimes == false) {
$downtimes = array();
}
$i = 0;
$downtime_dates = array();
foreach ($downtimes as $downtime) {
$id_downtime = $downtime['id_downtime'];
$sql_date = "SELECT date_from, date_to FROM tplanned_downtime WHERE id=$id_downtime";
$date_downtime = db_get_row_sql($sql_date);
if ($date_downtime != false) {
$downtime_dates[$i]['date_from'] = $date_downtime['date_from'];
$downtime_dates[$i]['date_to'] = $date_downtime['date_to'];
$i++;
}
}
/////
// Get previous data
$previous_data = modules_get_previous_data ($id_agent_module, $datelimit);
if ($previous_data !== false) {
@ -503,7 +525,12 @@ function reporting_get_agentmodule_sla ($id_agent_module, $period = 0, $min_valu
$previous_utimestamp = $first_data['utimestamp'];
if ((($max_value > $min_value AND ($first_data['datos'] > $max_value OR $first_data['datos'] < $min_value))) OR
($max_value <= $min_value AND $first_data['datos'] < $min_value)) {
$previous_status = 1;
$previous_status = 1;
foreach ($downtime_dates as $date_dt) {
if (($date_dt['date_from'] <= $previous_utimestamp) AND ($date_dt['date_to'] >= $previous_utimestamp)) {
$previous_status = 0;
}
}
} else {
$previous_status = 0;
}
@ -518,16 +545,21 @@ function reporting_get_agentmodule_sla ($id_agent_module, $period = 0, $min_valu
// Re-calculate previous status for the next data
if ((($max_value > $min_value AND ($data['datos'] > $max_value OR $data['datos'] < $min_value))) OR
($max_value <= $min_value AND $data['datos'] < $min_value)) {
$previous_status = 1;
}
else {
foreach ($downtime_dates as $date_dt) {
if (($date_dt['date_from'] <= $data['utimestamp']) AND ($date_dt['date_to'] >= $data['utimestamp'])) {
$previous_status = 0;
}
}
} else {
$previous_status = 0;
}
}
$previous_utimestamp = $data['utimestamp'];
}
// Return the percentage of SLA compliance
return (float) (100 - ($bad_period / $period) * 100);
}
@ -548,7 +580,7 @@ function reporting_get_agentmodule_sla ($id_agent_module, $period = 0, $min_valu
*/
function reporting_get_agentmodule_sla_array ($id_agent_module, $period = 0, $min_value = 1, $max_value = false, $date = 0, $daysWeek = null, $timeFrom = null, $timeTo = null) {
global $config;
// Initialize variables
if (empty ($date)) {
$date = get_system_time ();
@ -599,7 +631,7 @@ function reporting_get_agentmodule_sla_array ($id_agent_module, $period = 0, $mi
}
}
}
if (count($days) > 0) {
$sql .= ' AND DAYOFWEEK(FROM_UNIXTIME(utimestamp)) NOT IN (' . implode(',', $days) . ')';
}
@ -616,6 +648,28 @@ function reporting_get_agentmodule_sla_array ($id_agent_module, $period = 0, $mi
$sql .= ' ORDER BY utimestamp ASC';
$interval_data = db_get_all_rows_sql ($sql, true);
//calculate planned downtime dates
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $id_agent_module);
$sql_downtime = "SELECT id_downtime FROM tplanned_downtime_agents WHERE id_agent=$id_agent";
$downtimes = db_get_all_rows_sql($sql_downtime);
if ($downtimes == false) {
$downtimes = array();
}
$i = 0;
$downtime_dates = array();
foreach ($downtimes as $downtime) {
$id_downtime = $downtime['id_downtime'];
$sql_date = "SELECT date_from, date_to FROM tplanned_downtime WHERE id=$id_downtime";
$date_downtime = db_get_row_sql($sql_date);
if ($date_downtime != false) {
$downtime_dates[$i]['date_from'] = $date_downtime['date_from'];
$downtime_dates[$i]['date_to'] = $date_downtime['date_to'];
$i++;
}
}
/////
if ($interval_data === false) {
$interval_data = array ();
}
@ -678,6 +732,12 @@ function reporting_get_agentmodule_sla_array ($id_agent_module, $period = 0, $mi
} elseif (($previous_value <= ($min_value - $percent)) || ($previous_value >= ($max_value + $percent))) { //3 when value is Wrong
$previous_status = 3;
}
foreach ($downtime_dates as $date_dt) {
if (($date_dt['date_from'] <= $first_data['utimestamp']) AND ($date_dt['date_to'] >= $first_data['utimestamp'])) {
$previous_status = 1;
}
}
}
else {
$previous_status = 1;
@ -685,6 +745,7 @@ function reporting_get_agentmodule_sla_array ($id_agent_module, $period = 0, $mi
$data_colors = array();
$i = 0;
foreach ($interval_data as $data) {
$change = false;
$value = $data['datos'];
@ -698,6 +759,13 @@ function reporting_get_agentmodule_sla_array ($id_agent_module, $period = 0, $mi
} elseif (($value <= ($min_value - $percent)) || ($value >= ($max_value + $percent))) { //3 when value is Wrong
$status = 3;
}
foreach ($downtime_dates as $date_dt) {
if (($date_dt['date_from'] <= $data['utimestamp']) AND ($date_dt['date_to'] >= $data['utimestamp'])) {
$status = 1;
}
}
if ($status != $previous_status) {
$change = true;
$data_colors[$i]['data'] = $previous_status;
@ -2356,11 +2424,11 @@ function reporting_render_report_html_item ($content, $table, $report, $mini = f
continue;
}
}
//Get the sla_value in % and store it on $sla_value
$sla_value = reporting_get_agentmodule_sla ($sla['id_agent_module'], $content['period'],
$sla['sla_min'], $sla['sla_max'], $report["datetime"], $content, $content['time_from'],
$content['time_to']);
//Fill the array data_graph for the pie graph
if ($sla_value === false) {
$data_graph[__('Unknown')]++;