diff options
Diffstat (limited to 'pages/stats.inc')
-rw-r--r-- | pages/stats.inc | 504 |
1 files changed, 0 insertions, 504 deletions
diff --git a/pages/stats.inc b/pages/stats.inc deleted file mode 100644 index 742fb87..0000000 --- a/pages/stats.inc +++ /dev/null @@ -1,504 +0,0 @@ -<?php - -require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.inc"; global $title; global $isLoggedIn; global $lang; global $pages; -require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc'; - -if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/stats.json")) file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/stats.json", "{}"); - -$cache = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/stats.json"), true); - -?> - -<script src="/assets/editor/chart.js"></script> - -<br> -<div class="container"> - <div id="page-content"> - <h2>Statistics</h2> - <?php - - if (!isset($cache["content"]) || date('Y-m-d') !== $cache["day"]): ob_start(); - - $switchesRaindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd/switches.json"), true); - $switchesCloudburst = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc/switches.json"), true); - - $weeks = []; - $weeksRectified = []; - - $lastWeek = 0; - foreach ($switchesRaindrops as $switch) { - $week = date('YW', strtotime($switch["timestamp"])); - if ($lastWeek === 0) $lastWeek = $week; - - if (!isset($weeks[$week])) $weeks[$week] = [ - "cloudburst" => 0, - "raindrops" => 0, - "total" => 0, - "end" => strtotime($switch["timestamp"]), - "start" => null - ]; - - if ($week !== $lastWeek) { - if (isset($weeks[$lastWeek])) { - $weeks[$lastWeek]["start"] = strtotime($switch["timestamp"]); - $lastWeek = $week; - } - } - - $weeks[$week]["raindrops"]++; - $weeks[$week]["total"]++; - } - - $lastWeek = 0; - foreach ($switchesCloudburst as $switch) { - $week = date('YW', strtotime($switch["timestamp"])); - if ($lastWeek === 0) $lastWeek = $week; - - if (!isset($weeks[$week])) $weeks[$week] = [ - "cloudburst" => 0, - "raindrops" => 0, - "total" => 0, - "end" => strtotime($switch["timestamp"]), - "start" => null - ]; - - if ($week !== $lastWeek) { - if (isset($weeks[$lastWeek])) { - $weeks[$lastWeek]["start"] = strtotime($switch["timestamp"]); - $lastWeek = $week; - } - } - - $weeks[$week]["cloudburst"]++; - $weeks[$week]["total"]++; - } - - $index = 0; - foreach ($weeks as $id => $week) { - if ($index >= 20) continue; - $weeksRectified[$id] = $week; - $index++; - } - - $weeksRectified = array_filter(array_reverse($weeksRectified), function ($i) { - return $i["start"] > 1651363200; - }); - - $members = []; - $frontersMonth = []; - - $fronts = []; - $lastFrontIDs = []; - - foreach (array_reverse($switchesRaindrops) as $switch) { - foreach ($lastFrontIDs as $frontID) { - $fronts[$frontID]["end"] = strtotime($switch["timestamp"]); - } - $lastFrontIDs = []; - - $index = 0; foreach ($switch["members"] as $member) { - if (strtotime($switch["timestamp"]) - (time() - 86400*30) < 0) continue; - $fronts[$switch["id"] . ":" . $index] = [ - "member" => $member, - "start" => strtotime($switch["timestamp"]), - "end" => strtotime(date('c')), - "duration" => null - ]; - $lastFrontIDs[] = $switch["id"] . ":" . $index; - } $index++; - } - - foreach ($fronts as $id => $front) { - $fronts[$id]["duration"] = $front["end"] - $front["start"]; - - if (!($front["start"] - (time() - 86400*30) < 0)) { - if (!isset($members[$front["member"]])) $members[$front["member"]] = [ - "time" => 0, - "name" => getMemberWithoutSystem($front["member"])["display_name"], - "color" => getMemberWithoutSystem($front["member"])["color"], - ]; - $members[$front["member"]]["time"] += $fronts[$id]["duration"]; - } - } - - foreach ($fronts as $front) { - if (!isset($frontersMonth[date('Y-m', $front["start"])])) $frontersMonth[date('Y-m', $front["start"])] = []; - if (!isset($frontersMonth[date('Y-m', $front["start"])][$front["member"]])) $frontersMonth[date('Y-m', $front["start"])][$front["member"]] = 0; - $frontersMonth[date('Y-m', $front["start"])][$front["member"]] += $front["duration"]; - } - - $fronts = []; - $lastFrontIDs = []; - - foreach (array_reverse($switchesCloudburst) as $switch) { - foreach ($lastFrontIDs as $frontID) { - $fronts[$frontID]["end"] = strtotime($switch["timestamp"]); - } - $lastFrontIDs = []; - - $index = 0; foreach ($switch["members"] as $member) { - $fronts[$switch["id"] . ":" . $index] = [ - "member" => $member, - "start" => strtotime($switch["timestamp"]), - "end" => strtotime(date('c')), - "duration" => null - ]; - $lastFrontIDs[] = $switch["id"] . ":" . $index; - } $index++; - } - - foreach ($fronts as $id => $front) { - $fronts[$id]["duration"] = $front["end"] - $front["start"]; - - if (!($front["start"] - (time() - 86400*30) < 0)) { - if (!isset($members[$front["member"]])) $members[$front["member"]] = [ - "time" => 0, - "name" => getMemberWithoutSystem($front["member"])["display_name"], - "color" => getMemberWithoutSystem($front["member"])["color"], - ]; - $members[$front["member"]]["time"] += $fronts[$id]["duration"]; - } - } - - foreach ($fronts as $front) { - if (!isset($frontersMonth[date('Y-m', $front["start"])])) $frontersMonth[date('Y-m', $front["start"])] = []; - if (!isset($frontersMonth[date('Y-m', $front["start"])][$front["member"]])) $frontersMonth[date('Y-m', $front["start"])][$front["member"]] = 0; - $frontersMonth[date('Y-m', $front["start"])][$front["member"]] += $front["duration"]; - } - - $fronts = array_reverse($fronts); - uasort($members, function ($a, $b) { - return $b["time"] - $a["time"]; - }); - - $frontersMonthRectified = []; - foreach ($frontersMonth as $monthID => $month) { - $thisMonth = []; - - foreach ($month as $id => $time) { - $thisMonth[$id] = [ - "duration" => $time, - "name" => getMemberWithoutSystem($id)["display_name"], - "color" => getMemberWithoutSystem($id)["color"] - ]; - } - - $frontersMonthRectified[$monthID] = $thisMonth; - } - - uasort($frontersMonthRectified, function ($a, $b) use ($frontersMonthRectified) { - return strtotime(array_search($a, $frontersMonthRectified) . "-01") - strtotime(array_search($b, $frontersMonthRectified) . "-01"); - }); - - $frontersMonthMembers = []; - foreach ($frontersMonthRectified as $month => $fronters) { - foreach ($fronters as $fronter => $data) { - foreach (scoreOrderGlobal() as $member) { - if (!isset($frontersMonthMembers[$member["id"]])) $frontersMonthMembers[$member["id"]] = []; - } - } - - foreach ($frontersMonthMembers as $key => $member) { - $frontersMonthMembers[$key][$month] = $frontersMonthRectified[$month][$key] ?? [ - "duration" => 0 - ]; - } - } - - ?> - - <h3>Switches per week</h3> - <canvas id="graph-00" style="width: 100%; height: 300px; max-height: 100%;"></canvas> - <script> - const ctx0 = document.getElementById('graph-00').getContext('2d'); - window.chart00 = [ - { - label: "Raindrops System", - data: JSON.parse(`<?= json_encode(array_map(function ($i) { - return $i["raindrops"]; - }, array_values($weeksRectified))) ?>`), - borderColor: "#e598ff" - }, - { - label: "Cloudburst System", - data: JSON.parse(`<?= json_encode(array_map(function ($i) { - return $i["cloudburst"]; - }, array_values($weeksRectified))) ?>`), - borderColor: "#98e0ff" - }, - { - label: "All systems", - data: JSON.parse(`<?= json_encode(array_map(function ($i) { - return $i["total"]; - }, array_values($weeksRectified))) ?>`), - borderColor: "rgba(160,255,153,0.5)", - borderDash: [5] - } - ]; - const graph0 = new Chart(ctx0, { - type: 'line', - data: { - labels: JSON.parse(`<?= json_encode(array_map(function ($i) { - return date("M d", $i["start"]) . " to " . date("M d", $i["end"]); - }, array_values($weeksRectified))) ?>`), - datasets: window.chart00 - }, - options: { - animation: { - duration: 0 - }, - scales: { - y: { - beginAtZero: true, - grid: { - color: "rgba(255,255,255,0.25)" - } - } - }, - plugins: { - legend: { - display: false - }, - tooltip: { - intersect: false - } - } - } - }); - </script> - - <h3 style="margin-top: 15px;">Average switches per day of the week</h3> - <canvas id="graph-01" style="width: 100%; height: 300px; max-height: 100%;"></canvas> - <?php - - $switchesDaysRaindrops = [0, 0, 0, 0, 0, 0, 0]; - $amountDaysRaindrops = [0, 0, 0, 0, 0, 0, 0]; - $switchDoWRaindrops = [0, 0, 0, 0, 0, 0, 0]; - $daysRaindrops = []; - - $switchesDaysCloudburst = [0, 0, 0, 0, 0, 0, 0]; - $amountDaysCloudburst = [0, 0, 0, 0, 0, 0, 0]; - $switchDoWCloudburst = [0, 0, 0, 0, 0, 0, 0]; - $daysCloudburst = []; - - foreach ($switchesCloudburst as $switch) { - if (!in_array(date("Y-m-d", strtotime($switch["timestamp"])), $daysCloudburst)) { - $daysCloudburst[] = date("Y-m-d", strtotime($switch["timestamp"])); - $amountDaysCloudburst[(int)date('N', strtotime($switch["timestamp"])) - 1]++; - } - - $switchesDaysCloudburst[(int)date('N', strtotime($switch["timestamp"])) - 1]++; - } - - $switchDoWCloudburst = [ - $switchesDaysCloudburst[0] / $amountDaysCloudburst[0], - $switchesDaysCloudburst[1] / $amountDaysCloudburst[1], - $switchesDaysCloudburst[2] / $amountDaysCloudburst[2], - $switchesDaysCloudburst[3] / $amountDaysCloudburst[3], - $switchesDaysCloudburst[4] / $amountDaysCloudburst[4], - $switchesDaysCloudburst[5] / $amountDaysCloudburst[5], - $switchesDaysCloudburst[6] / $amountDaysCloudburst[6] - ]; - - foreach ($switchesRaindrops as $switch) { - if (!in_array(date("Y-m-d", strtotime($switch["timestamp"])), $daysRaindrops)) { - $daysRaindrops[] = date("Y-m-d", strtotime($switch["timestamp"])); - $amountDaysRaindrops[(int)date('N', strtotime($switch["timestamp"])) - 1]++; - } - - $switchesDaysRaindrops[(int)date('N', strtotime($switch["timestamp"])) - 1]++; - } - - $switchDoWRaindrops = [ - $switchesDaysRaindrops[0] / $amountDaysRaindrops[0], - $switchesDaysRaindrops[1] / $amountDaysRaindrops[1], - $switchesDaysRaindrops[2] / $amountDaysRaindrops[2], - $switchesDaysRaindrops[3] / $amountDaysRaindrops[3], - $switchesDaysRaindrops[4] / $amountDaysRaindrops[4], - $switchesDaysRaindrops[5] / $amountDaysRaindrops[5], - $switchesDaysRaindrops[6] / $amountDaysRaindrops[6] - ]; - - $switchDoW = [ - $switchDoWCloudburst[0] + $switchDoWRaindrops[0], - $switchDoWCloudburst[1] + $switchDoWRaindrops[1], - $switchDoWCloudburst[2] + $switchDoWRaindrops[2], - $switchDoWCloudburst[3] + $switchDoWRaindrops[3], - $switchDoWCloudburst[4] + $switchDoWRaindrops[4], - $switchDoWCloudburst[5] + $switchDoWRaindrops[5], - $switchDoWCloudburst[6] + $switchDoWRaindrops[6] - ]; - - ?> - <script> - const ctx1 = document.getElementById('graph-01').getContext('2d'); - window.chart01 = [ - { - label: "Switches per week", - data: JSON.parse(`<?= json_encode($switchDoW) ?>`), - backgroundColor: [ - 'rgba(255, 99, 132, 0.2)', - 'rgba(255, 159, 64, 0.2)', - 'rgba(255, 205, 86, 0.2)', - 'rgba(75, 192, 192, 0.2)', - 'rgba(54, 162, 235, 0.2)', - 'rgba(153, 102, 255, 0.2)', - 'rgba(201, 203, 207, 0.2)' - ], - borderColor: [ - 'rgb(255, 99, 132)', - 'rgb(255, 159, 64)', - 'rgb(255, 205, 86)', - 'rgb(75, 192, 192)', - 'rgb(54, 162, 235)', - 'rgb(153, 102, 255)', - 'rgb(201, 203, 207)' - ], - borderWidth: 1 - } - ]; - const graph1 = new Chart(ctx1, { - type: 'bar', - data: { - labels: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], - datasets: window.chart01 - }, - options: { - animation: { - duration: 0 - }, - scales: { - y: { - grid: { - color: "rgba(255,255,255,0.25)" - } - } - }, - plugins: { - legend: { - display: false - }, - tooltip: { - intersect: false - } - } - } - }); - </script> - - <h3 style="margin-top: 15px;">Switches per hour of the day</h3> - <canvas id="graph-02" style="width: 100%; height: 300px; max-height: 100%;"></canvas> - <?php - - $switchHoursRaindrops = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - $switchHoursCloudburst = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - - foreach ($switchesCloudburst as $switch) { - $switchHoursCloudburst[(int)date('G', strtotime($switch["timestamp"]))]++; - } - - foreach ($switchesRaindrops as $switch) { - $switchHoursRaindrops[(int)date('G', strtotime($switch["timestamp"]))]++; - } - - $switchHours = [ - $switchHoursRaindrops[0] + $switchHoursCloudburst[0], - $switchHoursRaindrops[1] + $switchHoursCloudburst[1], - $switchHoursRaindrops[2] + $switchHoursCloudburst[2], - $switchHoursRaindrops[3] + $switchHoursCloudburst[3], - $switchHoursRaindrops[4] + $switchHoursCloudburst[4], - $switchHoursRaindrops[5] + $switchHoursCloudburst[5], - $switchHoursRaindrops[6] + $switchHoursCloudburst[6], - $switchHoursRaindrops[7] + $switchHoursCloudburst[7], - $switchHoursRaindrops[8] + $switchHoursCloudburst[8], - $switchHoursRaindrops[9] + $switchHoursCloudburst[9], - $switchHoursRaindrops[10] + $switchHoursCloudburst[10], - $switchHoursRaindrops[11] + $switchHoursCloudburst[11], - $switchHoursRaindrops[12] + $switchHoursCloudburst[12], - $switchHoursRaindrops[13] + $switchHoursCloudburst[13], - $switchHoursRaindrops[14] + $switchHoursCloudburst[14], - $switchHoursRaindrops[15] + $switchHoursCloudburst[15], - $switchHoursRaindrops[16] + $switchHoursCloudburst[16], - $switchHoursRaindrops[17] + $switchHoursCloudburst[17], - $switchHoursRaindrops[18] + $switchHoursCloudburst[18], - $switchHoursRaindrops[19] + $switchHoursCloudburst[19], - $switchHoursRaindrops[20] + $switchHoursCloudburst[20], - $switchHoursRaindrops[21] + $switchHoursCloudburst[21], - $switchHoursRaindrops[22] + $switchHoursCloudburst[22], - $switchHoursRaindrops[23] + $switchHoursCloudburst[23], - ]; - - ?> - <script> - const ctx2 = document.getElementById('graph-02').getContext('2d'); - window.chart02 = [ - { - label: "Switches per hour of day", - data: JSON.parse(`<?= json_encode($switchHours) ?>`), - borderColor: "rgb(160,255,153)" - } - ]; - const graph2 = new Chart(ctx2, { - type: 'line', - data: { - labels: [ - "12am", - "1am", - "2am", - "3am", - "4am", - "5am", - "6am", - "7am", - "8am", - "9am", - "10am", - "11am", - "12pm", - "1pm", - "2pm", - "3pm", - "4pm", - "5pm", - "6pm", - "7pm", - "8pm", - "9pm", - "10pm", - "11pm" - ], - datasets: window.chart02 - }, - options: { - animation: { - duration: 0 - }, - scales: { - y: { - beginAtZero: true, - grid: { - color: "rgba(255,255,255,0.25)" - } - } - }, - plugins: { - legend: { - display: false - }, - tooltip: { - intersect: false - } - } - } - }); - </script> - <?php $cache["content"] = ob_get_contents(); $cache["day"] = date('Y-m-d'); ob_end_clean(); endif; - - echo($cache["content"]); - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/stats.json", json_encode($cache)); - - ?> - </div> -</div> - -<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/footer.inc'; ?> |