function GraphSonda($chart, $id_chart, $id_plan, $id_item, $from, $avg, $tag) { $offset = getOffset(); // setTimezone(); $dt = getDates($from); $index = 0; $average = getAverage($avg); $format = $average[0]; $divide = $average[1]; if ($divide == 60 * 60 * 6) { $offset = -60 * 60 * 2; } if ($divide == 60 * 60 * 12) { $offset = +60 * 60 * 4; } if ($divide == 60 * 60 * 24) { $offset = +60 * 60 * 4; } $colorIndex = 0; $ldata = loadRAWData($from, $id_plan, $id_item); $percentile = calculatePercentile($ldata['allData']); $div = $ldata['div']; if (isset($ldata['hostList'])) { foreach ($ldata['hostList'] as $host) { $id_host = $host['id_host']; $hostName = $host['host']; $nacD = $host['nacD']; $nacU = $host['nacU']; $critical = $host['critical']; $warning = $host['warning']; $nominal = $host['nominal']; if ($warning > 100) { $dir = 1; } else { $dir = 0; } if ($nominal == -1) { $nominal = $nacD; } if ($nominal == -2) { $nominal = $nacU; } unset($theSondaAvg); unset($theSondaQoE); unset($dataAvg); unset($dataQoE); if (isset($ldata['historyList'][$id_host])) { foreach ($ldata['historyList'][$id_host] as $key => $row) { $tk = round($row['clock'] / $divide, 0) * $divide; $skip = false; if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) { $skip = true; } if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) { $skip = true; } if (!$skip) { if (!isset($theSondaAvg[$tk])) { $theSondaAvg[$tk] = array($tk, 0, 0); } if (!isset($theSondaQoE[$tk])) { $theSondaQoE[$tk] = array($tk, 0, 0); } $sum = $theSondaAvg[$tk][1]; $cnt = $theSondaAvg[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $theSondaAvg[$tk] = array($tk, $x, $y); if ($row['value'] > $nominal) { $row['value'] = $nominal; } $sum = $theSondaQoE[$tk][1]; $cnt = $theSondaQoE[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $theSondaQoE[$tk] = array($tk, $x, $y); } } } if (isset($theSondaAvg)) { aasort($theSondaAvg, 0); $next = 0; $prev = 0; foreach ($theSondaAvg as $tvalue) { $next = $tvalue[0] + $offset; if ($prev > 0 && $next > 0 && $next - $prev > $divide * 2) { $dataAvg[] = array(($prev + 1000) * 1000, null); } $dataAvg[] = array($next * 1000, round($tvalue[1] / $tvalue[2] / $div, 2)); $prev = $next; } aasort($theSondaQoE, 0); $next = 0; $prev = 0; foreach ($theSondaQoE as $tvalue) { $next = $tvalue[0] + $offset; if ($prev > 0 && $next > 0 && $next - $prev > $divide * 2) { $dataQoE[] = array(($prev + 1000) * 1000, null); } $dataQoE[] = array($next * 1000, round($tvalue[1] / $tvalue[2] / $div, 2)); $prev = $next; } } if (isset($dataAvg)) { if (!isset($minClock)) { $minClock = $dataAvg[0][0]; $maxClock = $dataAvg[count($dataAvg) - 1][0]; } else { if ($dataAvg[0][0] < $minClock) { $minClock = $dataAvg[0][0]; } if ($dataAvg[count($dataAvg) - 2][0] > $maxClock) { $maxClock = $dataAvg[count($dataAvg) - 2][0]; } } if ($_GET['qoe'] == 'Average On' || $_GET['qoe'] == 'Both') { $chart->series[]->name = $hostName . "-AVG"; $chart->series[$index]->type = 'spline'; $chart->series[$index]->dashStyle = 'spline'; $chart->series[$index]->data = $dataAvg; $chart->series[$index]->color = getColor($colorIndex); $chart->series[$index]->lineWidth = 1; $chart->series[$index]->marker->radius = 2; $index++; } if ($_GET['qoe'] == 'QoE On' || $_GET['qoe'] == 'Both') { $chart->series[]->name = $hostName . '-QoE'; $chart->series[$index]->type = 'shortdot'; $chart->series[$index]->color = getColor($colorIndex); $chart->series[$index]->data = $dataQoE; $chart->series[$index]->lineWidth = 1; $chart->series[$index]->marker->radius = 2; $index++; } $colorIndex++; } } } $title = 'Sondas for "' . $ldata['item'] . '" on plan "' . $ldata['plan'] . '"'; $subtitle = 'From ' . $ldata['from'] . ' to ' . $ldata['to']; $chart = chartHeader($chart, $id_chart, $title, $subtitle, $ldata['unit'], null); if (!isset($minClock)) { $minClock = 0; $maxClock = 0; } $chart->xAxis->type = 'datetime'; $chart->tooltip->formatter = new HighchartJsExpr("\n function() {\n var s = '<b>'+ Highcharts.dateFormat('%e. %b %H:%M',this.x) +'</b>'; \n \$.each(this.points, function(i, point) {\n s += '<br/><span style=\"color:'+point.series.color+'\">'+ point.series.name +': '+ point.y +' " . $ldata['unit'] . "</span><b>';\n });\n return s;\n }"); echo "\n" . '<script> function redraw() { chart1.xAxis[0].setExtremes(' . $minClock . ', ' . (round($maxClock / (3600 * 24), 0) * 3600 * 24 + $divide * 1000) . ');} </script>'; //var_dump($chart->chart); return $chart; }
function groupedGraph($chart, $item, $min, $max) { global $cmd; echo '<div class="col-xs-2"><select class="form-control" name="' . $item . '" id="' . $item . '">'; if (!isset($_POST[$item])) { $_POST[$item] = ''; echo '<option selected value="Select">Select</option>'; } else { echo '<option value="Select">Select</option>'; } $itemSelected = ''; $graphs = readGraphs(); foreach ($graphs as $graph) { if (isset($_POST) && $_POST[$item] == $graph['id_graph']) { echo '<option selected value="' . $graph['id_graph'] . '">' . $graph['name'] . '</option>'; $itemSelected = $graph['name']; } else { echo '<option value="' . $graph['id_graph'] . '">' . $graph['name'] . '</option>'; } } echo '</select></div>'; echo '<div class="col-xs-2"><select class="form-control" name="host" id="host">'; if (!isset($_POST['host'])) { $_POST['host'] = ''; echo '<option selected value="Select">Select</option>'; } else { echo '<option value="Select">Select</option>'; } $hostSelected = ''; $hosts = readHosts(0); foreach ($hosts as $host) { $thehost = $host['host']; if (isset($_POST['host']) && $_POST['host'] == $host['id_host']) { $hostSelected = $thehost; echo '<option selected value="' . $host['id_host'] . '">' . $thehost . '</option>'; } else { echo '<option value="' . $host['id_host'] . '">' . $thehost . '</option>'; } } echo '</select></div>'; $index = 0; $days = Days($_POST['date1'], $_POST['date2']); $divide = 1; $divide = getAverage($_POST['avg']); $divide = $divide[1]; if ($_POST['avg'] == "None") { $divideslot = 60 * 30; } else { $divideslot = $divide; } if (is_numeric($_POST['host'])) { $id_host = $_POST['host']; $col = 0; $monitors = readMonitorsForGraph($_POST[$item]); foreach ($monitors as $monitor) { $id_item = $monitor['id_item']; $rawData = loadRAWData($_POST['date1'], 0, $id_item, $_POST['date2'], $id_host); unset($data2); $prev = 0; $next = 0; $history = $rawData['historyList'][$id_host]; if (isset($history)) { $unit = $monitor['unit']; $div = 1; if ($unit == 'bps') { $div = 1024; //BGS011 $unit = 'Mbps'; } unset($finalData); foreach ($history as $ddata) { $tk = round($ddata['clock'] / $divide, 0) * $divide; if (!isset($finalData[$tk])) { $finalData[$tk] = array('clock' => $tk, 'sum' => 0, 'cnt' => 0); } $sum = $finalData[$tk]['sum']; $cnt = $finalData[$tk]['cnt']; $x = $sum + $ddata['value']; $y = $cnt + 1; $finalData[$tk] = array('clock' => $tk, 'sum' => $x, 'cnt' => $y); } foreach ($finalData as $row) { if (!isset($minClock)) { $minClock = $row['clock'] * 1000; $maxClock = $row['clock'] * 1000; } else { if ($minClock > $row['clock'] * 1000) { $minClock = $row['clock'] * 1000; } if ($maxClock < $row['clock'] * 1000) { $maxClock = $row['clock'] * 1000; } } $next = $row['clock']; if ($prev > 0 && $next > 0 && $next - $prev > $divideslot * 1.2) { $data2[] = array(($prev + 1000) * 1000, null); } $prev = $next; $v = null; if ($row['cnt'] != 0) { $v = round($row['sum'] / $row['cnt'] * 1 / $div, 2); } $data2[] = array($row['clock'] * 1000, $v * 1 / $div, 2); } $chart->series[]->name = $monitor['descriptionLong']; $chart->series[$index]->type = 'spline'; $chart->yAxis->title->text = $unit; $chart->series[$index]->color = getColor($col); $chart->series[$index]->data = $data2; $index++; $col++; } } } if (!isset($unit)) { $unit = ""; } $title = $hostSelected . ":" . $itemSelected; $subtitle = 'From ' . $_POST['date1'] . ' to ' . $_POST['date2']; $chart = chartHeader($chart, 'c_' . $item, $title, $subtitle, $unit, null); $chart->xAxis->type = 'datetime'; $chart->plotOptions->series->animation->complete = new HighchartJsExpr(" function () {redraw();}"); if (!isset($minClock)) { $minClock = 0; $maxClock = 0; } if (!isset($unit)) { $unit = ""; } $chart->tooltip->formatter = new HighchartJsExpr("\r\n function() {\r\n var s = '<b>'+ Highcharts.dateFormat('%e. %b %H:%M',this.x) +'</b>'; \r\n \$.each(this.points, function(i, point) {\r\n s += '<br/><span style=\"color:'+point.series.color+'\">'+ point.series.name +': '+ point.y +' " . $unit . "</span><b>';\r\n });\r\n return s;\r\n }"); //return array( 0 => $chart, 1 => $minClock , 2 => $maxClock); echo "\n" . '<script> function redraw() { chart1.xAxis[0].setExtremes(' . ($minClock - 60000) . ', ' . ($maxClock + 60000 * 5) . ');} </script>'; return $chart; }
function GraphHour($chart, $id_chart, $id_plan, $id_item, $tag, $from, &$hgram, &$low, &$mid, &$max, &$dir) { $offset = getOffset(); setTimezone(); $ldata = loadRAWData($from, $id_plan, $id_item); $unit = $ldata['unit']; $div = $ldata['div']; $percentile = calculatePercentile($ldata['allData']); $low = 0; $mid = 0; $max = 0; if (isset($ldata['hostList'])) { foreach ($ldata['hostList'] as $host) { $id_host = $host['id_host']; $nacD = $host['nacD']; $nacU = $host['nacU']; $critical = $host['critical']; $warning = $host['warning']; $nominal = $host['nominal']; if ($warning > 100) { $dir = 1; } else { $dir = 0; } if ($nominal == -1) { $nominal = $nacD; } if ($nominal == -2) { $nominal = $nacU; } if (isset($ldata['historyList'][$id_host])) { foreach ($ldata['historyList'][$id_host] as $key => $row) { $tk = date('H', $row['clock']) * 1; if (!isset($hourAvg[$tk])) { $hourAvg[$tk] = array($tk, 0, 0); } if (!isset($hourQoE[$tk])) { $hourQoE[$tk] = array($tk, 0, 0); } $skip = false; if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) { $skip = true; } if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) { $skip = true; } if (!$skip) { $filteredData[] = array(round($row['value'] / $div, 2)); if ($warning <= 100) { if ($row['value'] >= $nominal * $warning / 100) { $max++; } if ($row['value'] < $nominal * $warning / 100 && $row['value'] >= $nominal * $critical / 100) { $mid++; } if ($row['value'] < $nominal * $critical / 100) { $low++; } } else { if ($row['value'] <= $nominal * $warning / 100) { $max++; } if ($row['value'] > $nominal * $warning / 100 && $row['value'] <= $nominal * $critical / 100) { $mid++; } if ($row['value'] > $nominal * $critical / 100) { $low++; } } $sum = $hourAvg[$tk][1]; $cnt = $hourAvg[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $hourAvg[$tk] = array($tk, $x, $y); if ($row['value'] > $nacD) { $row['value'] = $nacD; } $sum = $hourQoE[$tk][1]; $cnt = $hourQoE[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $hourQoE[$tk] = array($tk, $x, $y); } } } } } $offset = 0; unset($dataQoE); unset($dataAvg); unset($data3); unset($data4); unset($data5); if (isset($hourQoE)) { aasort($hourQoE, 0); unset($k); for ($h = 0; $h < 24; $h++) { if (isset($hourQoE[$h])) { $dataQoE[] = ColorBar($h, $nominal, $warning, $critical, $hourQoE[$h][1] / $hourQoE[$h][2], $div); $data3[] = array('x' => $h, 'y' => round($nominal / $div, 2)); $data4[] = array('x' => $h, 'y' => round($nominal / $div * $warning / 100, 2)); $data5[] = array('x' => $h, 'y' => round($nominal / $div * $critical / 100, 2)); } else { $dataQoE[] = null; $data3[] = array('x' => $h, 'y' => round($nominal / $div, 2)); $data4[] = array('x' => $h, 'y' => round($nominal / $div * $warning / 100, 2)); $data5[] = array('x' => $h, 'y' => round($nominal / $div * $critical / 100, 2)); } } aasort($hourAvg, 0); for ($h = 0; $h < 24; $h++) { if (isset($hourQoE[$h])) { $dataAvg[] = array('x' => $h, 'y' => round($hourQoE[$h][1] / $hourQoE[$h][2] / $div, 2), 'color' => 'silver'); $category[] = str_pad($h . ":00", 5, "0", STR_PAD_LEFT); } else { $dataAvg[] = null; $category[] = str_pad($h . ":00", 5, "0", STR_PAD_LEFT); } } for ($i = 0; $i < count($dataAvg); $i++) { $dataAvg[$i]['y'] = round($dataAvg[$i]['y'] - $dataQoE[$i]['y'], 2); } } if (!isset($filteredData)) { $filteredData = null; $nominal = 0; $category = null; $data3 = null; $data4 = null; $data5 = null; $warning = 0; $critical = 0; $dataAvg = null; $dataQoE = null; } $hgram = createHistogram($filteredData, 0, round($nominal / $div * 2, 0), round($nominal / $div / 6, 0) + 1, 0); $title = 'Average by Hour for "' . $ldata['item'] . '" on plan "' . $ldata['plan'] . '"'; $subtitle = 'From ' . $ldata['from'] . ' to ' . $ldata['to']; $chart = chartHeader($chart, $id_chart, $title, $subtitle, $ldata['unit'], $category); $chart->plotOptions->series->pointPadding = -0.2; if ($ldata['peak'] > $ldata['offpeak']) { $chart->xAxis->plotBands = array(array('label' => array('text' => 'Peak Hour', 'x' => 2, 'style' => array('fontSize' => '8px', 'color' => 'red')), 'from' => $ldata['peak'] - 0.5, 'to' => 24 - 1.5, 'color' => '#FCFFC5'), array('label' => array('text' => 'Peak Hour', 'x' => 2, 'style' => array('fontSize' => '8px', 'color' => 'red')), 'from' => -0.5, 'to' => $ldata['offpeak'] + 1.5, 'color' => '#FCFFC5')); } else { $chart->xAxis->plotBands = array('label' => array('text' => 'Peak Hour', 'x' => 2, 'style' => array('fontSize' => '8px', 'color' => 'red')), 'from' => $ldata['peak'] - 0.5, 'to' => $ldata['offpeak'] + 0.5, 'color' => '#FCFFC5'); } $chart->series[0]->type = 'column'; $chart->title->style->fontSize = '14px'; $chart->subtitle->style->fontSize = '10px'; $chart->series[0]->data = $dataAvg; $chart->series[0]->stack = 0; $chart->series[0]->tooltip->valueSuffix = ' ' . $ldata['unit']; $chart->series[0]->name = 'Sample average for ' . $ldata['plan']; $chart->series[0]->dataLabels->enabled = true; $chart->series[0]->dataLabels->crop = true; $chart->series[0]->dataLabels->overflow = 'none'; $chart->series[0]->dataLabels->align = 'center'; $chart->series[0]->dataLabels->y = -8; $chart->series[0]->dataLabels->color = 'black'; //'#000000'; $chart->series[0]->dataLabels->style->fontSize = '10px'; $chart->series[0]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[0]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.point.stackTotal, 2, '.');}"); $chart->series[1]->type = 'column'; $chart->series[1]->data = $dataQoE; $chart->series[1]->stack = 0; $chart->series[1]->tooltip->valueSuffix = ' ' . $ldata['unit']; $chart->series[1]->name = 'Real average for ' . $ldata['plan']; $chart->series[1]->dataLabels->enabled = true; $chart->series[1]->dataLabels->rotation = -90; $chart->series[1]->dataLabels->crop = false; $chart->series[1]->dataLabels->align = 'center'; $chart->series[1]->dataLabels->color = '#FFFFFF'; $chart->series[1]->dataLabels->style->fontSize = '13px'; $chart->series[1]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[1]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}"); $chart->series[2]->type = 'spline'; $chart->series[2]->data = $data3; $chart->series[2]->stack = 1; $chart->series[2]->tooltip->valueSuffix = ' ' . $ldata['unit']; $chart->series[2]->name = 'Nominal at 100%'; $chart->series[2]->dataLabels->crop = false; $chart->series[2]->dataLabels->enabled = false; $chart->series[2]->dataLabels->rotation = -90; $chart->series[2]->dataLabels->align = 'right'; $chart->series[2]->dataLabels->x = 4; $chart->series[2]->dataLabels->y = 10; $chart->series[2]->dataLabels->color = '#FFFFFF'; $chart->series[2]->dataLabels->style->fontSize = '13px'; $chart->series[2]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[2]->lineWidth = 2; $chart->series[2]->color = 'green'; $chart->series[2]->marker->fillColor = 'green'; $chart->series[2]->marker->radius = 2; $chart->series[2]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}"); $chart->series[3]->type = 'spline'; $chart->series[3]->data = $data4; $chart->series[3]->stack = 2; $chart->series[3]->tooltip->valueSuffix = ' ' . $ldata['unit']; $chart->series[3]->dataLabels->crop = false; $chart->series[3]->name = 'Warning at ' . $warning . '% of the threashold'; $chart->series[3]->dataLabels->enabled = false; $chart->series[3]->dataLabels->rotation = -90; $chart->series[3]->dataLabels->align = 'right'; $chart->series[3]->dataLabels->x = 4; $chart->series[3]->dataLabels->y = 10; $chart->series[3]->dataLabels->color = '#FFFFFF'; $chart->series[3]->dataLabels->style->fontSize = '10px'; $chart->series[3]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[3]->lineWidth = 2; $chart->series[3]->color = '#F79E03'; $chart->series[3]->marker->fillColor = '#F79E03'; $chart->series[3]->marker->radius = 2; $chart->series[3]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}"); $chart->series[4]->type = 'line'; $chart->series[4]->data = $data5; $chart->series[4]->stack = 3; $chart->series[4]->tooltip->valueSuffix = ' ' . $ldata['unit']; $chart->series[4]->dataLabels->crop = false; $chart->series[4]->name = 'Critical at ' . $critical . '% of the threashold'; $chart->series[4]->dataLabels->enabled = false; $chart->series[4]->dataLabels->rotation = -90; $chart->series[4]->dataLabels->align = 'right'; $chart->series[4]->dataLabels->x = 4; $chart->series[4]->dataLabels->y = 10; $chart->series[4]->dataLabels->color = '#FFFFFF'; $chart->series[4]->dataLabels->style->fontSize = '10px'; $chart->series[4]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[4]->lineWidth = 2; $chart->series[4]->marker->radius = 2; $chart->series[4]->color = 'red'; $chart->series[4]->marker->fillColor = 'red'; $chart->series[4]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}"); return $chart; }
function Dashboard($dashboard, $plan, $tag, $move) { $offset = getOffset(); setTimezone(); $r = '-7' - $_GET['move']; $s = '-1' - $_GET['move']; $from = date("Y/m/d", strtotime($r . ' days')); $to = date("Y/m/d", strtotime($s . ' days')); $theDate = date('Y/m/d', strtotime($from . ' -1 days')); while ($theDate != $to) { $theDate = date('Y/m/d', strtotime($theDate . ' +1 days')); $category[] = $theDate; } $dashList = readDashboard($dashboard); $peakHour = str_replace(":", "", "18"); $offPeakHour = str_replace(":", "", "22"); foreach ($dashList as $dash) { $id_item = $dash['id_item']; $descriptionLong = $dash['descriptionLong']; $planList = readPlan(); foreach ($planList as $plan) { unset($weekAvgPeak); unset($weekAvgOffPeak); unset($weekQoEPeak); unset($weekQoEOffPeak); $id_plan = $plan['id_plan']; $ldata = loadRAWData($from, $id_plan, $id_item); $unit = $ldata['unit']; $div = $ldata['div']; $plan = $ldata['plan']; $percentile = calculatePercentile($ldata['allData']); if (isset($ldata['hostList'])) { foreach ($ldata['hostList'] as $host) { $id_host = $host['id_host']; $nacD = $host['nacD']; $nacU = $host['nacU']; $critical = $host['critical']; $warning = $host['warning']; $nominal = $host['nominal']; if ($warning > 100) { $dir = 1; } else { $dir = 0; } if ($nominal == -1) { $nominal = $nacD; } if ($nominal == -2) { $nominal = $nacU; } if (isset($ldata['historyList'][$id_host])) { foreach ($ldata['historyList'][$id_host] as $key => $row) { $tk = date('m/d', $row['clock']); if (!isset($weekAvgPeak[$tk])) { $weekAvgPeak[$tk] = array($tk, 0, 0); } if (!isset($weekAvgOffPeak[$tk])) { $weekAvgOffPeak[$tk] = array($tk, 0, 0); } if (!isset($weekQoEPeak[$tk])) { $weekQoEPeak[$tk] = array($tk, 0, 0); } if (!isset($weekQoEOffPeak[$tk])) { $weekQoEOffPeak[$tk] = array($tk, 0, 0); } $skip = false; if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) { $skip = true; } if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) { $skip = true; } if (!$skip) { if ($row['t'] == 'P') { $sum = $weekAvgPeak[$tk][1]; $cnt = $weekAvgPeak[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $weekAvgPeak[$tk] = array($tk, $x, $y); } if ($row['t'] == 'O') { $sum = $weekAvgOffPeak[$tk][1]; $cnt = $weekAvgOffPeak[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $weekAvgOffPeak[$tk] = array($tk, $x, $y); } if ($row['value'] > $nacD) { $row['value'] = $nominal; } if ($row['t'] == 'P') { $sum = $weekQoEPeak[$tk][1]; $cnt = $weekQoEPeak[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $weekQoEPeak[$tk] = array($tk, $x, $y); } if ($row['t'] == 'O') { $sum = $weekQoEOffPeak[$tk][1]; $cnt = $weekQoEOffPeak[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $weekQoEOffPeak[$tk] = array($tk, $x, $y); } } } } } } unset($dataPeak); unset($dataOffPeak); unset($dataQoEPeak); unset($dataQoEOffPeak); unset($dataNominal); unset($dataWarning); unset($dataCritical); if (isset($weekQoEPeak)) { aasort($weekQoEPeak, 0); aasort($weekQoEOffPeak, 0); aasort($weekAvgPeak, 0); aasort($weekAvgOffPeak, 0); $sumQoEPeak = 0; $cntQoEPeak = 0; $sumQoEOffPeak = 0; $cntQoEOffPeak = 0; foreach (array_reverse($weekQoEPeak) as $tvalue) { $key = $tvalue[0]; $sumQoEPeak += $weekQoEPeak[$key][1]; $cntQoEPeak += $weekQoEPeak[$key][2]; $sumQoEOffPeak += $weekQoEOffPeak[$key][1]; $cntQoEOffPeak += $weekQoEOffPeak[$key][2]; if ($weekQoEPeak[$key][2] > 0) { $dataQoEPeak[$key] = array('x' => $key, 'y' => round($weekQoEPeak[$key][1] / $weekQoEPeak[$key][2] / $div, 2), 'cnt' => $weekQoEPeak[$key][2]); } // ColorBar($x,$nominal,$warning,$critical,$value,$div) if ($weekQoEOffPeak[$key][2] > 0) { $dataQoEOffPeak[$key] = array('x' => $key, 'y' => round($weekQoEOffPeak[$key][1] / $weekQoEOffPeak[$key][2] / $div, 2), 'cnt' => $weekQoEOffPeak[$key][2]); } if ($weekAvgPeak[$key][2] > 0) { $dataAvgPeak[$key] = array('x' => $key, 'y' => round($weekAvgPeak[$key][1] / $weekAvgPeak[$key][2] / $div, 2), 'cnt' => $weekAvgPeak[$key][2]); } if ($weekAvgOffPeak[$key][2] > 0) { $dataAvgOffPeak[$key] = array('x' => $key, 'y' => round($weekAvgOffPeak[$key][1] / $weekAvgOffPeak[$key][2] / $div, 2), 'cnt' => $weekAvgOffPeak[$key][2]); } } //echo $items['descriptionLong'] . " " . $plans['plan'] . " " . $host['host'] ; //var_dump($dataQoEPeak); //echo "<br>"; if (!isset($dataAvgOffPeak)) { $dataAvgOffPeak = null; } if (!isset($dataQoEPeak)) { $dataQoEPeak = null; } if (!isset($dataAvgPeak)) { $dataAvgPeak = null; } if ($cntQoEOffPeak == 0) { $cntQoEOffPeak = 1.0E+22; } if ($cntQoEPeak == 0) { $cntQoEPeak = 9.999999999999999E+22; } $dataList[] = array('descriptionLong' => $descriptionLong, 'plan' => $plan, 'id_plan' => $id_plan, 'id_item' => $id_item, 'QoEPeak' => $dataQoEPeak, 'QoEPeakAvg' => round($sumQoEPeak / $cntQoEPeak / $div, 2), 'QoEOffPeak' => $dataQoEOffPeak, 'QoEOffPeakAvg' => round($sumQoEOffPeak / $cntQoEOffPeak / $div, 2), 'AvgPeak' => $dataAvgPeak, 'AvgOffPeak' => $dataAvgOffPeak, 'nominal' => round($nominal / $div, 2), 'warning' => round($warning, 2), 'critical' => round($critical, 2), 'unit' => $unit, 'cntQoEPeak' => $cntQoEPeak, 'cntQoEOffPeak' => $cntQoEOffPeak, 'category' => $category); } } } echo '<table width="100%" border="0"><tr><td><center>'; echo '<table class="tooltip-tabla">'; $img1 = '<a href="./index.php?route=home0&dashboard=' . $dashboard . '&move=' . ($_GET['move'] + 1) . '"><span class="glyphicon glyphicon-backward"></span></a>'; $img2 = '<a href="./index.php?route=home0&dashboard=' . $dashboard . '&move=' . ($_GET['move'] - 1) . '"><span class="glyphicon glyphicon-forward"></a>'; $img3 = '<a href="./index.php?route=home0&dashboard=' . $dashboard . '&move=' . ($_GET['move'] + 7) . '"><span class="glyphicon glyphicon-fast-backward"></span></a>'; $img4 = '<a href="./index.php?route=home0&dashboard=' . $dashboard . '&move=' . ($_GET['move'] - 7) . '"><span class="glyphicon glyphicon-fast-forward"></a>'; echo '<tbody><tr><th>' . $img1 . " " . $img3 . '</th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th style="text-align: right;">' . $img4 . " " . $img2 . '</th></tr></tbody>'; $t = ''; if (isset($dataList)) { foreach ($dataList as $data) { $timeSlot = 'PEAK'; for ($ij = 1; $ij <= 2; $ij++) { if ($timeSlot == 'PEAK') { $QoE = 'QoEPeak'; $Avg = 'QoEPeakAvg'; $Cnt = 'cntQoEPeak'; } else { $QoE = 'QoEOffPeak'; $Avg = 'QoEOffPeakAvg'; $Cnt = 'cntQoEOffPeak'; } if ($t != $data['descriptionLong']) { $t = $data['descriptionLong']; echo '<tbody><tr><th class="success" colspan="12"><center><big>' . $t . '</big></center></th></tr></tbody>'; echo '<tr>'; echo '<td>Plan</td>'; echo '<td align="center">Left</td>'; echo '<td align="center">Nominal</td>'; //echo '<td align="center">Warning</td>'; //echo '<td align="center">Critical</td>'; echo '<td>Week Average </td>'; for ($i = 0; $i < 7; $i++) { if (date("w", strtotime($data['category'][$i])) == 0) { $sun = '<font color="red">'; } else { $sun = '<font color="black">'; } echo '<td align="right">' . $sun . substr($data['category'][$i], 5) . '</font> </td>'; } echo '</tr>'; } $nominal = $data['nominal']; $warning = $data['warning']; $critical = $data['critical']; $unit = $data['unit']; echo '<tr>'; echo '<td>' . $data['plan'] . ' </td>'; echo '<td>' . $timeSlot . ' </td>'; echo '<td align="right"> ' . number_format($nominal, 2) . ' ' . $unit . ' </td>'; //echo '<td align="right"> ' . number_format($nominal*$warning/100,2) . ' ' . $unit. ' </td>'; //echo '<td align="right"> ' . number_format($nominal*$critical/100,2) . ' ' . $unit. ' </td>'; echo '<td>'; // . '&tag=' . $_GET['tag'] echo '<a href="index.php?route=home0&type=bar&dashboard=' . $dashboard . '&move=' . $_GET['move'] . '&tag=' . $tag . '&idplan=' . $data['id_plan'] . '&from=' . $from . '&iditem=' . $data['id_item'] . '">'; if (!isset($data[$Avg]) || $data[$Avg] == 0) { echo '<center><img align="center" src="./images/Button-Close-icon.png" title="' . number_format($data[$Avg], 2) . ' ' . $unit . "<b>Q:" . '0' . '"></center>'; } else { if ($warning <= 100) { $T1 = $nominal * $warning / 100; $T2 = $nominal * $critical / 100; if ($data[$Avg] >= $T1) { $color = "./images/Green-Ball-icon.png"; } elseif ($data[$Avg] >= $T2 && $data[$Avg] < $T1) { $color = "./images/Yellow-Ball-icon.png"; } else { $color = "./images/Red-Ball-icon.png"; } } else { $T1 = $nominal * $warning / 100; $T2 = $nominal * $critical / 100; if ($data[$Avg] < $T1) { $color = "./images/Green-Ball-icon.png"; } elseif ($data[$Avg] >= $T1 && $data[$Avg] < $T2) { $color = "./images/Yellow-Ball-icon.png"; } else { $color = "./images/Red-Ball-icon.png"; } } echo '<center><img align="center" src="' . $color . '" data-toggle="tooltip" title="(' . number_format($data[$Avg] / $nominal * 100, 2) . '%) ' . number_format($data[$Avg], 2) . ' ' . $unit . " Q:" . $data[$Cnt] . '"></center>'; } echo '</a>'; echo '</span></td>'; for ($i = 0; $i < 7; $i++) { $ky = substr($data['category'][$i], 5); echo '<td>'; //echo '(' . $data[$QoE][$ky]['y'] . ')' . '<br>'; if (!isset($data[$QoE][$ky]['y']) || $data[$QoE][$ky]['y'] == 0 || $data[$QoE][$ky]['y'] == null) { echo '<center><img align="center" src="./images/Button-Close-icon.png" title="No data"></center>'; } else { if ($warning <= 100) { $T1 = $nominal * $warning / 100; $T2 = $nominal * $critical / 100; if ($data[$QoE][$ky]['y'] >= $T1) { $color = "./images/Flag-green-icon.png"; } elseif ($data[$QoE][$ky]['y'] >= $T2 && $data[$QoE][$ky]['y'] < $T1) { $color = "./images/Flag-yellow-icon.png"; } else { $color = "./images/Flag-red-icon.png"; } } else { $T1 = $nominal * $warning / 100; $T2 = $nominal * $critical / 100; if ($data[$QoE][$ky]['y'] < $T1) { $color = "./images/Flag-green-icon.png"; } elseif ($data[$QoE][$ky]['y'] >= $T1 && $data[$QoE][$ky]['y'] < $T2) { $color = "./images/Flag-yellow-icon.png"; } else { $color = "./images/Flag-red-icon.png"; } } echo '<center><img align="center" src="' . $color . '" data-toggle="tooltip" title="' . $data[$QoE][$ky]['x'] . ' ' . number_format($data[$QoE][$ky]['y'], 2) . ' ' . $unit . " Q:" . $data[$QoE][$ky]['cnt'] . '"></center>'; } echo '</span></td>'; } echo '</tr>'; if ($timeSlot == 'PEAK') { $timeSlot = 'OFFPEAK'; } else { $timeSlot = 'PEAK'; } } } } echo '</table>'; echo '</center></td></tr></table>'; }
function GraphPlan($chart, $id_chart, $id_item, $from, $avg, $tag) { //$cache = phpFastCache(); $dt = getDates($from); $item = getItem($id_item); $index = 0; $thezero = '-1'; $average = getAverage($avg); $format = $average[0]; $divide = $average[1]; $color = array('#89A54E', 'none', '#4572A7', 'none', '#AA4643', 'none', '#808080', 'none', 'darksilver', 'none', 'black', 'none', 'magenta', 'none', 'lighrblue', 'none'); $offset = 0; $colorIndex = 0; $cacheAge = 60 * 30; // 30 minutes if ($divide == 60 * 60 * 6) { $offset = -60 * 60 * 2; } if ($divide == 60 * 60 * 12) { $offset = +60 * 60 * 4; } if ($divide == 60 * 60 * 24) { $offset = +60 * 60 * 4; } $planList = readPlan(); foreach ($planList as $plan) { $id_plan = $plan['id_plan']; unset($data2); unset($data3); unset($dataAvg); unset($dataQoE); unset($planAvg); unset($planQoE); unset($percentile); unset($ldata); $ldata = loadRAWData($from, $id_plan, $id_item); $unit = $ldata['unit']; $div = $ldata['div']; $percentile = calculatePercentile($ldata['allData']); if (isset($ldata['hostList'])) { foreach ($ldata['hostList'] as $host) { $id_host = $host['id_host']; $nacD = $host['nacD']; $nacU = $host['nacU']; $critical = $host['critical']; $warning = $host['warning']; $nominal = $host['nominal']; if ($warning > 100) { $dir = 1; } else { $dir = 0; } if ($nominal == -1) { $nominal = $nacD; } if ($nominal == -2) { $nominal = $nacU; } if (isset($ldata['historyList'][$id_host])) { foreach ($ldata['historyList'][$id_host] as $key => $row) { $tk = round($row['clock'] / $divide, 0) * $divide; $skip = false; if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) { $skip = true; } if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) { $skip = true; } if (!$skip) { if (!isset($planAvg[$tk])) { $planAvg[$tk] = array($tk, 0, 0); } if (!isset($planQoE[$tk])) { $planQoE[$tk] = array($tk, 0, 0); } $sum = $planAvg[$tk][1]; $cnt = $planAvg[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $planAvg[$tk] = array($tk, $x, $y); if ($row['value'] > $nacD) { $row['value'] = $nacD; } $sum = $planQoE[$tk][1]; $cnt = $planQoE[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $planQoE[$tk] = array($tk, $x, $y); } } } } } if (isset($planAvg)) { $next = 0; $prev = 0; aasort($planAvg, 0); aasort($planQoE, 0); foreach ($planAvg as $tvalue) { $next = $planAvg[$tvalue[0]][0] + $offset; if ($prev > 0 && $next > 0 && $next - $prev > $divide * 2) { $dataAvg[] = array(($prev + 1000) * 1000, null); $dataQoE[] = array(($prev + 1000) * 1000, null); } $dataAvg[] = array($planAvg[$tvalue[0]][0] * 1000, round($planAvg[$tvalue[0]][1] / $planAvg[$tvalue[0]][2] / $div, 2)); $dataQoE[] = array($planQoE[$tvalue[0]][0] * 1000, round($planQoE[$tvalue[0]][1] / $planQoE[$tvalue[0]][2] / $div, 2)); $prev = $next; } } if (isset($dataAvg)) { if (!isset($minClock)) { $minClock = $dataAvg[0][0]; $maxClock = $dataAvg[count($dataAvg) - 2][0]; } else { if ($dataAvg[0][0] < $minClock) { $minClock = $dataAvg[0][0]; } if ($dataAvg[count($dataAvg) - 2][0] > $maxClock) { $maxClock = $dataAvg[count($dataAvg) - 2][0]; } } if ($_GET['qoe'] == 'Average On' || $_GET['qoe'] == 'Both') { $chart->series[]->name = $ldata['plan'] . '-AVG'; $chart->series[$index]->type = 'spline'; $chart->series[$index]->color = getColor($colorIndex); $chart->series[$index]->data = $dataAvg; $chart->series[$index]->lineWidth = 1; $chart->series[$index]->marker->radius = 2; $index++; } if ($_GET['qoe'] == 'QoE On' || $_GET['qoe'] == 'Both') { $chart->series[]->name = $ldata['plan'] . '-QoE'; $chart->series[$index]->type = 'spline'; $chart->series[$index]->color = getColor($colorIndex); $chart->series[$index]->dashStyle = 'shortdot'; $chart->series[$index]->data = $dataQoE; $chart->series[$index]->lineWidth = 1; $chart->series[$index]->marker->radius = 2; $index++; } $colorIndex++; } } $title = 'Average by Plan for "' . $item; $subtitle = 'From ' . $ldata['from'] . ' to ' . $ldata['to']; $chart = chartHeader($chart, $id_chart, $title, $subtitle, $unit, null); $chart->xAxis->type = 'datetime'; if (!isset($minClock)) { $minclock = 0; $maxClock = 0; } $chart->tooltip->formatter = new HighchartJsExpr("\n function() {\n var s = '<b>'+ Highcharts.dateFormat('%e. %b %H:%M',this.x) + '</b>'; \n \$.each(this.points, function(i, point) {\n s += '<br/><span style=\"color:'+point.series.color+'\">'+ point.series.name +': '+ point.y +' " . $unit . "</span><b>';\n });\n return s;\n }"); echo "\n" . '<script> function redraw() { chart1.xAxis[0].setExtremes(' . round($minClock / (60 * 60), 0) * 60 * 60 . ', ' . round(($maxClock + 60 * 60 * 4 * 1000) / (60 * 60), 0) * 60 * 60 . ');} </script>'; return $chart; }
function GraphBar($chart, $id_chart, $id_plan, $id_item, $tag, $from) { $offset = getOffset(); setTimezone(); $dt = getDates($from); $ldata = loadRAWData($from, $id_plan, $id_item); $unit = $ldata['unit']; $div = $ldata['div']; $percentile = calculatePercentile($ldata['allData']); if (isset($ldata['hostList'])) { foreach ($ldata['hostList'] as $host) { $nacD = $host['nacD']; $nacU = $host['nacU']; $critical = $host['critical']; $warning = $host['warning']; $nominal = $host['nominal']; if ($nominal == -1) { $nominal = $nacD; } if ($nominal == -2) { $nominal = $nacU; } $id_host = $host['id_host']; if (isset($ldata['historyList'][$id_host])) { foreach ($ldata['historyList'][$id_host] as $key => $row) { $tk = date('Y/m/d', $row['clock']); if (!isset($weekAvgPeak[$tk])) { $weekAvgPeak[$tk] = array($tk, 0, 0); } if (!isset($weekAvgOffPeak[$tk])) { $weekAvgOffPeak[$tk] = array($tk, 0, 0); } if (!isset($weekQoEPeak[$tk])) { $weekQoEPeak[$tk] = array($tk, 0, 0); } if (!isset($weekQoEOffPeak[$tk])) { $weekQoEOffPeak[$tk] = array($tk, 0, 0); } $skip = false; if (isset($_SESSION['filter']['P95']) && $row['value'] > $percentile['P95']) { $skip = true; } if (isset($_SESSION['filter']['P5']) && $row['value'] < $percentile['P5']) { $skip = true; } if (!$skip) { if ($row['t'] == 'P') { $sum = $weekAvgPeak[$tk][1]; $cnt = $weekAvgPeak[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $weekAvgPeak[$tk] = array($tk, $x, $y); } if ($row['t'] == 'O') { $sum = $weekAvgOffPeak[$tk][1]; $cnt = $weekAvgOffPeak[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $weekAvgOffPeak[$tk] = array($tk, $x, $y); } if ($row['value'] > $nacD) { $row['value'] = $nominal; } if ($row['t'] == 'P') { $sum = $weekQoEPeak[$tk][1]; $cnt = $weekQoEPeak[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $weekQoEPeak[$tk] = array($tk, $x, $y); } if ($row['t'] == 'O') { $sum = $weekQoEOffPeak[$tk][1]; $cnt = $weekQoEOffPeak[$tk][2]; $x = $sum + $row['value']; $y = $cnt + 1; $weekQoEOffPeak[$tk] = array($tk, $x, $y); } } } } } } if (isset($weekQoEPeak)) { aasort($weekQoEPeak, 0); aasort($weekQoEOffPeak, 0); aasort($weekAvgPeak, 0); aasort($weekAvgOffPeak, 0); $h = -100; foreach ($weekQoEPeak as $tvalue) { $key = $tvalue[0]; if ($weekQoEPeak[$key][2] > 0) { $dataQoEPeak[] = ColorBar($h, $nominal, $warning, $critical, $weekQoEPeak[$key][1] / $weekQoEPeak[$key][2], $div); } else { $dataQoEPeak[] = ColorBar($h, $nominal, $warning, $critical, 0, $div); } // ColorBar($x,$nominal,$warning,$critical,$value,$div) if ($weekQoEOffPeak[$key][2] > 0) { $dataQoEOffPeak[] = ColorBar($h, $nominal, $warning, $critical, $weekQoEOffPeak[$key][1] / $weekQoEOffPeak[$key][2], $div); } else { $dataQoEOffPeak[] = ColorBar($h, $nominal, $warning, $critical, 0, $div); } if ($weekAvgPeak[$key][2] > 0) { $dataAvgPeak[] = array('x' => $h, 'y' => round($weekAvgPeak[$key][1] / $weekAvgPeak[$key][2] / $div, 2), 'color' => 'silver'); } else { $dataAvgPeak[] = array('x' => $h, 'y' => 0, 'color' => 'silver'); } if ($weekAvgOffPeak[$key][2] > 0) { $dataAvgOffPeak[] = array('x' => $h, 'y' => round($weekAvgOffPeak[$key][1] / $weekAvgOffPeak[$key][2] / $div, 2), 'color' => 'silver'); } else { $dataAvgOffPeak[] = array('x' => $h, 'y' => 0, 'color' => 'silver'); } $dataNominal[] = array('x' => $h, 'y' => round($nominal / $div, 2)); $dataWarning[] = array('x' => $h, 'y' => round($nominal / $div * $warning / 100, 2)); $dataCritical[] = array('x' => $h, 'y' => round($nominal / $div * $critical / 100, 2)); $category[$h] = $key; $h++; } for ($i = 0; $i < count($dataAvgPeak); $i++) { $dataAvgPeak[$i]['y'] -= $dataQoEPeak[$i]['y']; $dataAvgOffPeak[$i]['y'] -= $dataQoEOffPeak[$i]['y']; } } if (!isset($category)) { $category = null; $dataAvgPeak = null; $dataQoEPeak = null; $dataAvgOffPeak = null; $dataQoEOffPeak = null; $dataNominal = null; $dataWarning = null; $dataCritical = null; $warning = 0; $critical = 0; } $title = 'Average by Hour for "' . $ldata['item'] . '" on plan "' . $ldata['plan'] . '"'; $subtitle = 'From ' . $ldata['from'] . ' to ' . $ldata['to']; $chart = chartHeader($chart, $id_chart, $title, $subtitle, $ldata['unit'], $category); $fontSize = '10px'; if (count($category) > 15) { $fontSize = '6px'; $chart->plotOptions->series->pointPadding = -1 / 300; } $chart->xAxis->type = 'datetime'; $chart->xAxis->labels->rotation = -90; $chart->xAxis->labels->style->color = "#000000"; $chart->legend->enabled = false; /* $chart->option3d->enabled = true; $chart->option3d->alpha = 45; $chart->option3d->beta = 0; $chart->option3d->depth = 50; $chart->option3d->viewDistance = 25; $chart->plotOptions->column->depth = 25; $chart->option3d->beta = 0; */ $chart->series[0]->type = 'column'; $chart->series[0]->stack = 0; $chart->series[0]->data = $dataAvgPeak; $chart->series[0]->tooltip->valueSuffix = ' ' . $unit; $chart->series[0]->name = 'Sample Average PEAK'; $chart->series[0]->dataLabels->enabled = true; $chart->series[0]->dataLabels->rotation = 0; $chart->series[0]->dataLabels->rotation = 0; $chart->series[0]->dataLabels->crop = false; $chart->series[0]->dataLabels->y = -10; $chart->series[0]->dataLabels->zIndexy = 12; $chart->series[0]->dataLabels->color = '#000000'; $chart->series[0]->dataLabels->style->fontSize = $fontSize; $chart->series[0]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[0]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.point.stackTotal, 2, '.');}"); $chart->series[1]->type = 'column'; $chart->series[1]->stack = 0; $chart->series[1]->data = $dataQoEPeak; $chart->series[1]->name = 'Sample Average PEAK'; $chart->series[1]->dataLabels->enabled = true; $chart->series[1]->dataLabels->crop = false; $chart->series[1]->dataLabels->rotation = -90; $chart->series[1]->dataLabels->align = 'left'; $chart->series[1]->tooltip->valueSuffix = ' ' . $unit; $chart->series[1]->dataLabels->x = 2; $chart->series[1]->dataLabels->color = '#FFFFFF'; $chart->series[1]->dataLabels->style->fontSize = $fontSize; $chart->series[1]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[1]->dataLabels->formatter = new HighchartJsExpr("function() { return 'PEAK: ' + Highcharts.numberFormat(this.y, 2, '.');}"); $chart->series[2]->type = 'column'; $chart->series[2]->stack = 1; $chart->series[2]->data = $dataAvgOffPeak; $chart->series[2]->name = 'Real Average OFFPEAK'; $chart->series[2]->tooltip->valueSuffix = ' ' . $unit; $chart->series[2]->dataLabels->crop = false; $chart->series[2]->dataLabels->enabled = true; $chart->series[2]->dataLabels->rotation = 0; $chart->series[2]->dataLabels->align = 'center'; $chart->series[2]->dataLabels->y = -10; $chart->series[2]->dataLabels->zIndexy = 12; $chart->series[2]->dataLabels->color = '#000000'; $chart->series[2]->dataLabels->style->fontSize = $fontSize; $chart->series[2]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[2]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.point.stackTotal, 2, '.');}"); $chart->series[3]->type = 'column'; $chart->series[3]->stack = 1; $chart->series[3]->data = $dataQoEOffPeak; $chart->series[3]->tooltip->valueSuffix = ' ' . $unit; $chart->series[3]->name = 'Real Average OFFPEAK'; $chart->series[3]->dataLabels->crop = false; $chart->series[3]->dataLabels->enabled = true; $chart->series[3]->dataLabels->rotation = -90; $chart->series[3]->dataLabels->align = 'left'; $chart->series[3]->dataLabels->x = 2; $chart->series[3]->dataLabels->color = '#FFFFFF'; $chart->series[3]->dataLabels->style->fontSize = $fontSize; $chart->series[3]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[3]->dataLabels->formatter = new HighchartJsExpr("function() { return 'OFFPEAK: ' +Highcharts.numberFormat(this.y, 2, '.');}"); $chart->series[4]->type = 'spline'; $chart->series[4]->data = $dataNominal; $chart->series[4]->stack = 2; $chart->series[4]->tooltip->valueSuffix = ' ' . $unit; $chart->series[4]->dataLabels->crop = false; $chart->series[4]->name = 'Nominal PEAK'; $chart->series[4]->dataLabels->enabled = false; $chart->series[4]->dataLabels->rotation = -90; $chart->series[4]->dataLabels->align = 'right'; $chart->series[4]->dataLabels->x = 4; $chart->series[4]->dataLabels->y = 10; $chart->series[4]->dataLabels->color = '#FFFFFF'; $chart->series[4]->dataLabels->style->fontSize = $fontSize; $chart->series[4]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[4]->lineWidth = 2; $chart->series[4]->color = 'green'; $chart->series[4]->marker->fillColor = 'green'; $chart->series[4]->marker->radius = 2; $chart->series[4]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}"); $chart->series[5]->type = 'spline'; $chart->series[5]->data = $dataWarning; $chart->series[5]->stack = 2; $chart->series[5]->tooltip->valueSuffix = ' ' . $unit; $chart->series[5]->dataLabels->crop = false; $chart->series[5]->name = $warning . '% of the plan'; $chart->series[5]->dataLabels->enabled = false; $chart->series[5]->dataLabels->rotation = -90; $chart->series[5]->dataLabels->align = 'right'; $chart->series[5]->dataLabels->x = 4; $chart->series[5]->dataLabels->y = 10; $chart->series[5]->dataLabels->color = '#FFFFFF'; $chart->series[5]->dataLabels->style->fontSize = $fontSize; $chart->series[5]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[5]->lineWidth = 2; $chart->series[5]->color = '#F79E03'; $chart->series[5]->marker->fillColor = '#F79E03'; $chart->series[5]->marker->radius = 2; $chart->series[5]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}"); $chart->series[6]->type = 'spline'; $chart->series[6]->data = $dataCritical; $chart->series[6]->stack = 2; $chart->series[6]->tooltip->valueSuffix = ' ' . $unit; $chart->series[6]->dataLabels->crop = false; $chart->series[6]->name = $critical . '% of the plan'; $chart->series[6]->dataLabels->enabled = false; $chart->series[6]->dataLabels->rotation = -90; $chart->series[6]->dataLabels->align = 'right'; $chart->series[6]->dataLabels->x = 4; $chart->series[6]->dataLabels->y = 10; $chart->series[6]->dataLabels->color = '#FFFFFF'; $chart->series[6]->dataLabels->style->fontSize = $fontSize; $chart->series[6]->dataLabels->style->fontFamily = 'Verdana, sans-serif'; $chart->series[6]->lineWidth = 2; $chart->series[6]->color = 'red'; $chart->series[6]->marker->fillColor = 'red'; $chart->series[6]->marker->radius = 2; $chart->series[6]->dataLabels->formatter = new HighchartJsExpr("function() { return Highcharts.numberFormat(this.y, 2, '.');}"); return $chart; }
function graphCompare($chart, $item, $min, $max, $ch) { echo '<div class="col-xs-2"><select class="form-control" name="' . $item . '" id="' . $item . '">'; if (!isset($_POST[$item])) { $_POST[$item] = ''; echo '<option selected value="Seleccione">Select</option>'; } else { echo '<option value="Seleccione">Select</option>'; } $itemsSelected = ''; $monitors = readMonitors(); foreach ($monitors as $items) { if (isset($_POST) && $_POST[$item] == $items['id_item']) { $itemsSelected = $items['descriptionLong']; echo '<option selected value="' . $items['id_item'] . '">' . $items['descriptionLong'] . '</option>'; } else { echo '<option value="' . $items['id_item'] . '">' . $items['descriptionLong'] . '</option>'; } $itemsArry[$items['id_item']] = array("unit" => $items['unit'], "name" => $items['descriptionLong']); } echo '</select></div>'; $index = 0; if (isset($_POST['date1'])) { $days = Days($_POST['date1'], $_POST['date2']); } if (!isset($_POST['avg'])) { $_POST['avg'] = '4 Hours'; } $divide = getAverage($_POST['avg']); $divide = $divide[1]; /* $days = 1; $days = Days($_POST['date1'], $_POST['date2']); if ($days > 7 * 1) $format = '%Y/%m/%d %H:00:00'; if ($days > 7 * 2) $divide = 3600 * 4; if ($days > 7 * 4) $divide = 3600 * 6; if ($days > 7 * 5) $format = '%Y/%m/%d'; if ($days > 7 * 8) $divide = 3600 * 24 * 7; if ($days > 7 * 16) $format = '%Y/%m'; */ $col = 0; $timeStart = strtotime($_POST['date1'] . ' 00:00:00'); $timeFinish = strtotime($_POST['date2'] . ' 23:59:59'); $hosts = readHosts(0); foreach ($hosts as $r) { $unit = getUnit($_POST[$item]); $div = 1; if ($unit == 'bps') { $div = 1024; ///BUGS BGS009 $unit = 'Mbps'; } $sonda = $r['host']; $id_host = $r['id_host']; $id_item = $_POST[$item]; if ($id_item > 0) { $rawData = loadRAWData($_POST['date1'], 0, $id_item, $_POST['date2'], $id_host); $history = $rawData['historyList'][$id_host]; unset($finalData); unset($data2); if (isset($history)) { foreach ($history as $ddata) { $tk = round($ddata['clock'] / $divide, 0) * $divide; if (!isset($finalData[$tk])) { $finalData[$tk] = array('clock' => $tk, 'sum' => 0, 'cnt' => 0); } $sum = $finalData[$tk]['sum']; $cnt = $finalData[$tk]['cnt']; $x = $sum + $ddata['value']; $y = $cnt + 1; $finalData[$tk] = array('clock' => $tk, 'sum' => $x, 'cnt' => $y); } $data2[] = array($timeStart * 1000, null); foreach ($finalData as $row) { if ($row['cnt'] != 0) { $v = round($row['sum'] / $row['cnt'] * 1 / $div, 2); } $data2[] = array($row['clock'] * 1000, $v * 1 / $div, 2); if (!isset($minClock)) { $minClock = $row['clock']; $maxClock = $row['clock']; $maxClockIndex = $index; } else { if ($minClock > $row['clock']) { $minClock = $row['clock']; } if ($maxClock < $row['clock']) { $maxClock = $row['clock']; $maxClockIndex = $index; } } } } if (isset($data2)) { $data2[] = array($timeFinish * 1000, null); $chart->yAxis->title->text = $unit; $chart->series[]->name = $sonda; $chart->series[$index]->type = 'spline'; $chart->series[$index]->data = $data2; $chart->series[$index]->color = getColor($col); $index++; } unset($rawData); unset($history); $col++; } } if (!isset($maxClock)) { $maxClock = 0; $minClock = 0; } if (!isset($unit)) { $unit = ""; } $title = getItem($_POST[$item]); $subtitle = 'From ' . $_POST['date1'] . ' to ' . $_POST['date2']; $chart = chartHeader($chart, 'c_' . $item, $title, $subtitle, $unit, null); $chart->xAxis->type = 'datetime'; //$chart->plotOptions->series->animation->complete = new HighchartJsExpr(" function () {redraw" . $ch . "();}"); $chart->tooltip->formatter = new HighchartJsExpr("\n function() {\n var s = '<b>'+ Highcharts.dateFormat('%e. %b %H:%M',this.x) +'</b>'; \n \$.each(this.points, function(i, point) {\n s += '<br/><span style=\"color:'+point.series.color+'\">'+ point.series.name +': '+ point.y +' " . $unit . "</span><b>';\n });\n return s;\n }"); //echo "\n" . '<script> function redraw' . $ch . '() { ' . $ch . '.xAxis['.$maxClockIndex.'].setExtremes(' . $minClock* 1000 . ', ' . $maxClock* 1000 . ');} </script>'; return $chart; }