aboutsummaryrefslogtreecommitdiff
path: root/src/protocol/pair1/pair.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocol/pair1/pair.c')
-rw-r--r--src/protocol/pair1/pair.c141
1 files changed, 94 insertions, 47 deletions
diff --git a/src/protocol/pair1/pair.c b/src/protocol/pair1/pair.c
index 0492119a..cc726306 100644
--- a/src/protocol/pair1/pair.c
+++ b/src/protocol/pair1/pair.c
@@ -15,7 +15,11 @@
// Pair protocol. The PAIRv1 protocol is a simple 1:1 messaging pattern.
-#define BUMP_STAT(x) nni_stat_inc_atomic(x, 1)
+#ifdef NNG_ENABLE_STATS
+#define BUMP_STAT(x) nni_stat_inc(x, 1)
+#else
+#define BUMP_STAT(x)
+#endif
typedef struct pair1_pipe pair1_pipe;
typedef struct pair1_sock pair1_sock;
@@ -37,14 +41,16 @@ struct pair1_sock {
nni_id_map pipes;
nni_list plist;
bool started;
- nni_stat_item stat_poly;
- nni_stat_item stat_raw;
- nni_stat_item stat_reject_mismatch;
- nni_stat_item stat_reject_already;
- nni_stat_item stat_ttl_drop;
- nni_stat_item stat_rx_malformed;
- nni_stat_item stat_tx_malformed;
- nni_stat_item stat_tx_drop;
+#ifdef NNG_ENABLE_STATS
+ nni_stat_item stat_poly;
+ nni_stat_item stat_raw;
+ nni_stat_item stat_reject_mismatch;
+ nni_stat_item stat_reject_already;
+ nni_stat_item stat_ttl_drop;
+ nni_stat_item stat_rx_malformed;
+ nni_stat_item stat_tx_malformed;
+ nni_stat_item stat_tx_drop;
+#endif
#ifdef NNG_TEST_LIB
bool inject_header;
#endif
@@ -70,6 +76,16 @@ pair1_sock_fini(void *arg)
nni_mtx_fini(&s->mtx);
}
+#ifdef NNG_ENABLE_STATS
+static void
+pair1_add_sock_stat(
+ pair1_sock *s, nni_stat_item *item, const nni_stat_info *info)
+{
+ nni_stat_init(item, info);
+ nni_sock_add_stat(s->sock, item);
+}
+#endif
+
static int
pair1_sock_init_impl(void *arg, nni_sock *sock, bool raw)
{
@@ -80,50 +96,81 @@ pair1_sock_init_impl(void *arg, nni_sock *sock, bool raw)
// Raw mode uses this.
nni_mtx_init(&s->mtx);
+ s->sock = sock;
- nni_stat_init_bool(
- &s->stat_poly, "polyamorous", "polyamorous mode?", false);
- nni_sock_add_stat(sock, &s->stat_poly);
-
- nni_stat_init_bool(&s->stat_raw, "raw", "raw mode?", raw);
- nni_sock_add_stat(sock, &s->stat_raw);
-
- nni_stat_init_atomic(&s->stat_reject_mismatch, "mismatch",
- "pipes rejected (protocol mismatch)");
- nni_sock_add_stat(sock, &s->stat_reject_mismatch);
-
- nni_stat_init_atomic(&s->stat_reject_already, "already",
- "pipes rejected (already connected)");
- nni_sock_add_stat(sock, &s->stat_reject_already);
-
- nni_stat_init_atomic(&s->stat_ttl_drop, "ttl_drop",
- "messages dropped due to too many hops");
- nni_stat_set_unit(&s->stat_ttl_drop, NNG_UNIT_MESSAGES);
- nni_sock_add_stat(sock, &s->stat_ttl_drop);
-
- // This can only increment in polyamorous mode.
- nni_stat_init_atomic(
- &s->stat_tx_drop, "tx_drop", "messages dropped undeliverable");
- nni_stat_set_unit(&s->stat_tx_drop, NNG_UNIT_MESSAGES);
- nni_sock_add_stat(sock, &s->stat_tx_drop);
-
- nni_stat_init_atomic(&s->stat_rx_malformed, "rx_malformed",
- "malformed messages received");
- nni_stat_set_unit(&s->stat_rx_malformed, NNG_UNIT_MESSAGES);
- nni_sock_add_stat(sock, &s->stat_rx_malformed);
+#ifdef NNG_ENABLE_STATS
+ static const nni_stat_info poly_info = {
+ .si_name = "poly",
+ .si_desc = "polyamorous mode?",
+ .si_type = NNG_STAT_BOOLEAN,
+ };
+ static const nni_stat_info raw_info = {
+ .si_name = "raw",
+ .si_desc = "raw mode?",
+ .si_type = NNG_STAT_BOOLEAN,
+ };
+ static const nni_stat_info mismatch_info = {
+ .si_name = "mismatch",
+ .si_desc = "pipes rejected (protocol mismatch)",
+ .si_type = NNG_STAT_COUNTER,
+ .si_atomic = true,
+ };
+ static const nni_stat_info already_info = {
+ .si_name = "already",
+ .si_desc = "pipes rejected (already connected)",
+ .si_type = NNG_STAT_COUNTER,
+ .si_atomic = true,
+ };
+ static const nni_stat_info ttl_drop_info = {
+ .si_name = "ttl_drop",
+ .si_desc = "messages dropped due to too many hops",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+ static const nni_stat_info tx_drop_info = {
+ .si_name = "tx_drop",
+ .si_desc = "messages dropped undeliverable",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+ static const nni_stat_info rx_malformed_info = {
+ .si_name = "rx_malformed",
+ .si_desc = "malformed messages received",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+ static const nni_stat_info tx_malformed_info = {
+ .si_name = "tx_malformed",
+ .si_desc = "malformed messages not sent",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+
+ pair1_add_sock_stat(s, &s->stat_poly, &poly_info);
+ pair1_add_sock_stat(s, &s->stat_raw, &raw_info);
+ pair1_add_sock_stat(s, &s->stat_reject_mismatch, &mismatch_info);
+ pair1_add_sock_stat(s, &s->stat_reject_already, &already_info);
+ pair1_add_sock_stat(s, &s->stat_ttl_drop, &ttl_drop_info);
+ pair1_add_sock_stat(s, &s->stat_tx_drop, &tx_drop_info);
+ pair1_add_sock_stat(s, &s->stat_rx_malformed, &rx_malformed_info);
- nni_stat_init_atomic(&s->stat_tx_malformed, "tx_malformed",
- "malformed messages not sent");
- nni_stat_set_unit(&s->stat_tx_malformed, NNG_UNIT_MESSAGES);
if (raw) {
// This stat only makes sense in raw mode.
- nni_sock_add_stat(sock, &s->stat_tx_malformed);
+ pair1_add_sock_stat(
+ s, &s->stat_tx_malformed, &tx_malformed_info);
}
- s->sock = sock;
- s->raw = raw;
- s->uwq = nni_sock_sendq(sock);
- s->urq = nni_sock_recvq(sock);
+ nni_stat_set_bool(&s->stat_raw, raw);
+ nni_stat_set_bool(&s->stat_poly, false);
+#endif
+
+ s->raw = raw;
+ s->uwq = nni_sock_sendq(sock);
+ s->urq = nni_sock_recvq(sock);
nni_atomic_init(&s->ttl);
nni_atomic_set(&s->ttl, 8);