Files
roro9stack/lib/net/src/traffic.h
T
twislaandClaude Opus 5.5 70bb2a4137 S1 #11: bytes read and written, counted per network service
A Counted<> wrapper around the network clients adds what goes through
their buffer read and write to a per-service counter (IRC, Gemini, Debug
Console, Updates); the single-byte calls and print() end up there, so
each byte counts once. `net` prints the totals. For TLS it's the plain
text the service sees.

Checked on the device: a Gemini fetch counts 164,986 in (a 164,970-byte
page and its 16-byte header) and 42 out (the URL and CRLF).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
2026-10-06 01:10:55 +02:00

27 lines
832 B
C++

#pragma once
#include <cstddef>
#include <cstdint>
#include <string>
namespace roro::net {
// Bytes each network service has read and written since boot (S1, Q121), as the service sees
// them: for TLS connections that's the plain text, without the handshake or record overhead.
// Counted from the services' own tasks, read from the main loop.
enum class User : uint8_t { Irc, Gemini, DebugConsole, Updates, Count };
const char* userName(User user);
struct Traffic {
uint32_t in = 0, out = 0;
};
void received(User user, size_t bytes);
void sent(User user, size_t bytes);
Traffic traffic(User user);
void resetTraffic(); // for tests
uint32_t bytesPerSecond(uint32_t before, uint32_t now, uint32_t elapsedMs);
std::string formatTraffic(uint32_t bytes); // "999 B", "1.5 KB", "12 KB", "1.7 MB"
} // namespace roro::net