2011-05-09 Javier Lanz <javier.lanz@artica.es>
* include/graphs/fgraph.php: Added 'period' parameter to slicesbar_graph function * include/graphs/functions_pchart.php: Added 'period' variable and fixed pch_slicebar_graph function * include/functions_graph.php: Added 'date' to function graph_sla_slicebar * include/functions_reporting.php: Fixed get_agentmodule_sla_array function, and get_agentmodule_sla, updated some deprecated printTrucateText calls, and the decimal data for displaying the SLA number git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@4322 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
parent
cd3a886940
commit
b46f148553
|
@ -1,3 +1,14 @@
|
|||
2011-05-09 Javier Lanz <javier.lanz@artica.es>
|
||||
|
||||
* include/graphs/fgraph.php: Added 'period' parameter to slicesbar_graph
|
||||
function
|
||||
* include/graphs/functions_pchart.php: Added 'period' variable and fixed
|
||||
pch_slicebar_graph function
|
||||
* include/functions_graph.php: Added 'date' to function graph_sla_slicebar
|
||||
* include/functions_reporting.php: Fixed get_agentmodule_sla_array
|
||||
function, and get_agentmodule_sla, updated some deprecated
|
||||
printTrucateText calls, and the decimal data for displaying the SLA number
|
||||
|
||||
2011-05-09 Miguel de Dios <miguel.dedios@artica.es>
|
||||
|
||||
* pandoradb.sql, pandoradb.postgreSQL.sql: fixed the default value for
|
||||
|
|
|
@ -33,6 +33,8 @@ function grafico_modulo_sparse2 ($agent_module_id, $period, $show_events,
|
|||
global $config;
|
||||
global $graphic_type;
|
||||
|
||||
include_flash_chart_script($homeurl);
|
||||
|
||||
// Set variables
|
||||
if ($date == 0) $date = get_system_time();
|
||||
$datelimit = $date - $period;
|
||||
|
@ -773,15 +775,14 @@ function progress_bar2($progress, $width, $height, $title = '', $mode = 1) {
|
|||
"&mode=" . $mode . "&out_of_lim_str=".$out_of_lim_str."&title=".$title."&font=".$config['fontpath']."' />";
|
||||
}
|
||||
|
||||
function graph_sla_slicebar ($id, $period, $sla_min, $sla_max, $daysWeek,
|
||||
$time_from, $time_to, $sla_limit, $width, $height, $home_url) {
|
||||
function graph_sla_slicebar ($id, $period, $sla_min, $sla_max, $date, $daysWeek = null, $time_from = null, $time_to = null, $width, $height, $home_url) {
|
||||
global $config;
|
||||
|
||||
$days = json_decode ($daysWeek, true);
|
||||
$data = get_agentmodule_sla_array ($id, $period, $sla_min, $sla_max, $sla_limit, $days, $time_from, $time_to);
|
||||
|
||||
$data = get_agentmodule_sla_array ($id, $period, $sla_min, $sla_max, $date, $daysWeek, $time_from, $time_to);
|
||||
$colors = array(1 => '#38B800', 2 => '#FFFF00', 3 => '#FF0000', 4 => '#C3C3C3');
|
||||
|
||||
return slicesbar_graph($data, $width, $height, $colors, $config['fontpath'],
|
||||
return slicesbar_graph($data, $period, $width, $height, $colors, $config['fontpath'],
|
||||
$config['round_corner'], $home_url);
|
||||
}
|
||||
|
||||
|
|
|
@ -448,12 +448,11 @@ function get_agentmodule_sla ($id_agent_module, $period = 0, $min_value = 1, $ma
|
|||
$sql .= ' AND DAYOFWEEK(FROM_UNIXTIME(utimestamp)) NOT IN (' . implode(',', $days) . ')';
|
||||
}
|
||||
|
||||
if (!empty($timeFrom)) {
|
||||
$sql .= ' AND TIME(FROM_UNIXTIME(utimestamp)) >= "' . $timeFrom . '"';
|
||||
if ($timeFrom < $timeTo) {
|
||||
$sql .= ' AND (TIME(FROM_UNIXTIME(utimestamp)) >= "' . $timeFrom . '" AND TIME(FROM_UNIXTIME(utimestamp)) <= "'. $timeTo . '")';
|
||||
}
|
||||
|
||||
if (!empty($timeTo)) {
|
||||
$sql .= ' AND TIME(FROM_UNIXTIME(utimestamp)) <= "' . $timeTo . '"';
|
||||
elseif ($timeFrom > $timeTo) {
|
||||
$sql .= ' AND (TIME(FROM_UNIXTIME(utimestamp)) >= "' . $timeFrom . '" OR TIME(FROM_UNIXTIME(utimestamp)) <= "'. $timeTo . '")';
|
||||
}
|
||||
$sql .= ' ORDER BY utimestamp ASC';
|
||||
$interval_data = db_get_all_rows_sql ($sql, true);
|
||||
|
@ -535,50 +534,163 @@ function get_agentmodule_sla ($id_agent_module, $period = 0, $min_value = 1, $ma
|
|||
* @return Array with values either 1, 2, 3 or 4 depending if the SLA percentage for this subperiod
|
||||
* is within the sla limits, on the edge, outside or with an unknown value.
|
||||
*/
|
||||
function get_agentmodule_sla_array ($id_agent_module, $period = 0, $min_value = 1, $max_value = false, $sla_limit = 0, $days = null, $timeFrom = null, $timeTo = null) {
|
||||
function 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;
|
||||
// Get date
|
||||
$date = (string) get_parameter ('date', date ('Y-m-j'));
|
||||
$time = (string) get_parameter ('time', date ('h:iA'));
|
||||
$datetime = strtotime ($date.' '.$time);
|
||||
|
||||
//Get the module_interval
|
||||
$interval = get_module_interval ($id_agent_module);
|
||||
// Initialize variables
|
||||
if (empty ($date)) {
|
||||
$date = get_system_time ();
|
||||
}
|
||||
if ((empty ($period)) OR ($period == 0)) {
|
||||
$period = $config["sla_period"];
|
||||
}
|
||||
if ($daysWeek === null) {
|
||||
$daysWeek = array();
|
||||
}
|
||||
// Limit date to start searching data
|
||||
$datelimit = $date - $period;
|
||||
|
||||
if ($period < 3600) {
|
||||
$k = 6;
|
||||
} elseif ($period < 86400) {
|
||||
$k = 24;
|
||||
} elseif ($period < 172800) {
|
||||
$k = 48;
|
||||
} else {
|
||||
$k = 100;
|
||||
}
|
||||
$slices = $config["graph_res"] * $k;
|
||||
$sub_period = $period / $slices;
|
||||
if ($sub_period < $interval) {
|
||||
$sub_period = $interval;
|
||||
}
|
||||
$final_time = $datetime - $period + $sub_period;
|
||||
// Get interval data
|
||||
$sql = sprintf ('SELECT * FROM tagente_datos
|
||||
WHERE id_agente_modulo = %d
|
||||
AND utimestamp > %d AND utimestamp <= %d',
|
||||
$id_agent_module, $datelimit, $date);
|
||||
|
||||
//Add the working times (mon - tue - wed ...) and from time to time
|
||||
$days = array();
|
||||
//Translate to mysql week days
|
||||
|
||||
$data = array();
|
||||
$i = 0;
|
||||
while ($final_time <= $datetime) {
|
||||
$sla_value = get_agentmodule_sla ($id_agent_module, $sub_period, $min_value, $max_value, $final_time,
|
||||
$days, $timeFrom, $timeTo);
|
||||
if ($sla_value === false || $sla_value < 0) {// 4 for the Unknown value
|
||||
$data[$i] = 4;
|
||||
} elseif (($sla_value >= ($sla_limit - 10)) && ($sla_value <= ($sla_limit + 10))) {//2 when value is within the edges
|
||||
$data[$i] = 2;
|
||||
} elseif ($sla_value > ($sla_limit + 10)) { //1 when value is OK
|
||||
$data[$i] = 1;
|
||||
} elseif ($sla_value < ($sla_limit - 10)) { //3 when value is Wrong
|
||||
$data[$i] = 3;
|
||||
if ($daysWeek) {
|
||||
foreach ($daysWeek as $key => $value) {
|
||||
if (!$value) {
|
||||
if ($key == 'monday') {
|
||||
$days[] = 2;
|
||||
}
|
||||
if ($key == 'tuesday') {
|
||||
$days[] = 3;
|
||||
}
|
||||
if ($key == 'wednesday') {
|
||||
$days[] = 4;
|
||||
}
|
||||
if ($key == 'thursday') {
|
||||
$days[] = 5;
|
||||
}
|
||||
if ($key == 'friday') {
|
||||
$days[] = 6;
|
||||
}
|
||||
if ($key == 'saturday') {
|
||||
$days[] = 7;
|
||||
}
|
||||
if ($key == 'sunday') {
|
||||
$days[] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
$final_time += $sub_period;
|
||||
$i++;
|
||||
}
|
||||
return $data;
|
||||
|
||||
if (count($days) > 0) {
|
||||
$sql .= ' AND DAYOFWEEK(FROM_UNIXTIME(utimestamp)) NOT IN (' . implode(',', $days) . ')';
|
||||
}
|
||||
|
||||
if ($timeFrom != $timeTo) {
|
||||
if ($timeFrom < $timeTo) {
|
||||
$sql .= ' AND (TIME(FROM_UNIXTIME(utimestamp)) >= "' . $timeFrom . '" AND TIME(FROM_UNIXTIME(utimestamp)) <= "'. $timeTo . '")';
|
||||
}
|
||||
elseif ($timeFrom > $timeTo) {
|
||||
$sql .= ' AND (TIME(FROM_UNIXTIME(utimestamp)) >= "' . $timeFrom . '" OR TIME(FROM_UNIXTIME(utimestamp)) <= "'. $timeTo . '")';
|
||||
}
|
||||
}
|
||||
|
||||
$sql .= ' ORDER BY utimestamp ASC';
|
||||
$interval_data = db_get_all_rows_sql ($sql, true);
|
||||
|
||||
if ($interval_data === false) {
|
||||
$interval_data = array ();
|
||||
}
|
||||
|
||||
// Get previous data
|
||||
$previous_data = get_previous_data ($id_agent_module, $datelimit);
|
||||
if ($previous_data !== false) {
|
||||
$previous_data['utimestamp'] = $datelimit;
|
||||
array_unshift ($interval_data, $previous_data);
|
||||
}
|
||||
|
||||
// Get next data
|
||||
$next_data = get_next_data ($id_agent_module, $date);
|
||||
if ($next_data !== false) {
|
||||
$next_data['utimestamp'] = $date;
|
||||
array_push ($interval_data, $next_data);
|
||||
}
|
||||
else if (count ($interval_data) > 0) {
|
||||
// Propagate the last known data to the end of the interval
|
||||
$next_data = array_pop ($interval_data);
|
||||
array_push ($interval_data, $next_data);
|
||||
$next_data['utimestamp'] = $date;
|
||||
array_push ($interval_data, $next_data);
|
||||
}
|
||||
|
||||
if (count ($interval_data) < 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//Get the percentage for the limits
|
||||
$diff = $max_value - $min_value;
|
||||
//Getting 10% of $diff --> $percent = ($diff/100)*10, so...
|
||||
$percent = $diff / 10;
|
||||
|
||||
//Set initial conditions
|
||||
$first_data = array_shift ($interval_data);
|
||||
$previous_utimestamp = $date - $period;
|
||||
|
||||
if ($previous_utimestamp == $first_data['utimestamp']) {
|
||||
$previous_value = $first_data ['datos'];
|
||||
$previous_status = 0;
|
||||
|
||||
if ($previous_value < 0) {// 4 for the Unknown value
|
||||
$previous_status = 4;
|
||||
} elseif ((($previous_value >= ($min_value - $percent)) && ($previous_value <= ($min_value + $percent))) ||
|
||||
(($previous_value >= ($max_value - $percent)) && ($previous_value <= ($max_value + $percent)))) {//2 when value is within the edges
|
||||
$previous_status = 2;
|
||||
} elseif (($previous_value > ($min_value + $percent)) && ($previous_value < ($max_value - $percent))) { //1 when value is OK
|
||||
$previous_status = 1;
|
||||
} elseif (($previous_value < ($min_value - $percent)) || ($previous_value > ($max_value + $percent))) { //3 when value is Wrong
|
||||
$previous_status = 3;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$previous_status = 1;
|
||||
}
|
||||
|
||||
$data_colors = array();
|
||||
$i = 0;
|
||||
foreach ($interval_data as $data) {
|
||||
$change = false;
|
||||
$value = $data['datos'];
|
||||
if ($value < 0) {// 4 for the Unknown value
|
||||
$status = 4;
|
||||
} elseif ((($value >= ($min_value - $percent)) && ($value <= ($min_value + $percent))) ||
|
||||
(($value >= ($max_value - $percent)) && ($value <= ($max_value + $percent)))) {//2 when value is within the edges
|
||||
$status = 2;
|
||||
} elseif (($value > ($min_value + $percent)) && ($value < ($max_value - $percent))) { //1 when value is OK
|
||||
$status = 1;
|
||||
} elseif (($value < ($min_value - $percent)) || ($value > ($max_value + $percent))) { //3 when value is Wrong
|
||||
$status = 3;
|
||||
}
|
||||
if ($status != $previous_status) {
|
||||
$change = true;
|
||||
$data_colors[$i]['data'] = $previous_status;
|
||||
$data_colors[$i]['utimestamp'] = $data['utimestamp'] - $previous_utimestamp;
|
||||
$i++;
|
||||
$previous_status = $status;
|
||||
$previous_utimestamp = $data['utimestamp'];
|
||||
}
|
||||
}
|
||||
if ($change == false) {
|
||||
$data_colors[$i]['data'] = $previous_status;
|
||||
$data_colors[$i]['utimestamp'] = $data['utimestamp'] - $previous_utimestamp;
|
||||
}
|
||||
|
||||
return $data_colors;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2110,7 +2222,7 @@ function render_report_html_item ($content, $table, $report, $mini = false) {
|
|||
$data[4] = '<span style="font: bold '.$sizem.'em Arial, Sans-serif; color: #ff0000;">';
|
||||
$data[5] = '<span style="font: bold '.$sizem.'em Arial, Sans-serif; color: #ff0000;">'.__('Fail').'</span>';
|
||||
}
|
||||
$data[4] .= format_numeric ($sla_value). "%";
|
||||
$data[4] .= format_numeric ($sla_value, 2). "%";
|
||||
}
|
||||
$data[4] .= "</span>";
|
||||
|
||||
|
@ -2149,8 +2261,8 @@ function render_report_html_item ($content, $table, $report, $mini = false) {
|
|||
$data[0] .= printSmallFont(get_agentmodule_name ($sla['id_agent_module']));
|
||||
|
||||
$data[1] = graph_sla_slicebar ($sla['id_agent_module'], $content['period'],
|
||||
$sla['sla_min'], $sla['sla_max'], $daysWeek, $content['time_from'],
|
||||
$content['time_to'], $sla['sla_limit'], 550, 25);
|
||||
$sla['sla_min'], $sla['sla_max'], $report["datetime"], $content, $content['time_from'],
|
||||
$content['time_to'], 550, 25,'');
|
||||
|
||||
array_push ($table2->data, $data);
|
||||
}
|
||||
|
@ -2165,7 +2277,7 @@ function render_report_html_item ($content, $table, $report, $mini = false) {
|
|||
//RUNNING
|
||||
$data = array ();
|
||||
$data[0] = $sizh.__('Monitor report').$sizhfin;
|
||||
$data[1] = $sizh . ui_print_truncate_text($agent_name, 70, false).' <br> '.printTruncateText($module_name, 70, false).$sizhfin;
|
||||
$data[1] = $sizh . ui_print_truncate_text($agent_name, 70, false).' <br> '.ui_print_truncate_text($module_name, 70, false).$sizhfin;
|
||||
$data[2] = $sizh.human_time_description_raw ($content['period']).$sizhfin;
|
||||
array_push ($table->data, $data);
|
||||
|
||||
|
@ -2199,7 +2311,7 @@ function render_report_html_item ($content, $table, $report, $mini = false) {
|
|||
//RUNNING
|
||||
$data = array ();
|
||||
$data[0] = $sizh.__('Avg. Value').$sizhfin;
|
||||
$data[1] = $sizh.printTruncateText($agent_name, 75, false).' <br> '.printTruncateText($module_name, 75, false).$sizhfin;
|
||||
$data[1] = $sizh.ui_print_truncate_text($agent_name, 75, false).' <br> '.ui_print_truncate_text($module_name, 75, false).$sizhfin;
|
||||
$data[2] = $sizh.human_time_description_raw ($content['period']).$sizhfin;
|
||||
array_push ($table->data, $data);
|
||||
|
||||
|
|
|
@ -92,10 +92,10 @@ function progressbar($progress, $width, $height, $title, $font, $mode = 1, $out_
|
|||
}
|
||||
|
||||
|
||||
function slicesbar_graph($chart_data, $width, $height, $colors, $font,
|
||||
$round_corner, $home_url = '') {
|
||||
function slicesbar_graph($chart_data, $period, $width, $height, $colors, $font, $round_corner, $home_url = '') {
|
||||
$graph = array();
|
||||
$graph['data'] = $chart_data;
|
||||
$graph['period'] = $period;
|
||||
$graph['width'] = $width;
|
||||
$graph['height'] = $height;
|
||||
$graph['font'] = $font;
|
||||
|
|
|
@ -95,6 +95,9 @@ $force_height = true;
|
|||
if(isset($graph['force_height'])) {
|
||||
$force_height = $graph['force_height'];
|
||||
}
|
||||
if(isset($graph['period'])) {
|
||||
$period = $graph['period'];
|
||||
}
|
||||
|
||||
if (!$force_height) {
|
||||
if ($height < (count($graph['data']) * 14)) {
|
||||
|
@ -266,7 +269,7 @@ switch($graph_type) {
|
|||
$width, $height, $font, $water_mark, $font_size);
|
||||
break;
|
||||
case 'slicebar':
|
||||
pch_slicebar_graph($graph_type, $data, $width, $height, $colors, $font, $round_corner, $font_size);
|
||||
pch_slicebar_graph($graph_type, $data, $period, $width, $height, $colors, $font, $round_corner, $font_size);
|
||||
break;
|
||||
case 'polar':
|
||||
case 'radar':
|
||||
|
@ -293,7 +296,7 @@ switch($graph_type) {
|
|||
break;
|
||||
}
|
||||
|
||||
function pch_slicebar_graph ($graph_type, $data, $width, $height, $colors, $font, $round_corner, $font_size) {
|
||||
function pch_slicebar_graph ($graph_type, $data, $period, $width, $height, $colors, $font, $round_corner, $font_size) {
|
||||
/* CAT:Slicebar charts */
|
||||
|
||||
set_time_limit (0);
|
||||
|
@ -311,8 +314,8 @@ function pch_slicebar_graph ($graph_type, $data, $width, $height, $colors, $font
|
|||
$radius = ($height > 18) ? 8 : 0;
|
||||
else
|
||||
$radius = 0;
|
||||
|
||||
$ratio = $width / count($data);
|
||||
|
||||
$thinest_slice = $width / $period;
|
||||
|
||||
/* Color stuff */
|
||||
$colorsrgb = array();
|
||||
|
@ -325,7 +328,9 @@ function pch_slicebar_graph ($graph_type, $data, $width, $height, $colors, $font
|
|||
|
||||
$i = 0;
|
||||
foreach ($data as $d) {
|
||||
$color = $colorsrgb[$d];
|
||||
$color = $d['data'];
|
||||
$color = $colorsrgb[$color];
|
||||
$ratio = $thinest_slice * $d['utimestamp'];
|
||||
$myPicture->drawRoundedFilledRectangle ($i, 0, $ratio+$i,
|
||||
$height, $radius, array('R' => $color['R'], 'G' => $color['G'], 'B' => $color['B']));
|
||||
$i+=$ratio;
|
||||
|
@ -335,7 +340,7 @@ function pch_slicebar_graph ($graph_type, $data, $width, $height, $colors, $font
|
|||
|
||||
if ($round_corner) {
|
||||
/* Under this value, the rounded rectangle is painted great */
|
||||
if ($ratio <= 16) {
|
||||
if ($thinest_slice <= 16) {
|
||||
/* Clean a bit of pixels */
|
||||
for ($i = 0; $i < 7; $i++) {
|
||||
$myPicture->drawLine (0, $i, 6 - $i, $i, array('R' => 255, 'G' => 255, 'B' => 255));
|
||||
|
|
Loading…
Reference in New Issue