'; $output .= " "; if (!$return) echo $output; return $output; } } /////////////////////////////// ////////// AREA GRAPHS //////// /////////////////////////////// function flot_area_stacked_graph($chart_data, $width, $height, $color, $legend, $long_index, $homeurl = '', $font = '', $font_size = 7, $unit = '', $water_mark = '', $serie_types = array(), $chart_extra_data = array(), $yellow_threshold = 0, $red_threshold = 0, $adapt_key= '', $force_integer = false, $series_suffix_str = '', $menu = true, $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0) { global $config; return flot_area_graph($chart_data, $width, $height, $color, $legend, $long_index, $homeurl, $unit, 'area_stacked', $water_mark, $serie_types, $chart_extra_data, $yellow_threshold, $red_threshold, $adapt_key, $force_integer, $series_suffix_str, $menu, $background_color, $dashboard, $vconsole, $agent_module_id, $font, $font_size); } function flot_area_simple_graph($chart_data, $width, $height, $color, $legend, $long_index, $homeurl = '', $unit = '', $water_mark = '', $serie_types = array(), $chart_extra_data = array(), $yellow_threshold = 0, $red_threshold = 0, $adapt_key= '', $force_integer = false, $series_suffix_str = '', $menu = true, $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0, $font = '', $font_size = 7, $xaxisname = '', $percentil_values = array(), $threshold_data = array()) { global $config; return flot_area_graph($chart_data, $width, $height, $color, $legend, $long_index, $homeurl, $unit, 'area_simple', $water_mark, $serie_types, $chart_extra_data, $yellow_threshold, $red_threshold, $adapt_key, $force_integer, $series_suffix_str, $menu, $background_color, $dashboard, $vconsole, $agent_module_id, $font, $font_size, $xaxisname, $percentil_values, $threshold_data); } function flot_line_stacked_graph($chart_data, $width, $height, $color, $legend, $long_index, $homeurl = '', $font = '', $font_size = 7, $unit = '', $water_mark = '', $serie_types = array(), $chart_extra_data = array(), $yellow_threshold = 0, $red_threshold = 0, $adapt_key= '', $force_integer = false, $series_suffix_str = '', $menu = true, $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0, $xaxisname = "") { global $config; return flot_area_graph($chart_data, $width, $height, $color, $legend, $long_index, $homeurl, $unit, 'line_stacked', $water_mark, $serie_types, $chart_extra_data, $yellow_threshold, $red_threshold, $adapt_key, $force_integer, $series_suffix_str, $menu, $background_color, $dashboard, $vconsole, $agent_module_id, $font, $font_size, $xaxisname); } function flot_line_simple_graph($chart_data, $width, $height, $color, $legend, $long_index, $homeurl = '', $font = '', $font_size = 7, $unit = '', $water_mark = '', $serie_types = array(), $chart_extra_data = array(), $yellow_threshold = 0, $red_threshold = 0, $adapt_key= '', $force_integer = false, $series_suffix_str = '', $menu = true, $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0, $percentil_values = array(), $threshold_data = array(), $xaxisname = '') { global $config; return flot_area_graph($chart_data, $width, $height, $color, $legend, $long_index, $homeurl, $unit, 'line_simple', $water_mark, $serie_types, $chart_extra_data, $yellow_threshold, $red_threshold, $adapt_key, $force_integer, $series_suffix_str, $menu, $background_color, $dashboard, $vconsole, $agent_module_id, $font, $font_size, $xaxisname, $percentil_values, $threshold_data); } function flot_area_graph($chart_data, $width, $height, $color, $legend, $long_index, $homeurl, $unit, $type, $water_mark, $serie_types, $chart_extra_data, $yellow_threshold, $red_threshold, $adapt_key, $force_integer, $series_suffix_str = '', $menu = true, $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0, $font = '', $font_size = 7, $xaxisname = '', $percentil_values = array(), $threshold_data = array()) { global $config; include_javascript_dependencies_flot_graph(); $menu = (int)$menu; // Get a unique identifier to graph $graph_id = uniqid('graph_'); $background_style = ''; switch ($background_color) { default: case 'white': $background_style = ' background: #fff; '; break; case 'black': $background_style = ' background: #000; '; break; case 'transparent': $background_style = ''; break; } // Parent layer $return = "
"; // Set some containers to legend, graph, timestamp tooltip, etc. $return .= "

