diff --git a/web/api/stats_rates.php b/web/api/stats_rates.php new file mode 100644 index 0000000..d0801de --- /dev/null +++ b/web/api/stats_rates.php @@ -0,0 +1,51 @@ +true,'data'=>[]]); exit; } + +$raw = file_get_contents($path); +$state = json_decode($raw, true); +if (!is_array($state) || !is_array($state['data'] ?? null)) { + echo json_encode(['ok'=>true,'data'=>[]]); exit; +} + +usort($state['data'], function($a,$b){ + return (int)($a['t'] ?? 0) <=> (int)($b['t'] ?? 0); +}); + +$out = []; +$prev = null; +foreach ($state['data'] as $s) { + $t = (int)($s['t'] ?? 0); + if ($t <= 0) continue; + + $rx_total = (int)($s['read'] ?? ($s['bytes_read'] ?? ($s['rx'] ?? 0))); + $tx_total = (int)($s['written'] ?? ($s['bytes_written'] ?? ($s['tx'] ?? 0))); + + $rx_mbps = 0.0; $tx_mbps = 0.0; + if ($prev) { + $dt = max(1, $t - $prev['t']); + $drx = max(0, $rx_total - $prev['rx_total']); + $dtx = max(0, $tx_total - $prev['tx_total']); + $rx_mbps = ($drx * 8) / $dt / 1_000_000.0; + $tx_mbps = ($dtx * 8) / $dt / 1_000_000.0; + } + + $out[] = [ + 'ts' => $t * 1000, + 'rx_mbps' => round($rx_mbps, 3), + 'tx_mbps' => round($tx_mbps, 3), + 'rx_total' => $rx_total, + 'tx_total' => $tx_total, + ]; + $prev = ['t'=>$t, 'rx_total'=>$rx_total, 'tx_total'=>$tx_total]; +} + +if (count($out) > 1440) $out = array_slice($out, -1440); +echo json_encode(['ok'=>true,'data'=>$out]); \ No newline at end of file diff --git a/web/index.php b/web/index.php index afb3cc2..a12638f 100644 --- a/web/index.php +++ b/web/index.php @@ -87,14 +87,14 @@ auth_require();