fix: correct AIVPN byte counter mapping to match server-to-client and client-to-server traffic semantics
This commit is contained in:
@@ -367,18 +367,20 @@ class ServerMonitoring
|
|||||||
$rawOutNow = (int) ($aivpn['bytes_out'] ?? 0);
|
$rawOutNow = (int) ($aivpn['bytes_out'] ?? 0);
|
||||||
|
|
||||||
// Detect counter rollover/reset in AIVPN source and preserve cumulative totals.
|
// Detect counter rollover/reset in AIVPN source and preserve cumulative totals.
|
||||||
|
// bytes_in -> received (download), bytes_out -> sent (upload)
|
||||||
if ($rawInNow < $rawInPrev) {
|
if ($rawInNow < $rawInPrev) {
|
||||||
$offsetIn = max($offsetIn + $rawInPrev, $prevSent);
|
$offsetIn = max($offsetIn + $rawInPrev, $prevReceived);
|
||||||
}
|
}
|
||||||
if ($rawOutNow < $rawOutPrev) {
|
if ($rawOutNow < $rawOutPrev) {
|
||||||
$offsetOut = max($offsetOut + $rawOutPrev, $prevReceived);
|
$offsetOut = max($offsetOut + $rawOutPrev, $prevSent);
|
||||||
}
|
}
|
||||||
|
|
||||||
$candidateSent = $offsetIn + $rawInNow;
|
$candidateReceived = $offsetIn + $rawInNow;
|
||||||
$candidateReceived = $offsetOut + $rawOutNow;
|
$candidateSent = $offsetOut + $rawOutNow;
|
||||||
|
|
||||||
// AIVPN stores per-client counters as bytes_in/bytes_out.
|
// AIVPN bytes_in = data downloaded BY client (server→client)
|
||||||
// Map to panel semantics: sent=client upload, received=client download.
|
// AIVPN bytes_out = data uploaded BY client (client→server)
|
||||||
|
// Verified via `aivpn-server --list-clients` where bytes_in = DOWNLOAD column
|
||||||
$bytesSent = max($prevSent, $candidateSent);
|
$bytesSent = max($prevSent, $candidateSent);
|
||||||
$bytesReceived = max($prevReceived, $candidateReceived);
|
$bytesReceived = max($prevReceived, $candidateReceived);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user