This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
stellar-stellar/infra/session_manager/session_manager_stat.h

167 lines
7.4 KiB
C
Raw Normal View History

#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdint.h>
#define SESS_MGR_STAT_INC(stat, state, proto) \
{ \
switch ((state)) \
{ \
case SESSION_STATE_OPENING: \
(stat)->proto##_sess_opening++; \
break; \
case SESSION_STATE_ACTIVE: \
(stat)->proto##_sess_active++; \
break; \
case SESSION_STATE_CLOSING: \
(stat)->proto##_sess_closing++; \
break; \
case SESSION_STATE_DISCARD: \
(stat)->proto##_sess_discard++; \
break; \
case SESSION_STATE_CLOSED: \
(stat)->proto##_sess_closed++; \
break; \
default: \
break; \
} \
}
#define SESS_MGR_STAT_DEC(stat, state, proto) \
{ \
switch ((state)) \
{ \
case SESSION_STATE_OPENING: \
(stat)->proto##_sess_opening--; \
break; \
case SESSION_STATE_ACTIVE: \
(stat)->proto##_sess_active--; \
break; \
case SESSION_STATE_CLOSING: \
(stat)->proto##_sess_closing--; \
break; \
case SESSION_STATE_DISCARD: \
(stat)->proto##_sess_discard--; \
break; \
case SESSION_STATE_CLOSED: \
(stat)->proto##_sess_closed--; \
break; \
default: \
break; \
} \
}
#define SESS_MGR_STAT_UPDATE(stat, curr, next, proto) \
{ \
if (curr != next) \
{ \
SESS_MGR_STAT_DEC(stat, curr, proto); \
SESS_MGR_STAT_INC(stat, next, proto); \
} \
}
struct session_manager_stat
{
// TCP session
uint64_t history_tcp_sessions;
uint64_t tcp_sess_used;
uint64_t tcp_sess_opening;
uint64_t tcp_sess_active;
uint64_t tcp_sess_closing;
uint64_t tcp_sess_discard;
uint64_t tcp_sess_closed;
// UDP session
uint64_t history_udp_sessions;
uint64_t udp_sess_used;
uint64_t udp_sess_opening;
uint64_t udp_sess_active;
uint64_t udp_sess_closing;
uint64_t udp_sess_discard;
uint64_t udp_sess_closed;
// Evicted session
uint64_t tcp_sess_evicted; // sum
uint64_t udp_sess_evicted; // sum
// Packet
uint64_t udp_pkts_bypass_table_full; // sum
uint64_t tcp_pkts_bypass_table_full; // sum
uint64_t tcp_pkts_bypass_session_not_found; // sum
uint64_t tcp_pkts_bypass_duplicated; // sum
uint64_t udp_pkts_bypass_duplicated; // sum
uint64_t udp_pkts_bypass_session_evicted; // sum
// TCP segments
uint64_t tcp_segs_input; // sum
uint64_t tcp_segs_consumed; // sum
uint64_t tcp_segs_timeout; // sum
uint64_t tcp_segs_retransmited; // sum
uint64_t tcp_segs_overlapped; // sum
uint64_t tcp_segs_omitted_too_many; // sum
uint64_t tcp_segs_inorder; // sum
uint64_t tcp_segs_reordered; // sum
uint64_t tcp_segs_buffered; // sum
uint64_t tcp_segs_freed; // sum
} __attribute__((aligned(64)));
#define SESS_MGR_STAT_MAP(XX) \
XX(SESS_MGR_STAT_HISTORY_TCP_SESSIONS, history_tcp_sessions) \
XX(SESS_MGR_STAT_TCP_SESS_USED, tcp_sess_used) \
XX(SESS_MGR_STAT_TCP_SESS_OPENING, tcp_sess_opening) \
XX(SESS_MGR_STAT_TCP_SESS_ACTIVE, tcp_sess_active) \
XX(SESS_MGR_STAT_TCP_SESS_CLOSING, tcp_sess_closing) \
XX(SESS_MGR_STAT_TCP_SESS_DISCARD, tcp_sess_discard) \
XX(SESS_MGR_STAT_TCP_SESS_CLOSED, tcp_sess_closed) \
XX(SESS_MGR_STAT_HISTORY_UDP_SESSIONS, history_udp_sessions) \
XX(SESS_MGR_STAT_UDP_SESS_USED, udp_sess_used) \
XX(SESS_MGR_STAT_UDP_SESS_OPENING, udp_sess_opening) \
XX(SESS_MGR_STAT_UDP_SESS_ACTIVE, udp_sess_active) \
XX(SESS_MGR_STAT_UDP_SESS_CLOSING, udp_sess_closing) \
XX(SESS_MGR_STAT_UDP_SESS_DISCARD, udp_sess_discard) \
XX(SESS_MGR_STAT_UDP_SESS_CLOSED, udp_sess_closed) \
XX(SESS_MGR_STAT_TCP_SESS_EVICTED, tcp_sess_evicted) \
XX(SESS_MGR_STAT_UDP_SESS_EVICTED, udp_sess_evicted) \
XX(SESS_MGR_STAT_UDP_PKTS_BYPASS_TABLE_FULL, udp_pkts_bypass_table_full) \
XX(SESS_MGR_STAT_TCP_PKTS_BYPASS_TABLE_FULL, tcp_pkts_bypass_table_full) \
XX(SESS_MGR_STAT_TCP_PKTS_BYPASS_SESSION_NOT_FOUND, tcp_pkts_bypass_session_not_found) \
XX(SESS_MGR_STAT_TCP_PKTS_BYPASS_DUPLICATED, tcp_pkts_bypass_duplicated) \
XX(SESS_MGR_STAT_UDP_PKTS_BYPASS_DUPLICATED, udp_pkts_bypass_duplicated) \
XX(SESS_MGR_STAT_UDP_PKTS_BYPASS_SESSION_EVICTED, udp_pkts_bypass_session_evicted) \
XX(SESS_MGR_STAT_TCP_SEGS_INPUT, tcp_segs_input) \
XX(SESS_MGR_STAT_TCP_SEGS_CONSUMED, tcp_segs_consumed) \
XX(SESS_MGR_STAT_TCP_SEGS_TIMEOUT, tcp_segs_timeout) \
XX(SESS_MGR_STAT_TCP_SEGS_RETRANSMITED, tcp_segs_retransmited) \
XX(SESS_MGR_STAT_TCP_SEGS_OVERLAPPED, tcp_segs_overlapped) \
XX(SESS_MGR_STAT_TCP_SEGS_OMITTED_TOO_MANY, tcp_segs_omitted_too_many) \
XX(SESS_MGR_STAT_TCP_SEGS_INORDER, tcp_segs_inorder) \
XX(SESS_MGR_STAT_TCP_SEGS_REORDERED, tcp_segs_reordered) \
XX(SESS_MGR_STAT_TCP_SEGS_BUFFERED, tcp_segs_buffered) \
XX(SESS_MGR_STAT_TCP_SEGS_FREED, tcp_segs_freed)
enum sess_mgr_stat_type
{
#define XX(type, name) type,
SESS_MGR_STAT_MAP(XX)
#undef XX
SESS_MGR_STAT_MAX
};
__attribute__((unused)) static const char sess_mgr_stat_str[SESS_MGR_STAT_MAX][64] =
{
#define XX(type, name) #name,
SESS_MGR_STAT_MAP(XX)
#undef XX
};
uint64_t session_manager_stat_get(struct session_manager_stat *stat, enum sess_mgr_stat_type type);
void session_manager_stat_print(struct session_manager_stat *stat);
#ifdef __cplusplus
}
#endif