Public Access
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
27 lines
832 B
C++
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
|