etcpmon: add queue metrics, error counters, timer flags and peer_node_id

- Added queue bytes/packets for all 6 ETCP queues
- Added error counters: reinit_count, reset_count, pkt_format_errors
- Added timer active flags for connection and link timers
- Added peer_node_id to identify connection in metrics
This commit is contained in:
Evgeny committed 2026-03-07 17:27:02 +03:00
1 parent 8a59b51b49
commit fbd1128bf1
2 files changed
+57

No files matched your search

+28
View File
@@ -12,6 +12,7 @@
#include "../lib/u_async.h"
#include "../lib/debug_config.h"
#include "../lib/mem.h"
#include "../lib/ll_queue.h"
#include <stdlib.h>
#include <string.h>
@@ -717,6 +718,7 @@ static void send_metrics(struct control_server* server, struct control_client* c
struct etcpmon_rsp_metrics* rsp = (struct etcpmon_rsp_metrics*)(buffer + sizeof(*hdr));
/* Fill ETCP metrics */
rsp->etcp.peer_node_id = conn->peer_node_id;
rsp->etcp.rtt_last = conn->rtt_last;
rsp->etcp.rtt_avg_10 = conn->rtt_avg_10;
rsp->etcp.rtt_avg_100 = conn->rtt_avg_100;
@@ -727,6 +729,29 @@ static void send_metrics(struct control_server* server, struct control_client* c
rsp->etcp.unacked_bytes = conn->unacked_bytes;
rsp->etcp.optimal_inflight = conn->optimal_inflight;
rsp->etcp.links_count = links_count;
/* Queue metrics */
rsp->etcp.input_queue_bytes = (uint32_t)queue_total_bytes(conn->input_queue);
rsp->etcp.input_queue_packets = (uint32_t)queue_entry_count(conn->input_queue);
rsp->etcp.input_send_q_bytes = (uint32_t)queue_total_bytes(conn->input_send_q);
rsp->etcp.input_send_q_packets = (uint32_t)queue_entry_count(conn->input_send_q);
rsp->etcp.input_wait_ack_bytes = (uint32_t)queue_total_bytes(conn->input_wait_ack);
rsp->etcp.input_wait_ack_packets = (uint32_t)queue_entry_count(conn->input_wait_ack);
rsp->etcp.ack_q_bytes = (uint32_t)queue_total_bytes(conn->ack_q);
rsp->etcp.ack_q_packets = (uint32_t)queue_entry_count(conn->ack_q);
rsp->etcp.recv_q_bytes = (uint32_t)queue_total_bytes(conn->recv_q);
rsp->etcp.recv_q_packets = (uint32_t)queue_entry_count(conn->recv_q);
rsp->etcp.output_queue_bytes = (uint32_t)queue_total_bytes(conn->output_queue);
rsp->etcp.output_queue_packets = (uint32_t)queue_entry_count(conn->output_queue);
/* Error counters */
rsp->etcp.reinit_count = conn->reinit_count;
rsp->etcp.reset_count = conn->reset_count;
rsp->etcp.pkt_format_errors = (conn->links && conn->links->conn) ? (uint32_t)conn->links->conn->pkt_format_errors : 0;
/* Timer flags */
rsp->etcp.retrans_timer_active = (conn->retrans_timer != NULL) ? 1 : 0;
rsp->etcp.ack_resp_timer_active = (conn->ack_resp_timer != NULL) ? 1 : 0;
/* Fill TUN metrics */
if (instance->tun) {
@@ -756,6 +781,9 @@ static void send_metrics(struct control_server* server, struct control_client* c
link_info[i].nat_changes_count = link->nat_changes_count;
link_info[i].rtt_last = link->rtt_last;
link_info[i].tt_last = link->tt_last;
link_info[i].init_timer_active = (link->init_timer != NULL) ? 1 : 0;
link_info[i].keepalive_timer_active = (link->keepalive_timer != NULL) ? 1 : 0;
link_info[i].shaper_timer_active = (link->shaper_timer != NULL) ? 1 : 0;
link = link->next;
}