/workspaces/astro/sol3-sdk/cpp/sol3/net/tcp_telemetry.h Source File

Space-ng SDK: /workspaces/astro/sol3-sdk/cpp/sol3/net/tcp_telemetry.h Source File
Space-ng SDK
tcp_telemetry.h
Go to the documentation of this file.
1 // Copyright (c) Space-ng, inc. All rights reserved.
2 
3 #pragma once
4 
6 #include "sol3/net/msg/tcp_telemetry.h"
7 
8 #include <cstddef>
9 
10 namespace sol3::net {
11 
13 
14 // Tracks counters and state for TCP clients and servers.
15 class TcpTelemetry {
16  public:
17  void onBytesRead(size_t n) {
18  telemetry_.mutate([n](auto& t) { t.bytes_read += n; });
19  }
20  void onBytesWritten(size_t n) {
21  telemetry_.mutate([n](auto& t) {
22  t.bytes_written += n;
23  t.write_queue_length -= n;
24  });
25  }
26  void onBytesDropped(size_t n) {
27  telemetry_.mutate([n](auto& t) {
28  t.bytes_dropped += n;
29  t.write_queue_length -= n;
30  });
31  }
32  void onBytesQueued(size_t n) {
33  telemetry_.mutate([n](auto& t) { t.write_queue_length += n; });
34  }
35  void onKernelQueueSampled(int32_t n) {
36  telemetry_.mutate([n](auto& t) { t.kernel_send_queue_length = n; });
37  }
38  void onFramesRead(size_t n) {
39  telemetry_.mutate([n](auto& t) { t.frames_read += n; });
40  }
41  void onFramesWritten(size_t n) {
42  telemetry_.mutate([n](auto& t) { t.frames_written += n; });
43  }
44  void onConnOpened() {
45  telemetry_.mutate([](auto& t) {
46  t.connections_opened++;
47  t.active_connections++;
48  });
49  }
50  void onConnClosed() {
51  telemetry_.mutate([](auto& t) {
52  t.connections_closed++;
53  t.active_connections--;
54  t.kernel_send_queue_length = -1;
55  });
56  }
57 
58  void onConnError() {
59  telemetry_.mutate([](auto& t) { t.connection_errors++; });
60  }
61 
62  msg::TcpTelemetryT snapshot() {
63  return telemetry_.access([](auto& t) { return t; });
64  }
65 
66  private:
68 };
69 
70 } // namespace sol3::net
Small helper for read/write access to a value guarded by a shared mutex.
Definition: thread_safe_value.h:13
auto mutate(TFunction &&cb)
Exclusive access; executes cb(TData&) under a unique_lock.
Definition: thread_safe_value.h:27
auto access(TFunction &&cb) const
Shared/read-only access; executes cb(TData const&) under a shared_lock.
Definition: thread_safe_value.h:34
Definition: tcp_telemetry.h:15
msg::TcpTelemetryT snapshot()
Definition: tcp_telemetry.h:62
void onBytesQueued(size_t n)
Definition: tcp_telemetry.h:32
void onConnOpened()
Definition: tcp_telemetry.h:44
void onConnClosed()
Definition: tcp_telemetry.h:50
void onFramesWritten(size_t n)
Definition: tcp_telemetry.h:41
void onFramesRead(size_t n)
Definition: tcp_telemetry.h:38
void onBytesDropped(size_t n)
Definition: tcp_telemetry.h:26
void onBytesRead(size_t n)
Definition: tcp_telemetry.h:17
void onKernelQueueSampled(int32_t n)
Definition: tcp_telemetry.h:35
void onConnError()
Definition: tcp_telemetry.h:58
void onBytesWritten(size_t n)
Definition: tcp_telemetry.h:20
Definition: buffer_pool.h:12