"; if (!empty($threshold_data)) { $yellow_up = $threshold_data['yellow_up']; $red_up = $threshold_data['red_up']; $yellow_inverse = $threshold_data['yellow_inverse']; $red_inverse = $threshold_data['red_inverse']; } else { // Get other required module datas to draw warning and critical if ($agent_module_id == 0) { $yellow_up = 0; $red_up = 0; $yellow_inverse = false; $red_inverse = false; } else { $module_data = db_get_row_sql ('SELECT * FROM tagente_modulo WHERE id_agente_modulo = ' . $agent_module_id); $yellow_up = $module_data['max_warning']; $red_up = $module_data['max_critical']; $yellow_inverse = !($module_data['warning_inverse'] == 0); $red_inverse = !($module_data['critical_inverse'] == 0); } } if ($menu) { $threshold = false; if ($yellow_threshold != $yellow_up || $red_threshold != $red_up) { $threshold = true; } $nbuttons = 3; if ($threshold) { $nbuttons++; } $menu_width = 25 * $nbuttons + 15; if ( $dashboard == false AND $vconsole == false) { $return .= ""; } if ($dashboard) { $return .= ""; } } $return .= html_print_input_hidden('line_width_graph', $config['custom_graph_width'], true); $return .= ""; $return .= "
"; if ($menu) { $height = 100; } else { $height = 1; } if (!$vconsole) $return .= ""; if ($water_mark != '') { $return .= ""; $watermark = 'true'; } else { $watermark = 'false'; } // Set a weird separator to serialize and unserialize passing data from php to javascript $separator = ';;::;;'; $separator2 = ':,:,,,:,:'; // Transform data from our format to library format $legend2 = array(); $labels = array(); $a = array(); $vars = array(); $serie_types2 = array(); $colors = array(); $index = array_keys(reset($chart_data)); foreach ($index as $serie_key) { if (isset($color[$serie_key])) { $colors[] = $color[$serie_key]['color']; } else { $colors[] = ''; } } foreach ($chart_data as $label => $values) { $labels[] = io_safe_output($label); foreach($values as $key => $value) { $jsvar = "data_" . $graph_id . "_" . $key; if (!isset($serie_types[$key])) { switch ($type) { case 'line_simple': case 'line_stacked': $serie_types2[$jsvar] = 'line'; break; case 'area_simple': case 'area_stacked': default: $serie_types2[$jsvar] = 'area'; break; } } else { $serie_types2[$jsvar] = $serie_types[$key]; } if ($serie_types2[$jsvar] == 'points' && $value == 0) { $data[$jsvar][] = 'null'; } else { $data[$jsvar][] = $value; } if (!isset($legend[$key])) { $legend2[$jsvar] = 'null'; } else { $legend2[$jsvar] = $legend[$key]; } } } if (!empty($percentil_values)) { foreach($percentil_values as $key => $value) { $jsvar = "percentil_" . $graph_id . "_" . $key; $serie_types2[$jsvar] = 'line'; $data[$jsvar] = $value; } } // Store data series in javascript format $jsvars = ''; $jsseries = array(); $values2 = array(); $i = 0; $max_x = 0; foreach ($data as $jsvar => $values) { $n_values = count($values); if ($n_values > $max_x) { $max_x = $n_values; } $values2[] = implode($separator,$values); $i ++; } $values = implode($separator2, $values2); // Max is "n-1" because start with 0 $max_x--; $extra_width = (int)($width / 3); $return .= ""; // Process extra data $events = array(); $event_ids = array(); $alerts = array(); $alert_ids = array(); $legend_events = ''; $legend_alerts = ''; if (empty($chart_extra_data)) { $chart_extra_data = array(); } foreach ($chart_extra_data as $i => $data) { switch ($i) { case 'legend_alerts': $legend_alerts = $data; break; case 'legend_events': $legend_events = $data; break; default: if (isset($data['events'])) { $event_ids[] = $i; $events[$i] = $data['events']; } if (isset($data['alerts'])) { $alert_ids[] = $i; $alerts[$i] = $data['alerts']; } break; } } // Store serialized data to use it from javascript $events = implode($separator,$events); $event_ids = implode($separator,$event_ids); $alerts = implode($separator,$alerts); $alert_ids = implode($separator,$alert_ids); $labels = implode($separator,$labels); if (!empty($long_index)) { $labels_long = implode($separator, $long_index); } else { $labels_long = $labels; } if (!empty($legend)) { $legend = io_safe_output(implode($separator, $legend)); } $serie_types = implode($separator, $serie_types2); $colors = implode($separator, $colors); // transform into string to pass to javascript if ($force_integer) { $force_integer = 'true'; } else { $force_integer = 'false'; } //modify internal grid lines and legend text color if(substr($background_style, -6, 4) == '#fff'){ $background_color = "#eee"; $legend_color = "#151515"; } else if(substr($background_style, -6, 4) == '#000'){ $background_color = "#151515"; $legend_color = "#BDBDBD"; } else{ $background_color = "#A4A4A4"; $legend_color = "#A4A4A4"; } // Trick to get translated string from javascript $return .= html_print_input_hidden('unknown_text', __('Unknown'), true); if (!isset($config["short_module_graph_data"])) $config["short_module_graph_data"] = true; if ($config["short_module_graph_data"]) { $short_data = true; } else { $short_data = false; } // Javascript code $return .= ""; // Parent layer $return .= "
"; return $return; } /////////////////////////////// /////////////////////////////// /////////////////////////////// // Prints a FLOT pie chart function flot_pie_chart ($values, $labels, $width, $height, $water_mark, $font = '', $font_size = 8, $legend_position = '', $colors = '', $hide_labels = false) { include_javascript_dependencies_flot_graph(); $series = sizeof($values); if (($series != sizeof ($labels)) || ($series == 0) ) { return; } $graph_id = uniqid('graph_'); switch ($legend_position) { case 'bottom': $height = $height + (count($values) * 24); break; case 'right': default: //TODO FOR TOP OR LEFT OR RIGHT break; } $return = "
"; if ($water_mark != '') { $return .= ""; $water_mark = 'true'; } else { $water_mark = 'false'; } $separator = ';;::;;'; $labels = implode($separator, $labels); $values = implode($separator, $values); if (!empty($colors)) { $colors = implode($separator, $colors); } $return .= ""; return $return; } // Prints a FLOT pie chart function flot_custom_pie_chart ($flash_charts, $graph_values, $width, $height, $colors, $module_name_list, $long_index, $no_data,$xaxisname, $yaxisname, $water_mark, $fontpath, $font_size, $unit, $ttl, $homeurl, $background_color, $legend_position) { global $config; ///TODO include_javascript_dependencies_flot_graph(); $total_modules = $graph_values['total_modules']; unset($graph_values['total_modules']); foreach ($graph_values as $label => $value) { if ($value['value']) { if ($value['value'] > 1000000) $legendvalue = sprintf("%sM", remove_right_zeros(number_format($value['value'] / 1000000, $config['graph_precision']))); else if ($value['value'] > 1000) $legendvalue = sprintf("%sK", remove_right_zeros(number_format($value['value'] / 1000, $config['graph_precision']))); else $legendvalue = remove_right_zeros(number_format($value['value'], $config['graph_precision'])); } else $legendvalue = __('No data'); $values[] = $value['value']; $legend[] = $label .": " . $legendvalue . " " .$value['unit']; $labels[] = $label; } $graph_id = uniqid('graph_'); $return = "
"; if ($water_mark != '') { $return .= ""; $water_mark = 'true'; } else { $water_mark = 'false'; } $separator = ';;::;;'; $labels = implode($separator, $labels); $legend = implode($separator, $legend); $values = implode($separator, $values); if (!empty($colors)) { foreach ($colors as $color) { $temp_colors[] = $color['color']; } } $colors = implode($separator, $temp_colors); $return .= ""; return $return; } // Returns a 3D column chart function flot_hcolumn_chart ($graph_data, $width, $height, $water_mark, $font = '', $font_size = 7, $background_color = "white", $tick_color = "white", $val_min=null, $val_max=null) { global $config; include_javascript_dependencies_flot_graph(); $return = ''; $stacked_str = ''; $multicolor = true; // Get a unique identifier to graph $graph_id = uniqid('graph_'); $graph_id2 = uniqid('graph_'); // Set some containers to legend, graph, timestamp tooltip, etc. $return .= "
"; $return .= ""; if ($water_mark != '') { $return .= ""; $watermark = 'true'; } else { $watermark = 'false'; } // Set a weird separator to serialize and unserialize passing data // from php to javascript $separator = ';;::;;'; $separator2 = ':,:,,,:,:'; // Transform data from our format to library format $labels = array(); $a = array(); $vars = array(); $max = PHP_INT_MIN+1; $min = PHP_INT_MAX-1; $i = count($graph_data); $data = array(); foreach ($graph_data as $label => $values) { $labels[] = io_safe_output($label); $i--; foreach ($values as $key => $value) { $jsvar = "data_" . $graph_id . "_" . $key; $data[$jsvar][] = $value; if ($value > $max) { $max = $value; } if ($value < $min) { $min = $value; } } } if (!is_numeric($val_min)) { $val_min = $min; } if (!is_numeric($val_max)) { $val_max = $max; } // Store serialized data to use it from javascript $labels = implode($separator,$labels); // Store data series in javascript format $jsvars = ''; $jsseries = array(); $i = 0; $values2 = array(); foreach ($data as $jsvar => $values) { $values2[] = implode($separator,$values); } $values = implode($separator2, $values2); $jsseries = implode(',', $jsseries); // Javascript code $return .= ""; return $return; } // Returns a 3D column chart function flot_vcolumn_chart ($graph_data, $width, $height, $color, $legend, $long_index, $homeurl, $unit, $water_mark, $homedir, $font, $font_size, $from_ux, $from_wux, $background_color = 'white', $tick_color = 'white') { global $config; include_javascript_dependencies_flot_graph(); $stacked_str = ''; $multicolor = false; // Get a unique identifier to graph $graph_id = uniqid('graph_'); $graph_id2 = uniqid('graph_'); if ($width != 'auto') { $width = $width . "px"; } // Set some containers to legend, graph, timestamp tooltip, etc. $return .= "
"; $return .= ""; if ($water_mark != '') { $return .= ""; $watermark = 'true'; } else { $watermark = 'false'; } $colors = array_map(function ($elem) { return $elem['color'] ? $elem['color'] : null; }, $color); // Set a weird separator to serialize and unserialize passing data from php to javascript $separator = ';;::;;'; $separator2 = ':,:,,,:,:'; // Transform data from our format to library format $labels = array(); $a = array(); $vars = array(); $max = 0; $i = count($graph_data); foreach ($graph_data as $label => $values) { $labels[] = io_safe_output($label); $i--; foreach ($values as $key => $value) { $jsvar = "data_" . $graph_id . "_" . $key; $data[$jsvar][] = $value; if ($value > $max) { $max = $value; } } } // Store serialized data to use it from javascript $labels = implode($separator,$labels); $colors = implode($separator, $colors); // Store data series in javascript format $jsvars = ''; $jsseries = array(); $i = 0; $values2 = array(); foreach ($data as $jsvar => $values) { $values2[] = implode($separator,$values); } $values = implode($separator2, $values2); $jsseries = implode(',', $jsseries); // Javascript code $return .= ""; return $return; } function flot_slicesbar_graph ($graph_data, $period, $width, $height, $legend, $colors, $fontpath, $round_corner, $homeurl, $watermark = '', $adapt_key = '', $stat_win = false, $id_agent = 0, $full_legend_date = array()) { global $config; include_javascript_dependencies_flot_graph(); $stacked_str = 'stack: stack,'; // Get a unique identifier to graph $graph_id = uniqid('graph_'); // Set some containers to legend, graph, timestamp tooltip, etc. if ($stat_win) { $return = "
"; } else { $return = "
"; } $return .= ""; // Set a weird separator to serialize and unserialize passing data from php to javascript $separator = ';;::;;'; $separator2 = ':,:,,,:,:'; // Transform data from our format to library format $labels = array(); $a = array(); $vars = array(); $datacolor = array(); $max = 0; $i = count($graph_data); $intervaltick = $period / $i; $leg_max_length = 0; foreach ($legend as $l) { if (strlen($l) > $leg_max_length) { $leg_max_length = strlen($l); } } $fontsize = 7; $extra_height = 15; if (defined("METACONSOLE")) $extra_height = 20; $return .= ""; $maxticks = (int) ($width / ($fontsize * $leg_max_length)); $i_aux = $i; while(1) { if ($i_aux <= $maxticks ) { break; } $intervaltick*= 2; $i_aux /= 2; } $intervaltick = (int) $intervaltick; $acumulate = 0; $c = 0; $acumulate_data = array(); foreach ($graph_data as $label => $values) { $labels[] = io_safe_output($label); $i--; foreach ($values as $key => $value) { $jsvar = "d_".$graph_id."_".$i; if ($key == 'data') { $datacolor[$jsvar] = $colors[$value]; continue; } $data[$jsvar][] = $value; $acumulate_data[$c] = $acumulate; $acumulate += $value; $c++; if ($value > $max) { $max = $value; } } } // Store serialized data to use it from javascript $labels = implode($separator,$labels); $datacolor = implode($separator,$datacolor); $legend = io_safe_output(implode($separator,$legend)); if (!empty($full_legend_date)) { $full_legend_date = io_safe_output(implode($separator,$full_legend_date)); } else { $full_legend_date = false; } $acumulate_data = io_safe_output(implode($separator,$acumulate_data)); // Store data series in javascript format $jsvars = ''; $jsseries = array(); $date = get_system_time (); $datelimit = ($date - $period) * 1000; $i = 0; $values2 = array(); foreach ($data as $jsvar => $values) { $values2[] = implode($separator,$values); $i ++; } $values = implode($separator2, $values2); // Javascript code $return .= ""; return $return; } ?>