From 43aa13b4e5d3cfb6a78c1ea3da65e4112883dc7c Mon Sep 17 00:00:00 2001 From: Daniel Barbero Martin Date: Tue, 24 Sep 2019 17:39:11 +0200 Subject: [PATCH] fixed summatory series custom graph --- pandora_console/include/functions_graph.php | 159 +++++++++----------- 1 file changed, 68 insertions(+), 91 deletions(-) diff --git a/pandora_console/include/functions_graph.php b/pandora_console/include/functions_graph.php index d0e844c3bf..b4bbf521c5 100644 --- a/pandora_console/include/functions_graph.php +++ b/pandora_console/include/functions_graph.php @@ -1521,7 +1521,8 @@ function graphic_combined_module( $array_data, $params_combined['average'], $params_combined['summatory'], - $params_combined['modules_series'] + $params_combined['modules_series'], + $date_array ); } } @@ -2222,7 +2223,7 @@ function graphic_combined_module( * @param boolean $average Average. * @param boolean $summatory Summatory. * @param boolean $modules_series Series module. - * @param boolean $baseline Baseline data. + * @param array $date_array Date data. * * @return array Data. */ @@ -2231,106 +2232,82 @@ function combined_graph_summatory_average( $average=false, $summatory=false, $modules_series=false, - $baseline=false + $date_array=[] ) { if (isset($array_data) && is_array($array_data)) { + $reduce_array = []; foreach ($array_data as $key => $value) { if (strpos($key, 'sum') !== false) { - $data_array_reverse[$key] = array_reverse($value['data']); - if (!$modules_series) { - unset($array_data[$key]); - } + $last = $date_array['start_date']; + $reduce_array = array_reduce( + $value['data'], + function ($carry, $item) use ($date_array, $last, $reduce_array) { + $slice_start = $date_array['start_date']; + $iterator = $last; + + // JS to PHP timestamp format. + $item[0] /= 1000; + while ($iterator <= $date_array['final_date']) { + if ($item[0] >= $slice_start && $item[0] < $iterator) { + $array = []; + $val = 0; + $n = 0; + + if (is_array($reduce_array[$slice_start])) { + $val = $reduce_array[$slice_start]['value']; + $n = ($reduce_array[$slice_start]['n'] + 1); + } + + $array['value'] = ($item[1] + $val); + $array['n'] = $n; + $array['t'] = ($slice_start * 1000); + + $carry[$slice_start] = $array; + $last = $iterator; + break; + } else { + $slice_start = $iterator; + $iterator += 300; + } + } + + $i++; + return $carry; + }, + $reduce_array + ); + } + + if (!$modules_series) { + unset($array_data[$key]); } } - if (isset($data_array_reverse) && is_array($data_array_reverse)) { - $array_sum_reverse = []; - $array_avg_reverse = []; - $data_array_prev = false; - $data_array_pop = []; - $count = 0; + $reduce_array_summatory = []; + $reduce_array_average = []; + $i = 0; + foreach ($reduce_array as $item) { + $reduce_array_summatory[$i][0] = $item['t']; + $reduce_array_summatory[$i][1] = $item['value']; - $count_data_array_reverse = count($data_array_reverse['sum0']); - while ($count_data_array_reverse > 0) { - foreach ($data_array_reverse as $key_reverse => $value_reverse) { - if (is_array($value_reverse) && count($value_reverse) > 0) { - $data_array_pop[$key_reverse] = array_pop( - $data_array_reverse[$key_reverse] - ); - } - } + $reduce_array_average[$i][0] = $item['t']; + $reduce_array_average[$i][1] = ($item['value'] / ($item['n'] + 1)); - if (isset($data_array_pop) && is_array($data_array_pop)) { - $acum_data = 0; - $acum_array = []; - $sum_data = 0; - $count_pop = 0; - foreach ($data_array_pop as $key_pop => $value_pop) { - if ($value_pop[0] > $acum_data) { - if ($acum_data != 0) { - $sum_data = ($sum_data + $data_array_prev[$key_pop][1]); - $data_array_reverse[$key_pop][] = $value_pop; - $data_array_prev[$acum_key] = $acum_array; - } else { - if ($data_array_prev[$key_pop] == false) { - $data_array_prev[$key_pop] = $value_pop; - } + $i++; + } - $acum_key = $key_pop; - $acum_data = $value_pop[0]; - $acum_array = $value_pop; - $sum_data = $value_pop[1]; - } - } else if ($value_pop[0] < $acum_data) { - $sum_data = ($sum_data + $data_array_prev[$key_pop][1]); - $data_array_reverse[$acum_key][] = $acum_array; - $data_array_prev[$key_pop] = $value_pop; - $acum_key = $key_pop; - $acum_data = $value_pop[0]; - $acum_array = $value_pop; - } else if ($value_pop[0] == $acum_data) { - $data_array_prev[$key_pop] = $value_pop; - $sum_data += $value_pop[1]; - } + if ($summatory && isset($reduce_array_summatory) + && is_array($reduce_array_summatory) + && count($reduce_array_summatory) > 0 + ) { + $array_data['summatory']['data'] = $reduce_array_summatory; + } - $count_pop++; - } - - if ($summatory) { - $array_sum_reverse[$count][0] = $acum_data; - $array_sum_reverse[$count][1] = $sum_data; - } - - if ($average) { - $array_avg_reverse[$count][0] = $acum_data; - $array_avg_reverse[$count][1] = ($sum_data / $count_pop); - } - } - - $count++; - $count_data_array_reverse--; - } - - if ($summatory && isset($array_sum_reverse) - && is_array($array_sum_reverse) - && count($array_sum_reverse) > 0 - ) { - $array_data['summatory']['data'] = $array_sum_reverse; - $array_data['summatory']['color'] = 'purple'; - } - - if ($average && isset($array_avg_reverse) - && is_array($array_avg_reverse) - && count($array_avg_reverse) > 0 - ) { - if ($baseline) { - $array_data['baseline']['data'] = $array_avg_reverse; - $array_data['baseline']['color'] = 'green'; - } else { - $array_data['average']['data'] = $array_avg_reverse; - $array_data['average']['color'] = 'orange'; - } - } + if ($average && isset($reduce_array_average) + && is_array($reduce_array_average) + && count($reduce_array_average) > 0 + ) { + $array_data['average']['data'] = $reduce_array_average; } return $array_data;