aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-10-13 07:06:46 -0700
committerGarrett D'Amore <garrett@damore.org>2024-10-13 07:06:46 -0700
commit6d0143d66feec9f9f8418a8758807c503eea87e1 (patch)
treef70c74371a0dfb134c60234bc06cd3c4a97574cf /src/core
parent43d947ad8e840e0ac31dcbf4151aae94fbd0782f (diff)
downloadnng-6d0143d66feec9f9f8418a8758807c503eea87e1.tar.gz
nng-6d0143d66feec9f9f8418a8758807c503eea87e1.tar.bz2
nng-6d0143d66feec9f9f8418a8758807c503eea87e1.zip
stats: Reduce the need for NNG_ENABLE_STATS checks everywhere.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/stats.c63
-rw-r--r--src/core/stats.h8
2 files changed, 68 insertions, 3 deletions
diff --git a/src/core/stats.c b/src/core/stats.c
index 50f24e29..3b9448e6 100644
--- a/src/core/stats.c
+++ b/src/core/stats.c
@@ -11,7 +11,9 @@
#include <stdio.h>
#include <string.h>
+#include "core/defs.h"
#include "core/nng_impl.h"
+#include "nng/nng.h"
typedef struct nng_stat nni_stat;
@@ -377,72 +379,123 @@ nng_stat_parent(nng_stat *stat)
nng_stat *
nng_stat_next(nng_stat *stat)
{
+#if NNG_ENABLE_STATS
if (stat->s_parent == NULL) {
return (NULL); // Root node, no siblings.
}
return (nni_list_next(&stat->s_parent->s_children, stat));
+#else
+ NNI_ARG_UNUSED(stat);
+ return (NULL);
+#endif
}
nng_stat *
nng_stat_child(nng_stat *stat)
{
+#if NNG_ENABLE_STATS
return (nni_list_first(&stat->s_children));
+#else
+ NNI_ARG_UNUSED(stat);
+ return (NULL);
+#endif
}
const char *
nng_stat_name(nni_stat *stat)
{
+#if NNG_ENABLE_STATS
return (stat->s_info->si_name);
+#else
+ NNI_ARG_UNUSED(stat);
+ return (NULL);
+#endif
}
uint64_t
nng_stat_value(nni_stat *stat)
{
+#if NNG_ENABLE_STATS
return (stat->s_val.sv_value);
+#else
+ NNI_ARG_UNUSED(stat);
+ return (0);
+#endif
}
bool
nng_stat_bool(nni_stat *stat)
{
+#if NNG_ENABLE_STATS
return (stat->s_val.sv_bool);
+#else
+ NNI_ARG_UNUSED(stat);
+ return (false);
+#endif
}
const char *
nng_stat_string(nng_stat *stat)
{
+#if NNG_ENABLE_STATS
if (stat->s_info->si_type != NNG_STAT_STRING) {
return ("");
}
return (stat->s_val.sv_string);
+#else
+ NNI_ARG_UNUSED(stat);
+ return ("");
+#endif
}
uint64_t
nng_stat_timestamp(nng_stat *stat)
{
+#if NNG_ENABLE_STATS
return ((uint64_t) stat->s_timestamp);
+#else
+ NNI_ARG_UNUSED(stat);
+ return (0);
+#endif
}
int
nng_stat_type(nng_stat *stat)
{
+#if NNG_ENABLE_STATS
return (stat->s_info->si_type);
+#else
+ NNI_ARG_UNUSED(stat);
+ return (NNG_STAT_ID);
+#endif
}
int
nng_stat_unit(nng_stat *stat)
{
+#if NNG_ENABLE_STATS
return (stat->s_info->si_unit);
+#else
+ NNI_ARG_UNUSED(stat);
+ return (NNG_UNIT_NONE);
+#endif
}
const char *
nng_stat_desc(nng_stat *stat)
{
+#if NNG_ENABLE_STATS
return (stat->s_info->si_desc);
+#else
+ NNI_ARG_UNUSED(stat);
+ return ("");
+#endif
}
nng_stat *
nng_stat_find(nng_stat *stat, const char *name)
{
+#if NNG_ENABLE_STATS
nng_stat *child;
if (stat == NULL) {
return (NULL);
@@ -456,12 +509,17 @@ nng_stat_find(nng_stat *stat, const char *name)
return (result);
}
}
+#else
+ NNI_ARG_UNUSED(stat);
+ NNI_ARG_UNUSED(name);
+#endif
return (NULL);
}
nng_stat *
nng_stat_find_scope(nng_stat *stat, const char *name, int id)
{
+#if NNG_ENABLE_STATS
nng_stat *child;
if (stat == NULL || stat->s_info->si_type != NNG_STAT_SCOPE) {
return (NULL);
@@ -477,6 +535,11 @@ nng_stat_find_scope(nng_stat *stat, const char *name, int id)
return (result);
}
}
+#else
+ NNI_ARG_UNUSED(stat);
+ NNI_ARG_UNUSED(name);
+ NNI_ARG_UNUSED(id);
+#endif
return (NULL);
}
diff --git a/src/core/stats.h b/src/core/stats.h
index e80f18df..ff4db25c 100644
--- a/src/core/stats.h
+++ b/src/core/stats.h
@@ -36,21 +36,23 @@ typedef enum nng_unit_enum nni_stat_unit;
// avoid having to spend dereference costs or (worse) to have to include
// extra conditionals on hot code paths.
struct nni_stat_item {
+#ifdef NNG_ENABLE_STATS
nni_list_node si_node; // list node, framework use only
nni_list si_children; // children, framework use only
const nni_stat_info *si_info; // statistic description
union {
uint64_t sv_number;
nni_atomic_u64 sv_atomic;
- char * sv_string;
+ char *sv_string;
bool sv_bool;
int sv_id;
} si_u;
+#endif
};
struct nni_stat_info {
- const char * si_name; // name of statistic
- const char * si_desc; // description of statistic (English)
+ const char *si_name; // name of statistic
+ const char *si_desc; // description of statistic (English)
nni_stat_type si_type; // statistic type, e.g. NNG_STAT_LEVEL
nni_stat_unit si_unit; // statistic unit, e.g. NNG_UNIT_MILLIS
nni_stat_update si_update; // update function (can be NULL)