mirror of
https://github.com/emqx/neuron.git
synced 2026-10-18 21:50:42 +08:00
feat: add average rtt statistics counter
This commit is contained in:
@@ -30,6 +30,8 @@ extern "C" {
|
||||
#include "tag.h"
|
||||
#include "type.h"
|
||||
|
||||
#define NEU_NODE_STAT_RTT_MAX 9999
|
||||
|
||||
/** Kinds of node statistics counters.
|
||||
*
|
||||
* Some counters are maintained by the neuron core, while others should be
|
||||
@@ -41,6 +43,7 @@ typedef enum {
|
||||
NEU_NODE_STAT_BYTES_RECV, // number of bytes received
|
||||
NEU_NODE_STAT_MSGS_SENT, // number of messages sent
|
||||
NEU_NODE_STAT_MSGS_RECV, // number of messages received
|
||||
NEU_NODE_STAT_AVG_RTT, // average round trip time (ms)
|
||||
|
||||
// kinds of counters maintained by the driver core
|
||||
NEU_NODE_STAT_TAG_TOT_CNT, // number of tag read including errors
|
||||
@@ -56,6 +59,7 @@ static inline const char *neu_node_stat_string(neu_node_stat_e s)
|
||||
[NEU_NODE_STAT_BYTES_RECV] = "bytes_received",
|
||||
[NEU_NODE_STAT_MSGS_SENT] = "messages_sent",
|
||||
[NEU_NODE_STAT_MSGS_RECV] = "messages_received",
|
||||
[NEU_NODE_STAT_AVG_RTT] = "average_rtt",
|
||||
[NEU_NODE_STAT_TAG_TOT_CNT] = "tag_total_count",
|
||||
[NEU_NODE_STAT_TAG_ERR_CNT] = "tag_error_count",
|
||||
[NEU_NODE_STAT_MAX] = NULL,
|
||||
|
||||
@@ -88,6 +88,8 @@ neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info)
|
||||
adapter->persister = neu_persister_create("persistence");
|
||||
assert(adapter->persister != NULL);
|
||||
|
||||
adapter->stat.avg_rtt = NEU_NODE_STAT_RTT_MAX;
|
||||
|
||||
rv = nng_pair1_open(&adapter->sock);
|
||||
assert(rv == 0);
|
||||
nng_socket_set_int(adapter->sock, NNG_OPT_RECVBUF, 128);
|
||||
@@ -184,6 +186,18 @@ static void adapter_stat_acc(neu_adapter_t *adapter, neu_node_stat_e s,
|
||||
case NEU_NODE_STAT_MSGS_RECV:
|
||||
adapter->stat.msgs_recv += n;
|
||||
break;
|
||||
case NEU_NODE_STAT_AVG_RTT: {
|
||||
if (NEU_NODE_STAT_RTT_MAX <= n ||
|
||||
adapter->stat.avg_rtt == NEU_NODE_STAT_RTT_MAX) {
|
||||
adapter->stat.avg_rtt = n;
|
||||
break;
|
||||
}
|
||||
|
||||
// exponential moving average with alpha = 0.3
|
||||
const double a = 0.3;
|
||||
adapter->stat.avg_rtt = adapter->stat.avg_rtt * (1 - a) + n * a;
|
||||
break;
|
||||
}
|
||||
|
||||
// these are maintained by neuron core
|
||||
case NEU_NODE_STAT_TAG_TOT_CNT:
|
||||
|
||||
@@ -60,6 +60,7 @@ struct neu_adapter {
|
||||
uint64_t bytes_recv; // number of bytes received over network
|
||||
uint64_t msgs_sent; // number of messages sent
|
||||
uint64_t msgs_recv; // number of messages received
|
||||
uint64_t avg_rtt; // average round trip time in milliseconds
|
||||
uint64_t tag_tot_cnt; // number of tag read including errors
|
||||
uint64_t tag_err_cnt; // number of tag read errors
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user