From fe7601a7ac7f106b2fd0352f5890ff08f34cc7d9 Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Wed, 26 Oct 2022 14:07:14 +0800 Subject: [PATCH] feat(monitor): add app node metrics --- include/neuron/metrics.h | 23 +++++++++++++++++++---- plugins/monitor/metric_handle.c | 23 +++++++++++++++++++++++ src/adapter/adapter.c | 7 +++++++ src/adapter/driver/driver.c | 2 +- 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/include/neuron/metrics.h b/include/neuron/metrics.h index cba54960..515e4307 100644 --- a/include/neuron/metrics.h +++ b/include/neuron/metrics.h @@ -54,33 +54,48 @@ typedef enum { #define NEU_METRIC_RECV_BYTES_TYPE NEU_METRIC_TYPE_COUNTER #define NEU_METRIC_RECV_BYTES_HELP "Total number of bytes received" +// maintained by neuron core // number of tag read including errors #define NEU_METRIC_TAG_READS_TOTAL "tag_reads_total" #define NEU_METRIC_TAG_READS_TOTAL_TYPE NEU_METRIC_TYPE_COUNTER #define NEU_METRIC_TAG_READS_TOTAL_HELP \ "Total number of tag reads including errors" +// maintained by neuron core // number of tag read errors #define NEU_METRIC_TAG_READ_ERRORS_TOTAL "tag_read_errors_total" #define NEU_METRIC_TAG_READ_ERRORS_TOTAL_TYPE NEU_METRIC_TYPE_COUNTER #define NEU_METRIC_TAG_READ_ERRORS_TOTAL_HELP "Total number of tag read errors" +// maintained by neuron core // number of tags in group #define NEU_METRIC_GROUP_TAGS_TOTAL "group_tags_total" #define NEU_METRIC_GROUP_TAGS_TOTAL_TYPE NEU_METRIC_TYPE_GAUAGE #define NEU_METRIC_GROUP_TAGS_TOTAL_HELP "Total number of tags in the group" // number of messages sent in group -#define NEU_METRIC_GROUP_SEND_MSGS "group_send_msgs" -#define NEU_METRIC_GROUP_SEND_MSGS_TYPE NEU_METRIC_TYPE_COUNTER -#define NEU_METRIC_GROUP_SEND_MSGS_HELP \ +#define NEU_METRIC_GROUP_SEND_MSGS_TOTAL "group_send_msgs_total" +#define NEU_METRIC_GROUP_SEND_MSGS_TOTAL_TYPE NEU_METRIC_TYPE_COUNTER +#define NEU_METRIC_GROUP_SEND_MSGS_TOTAL_HELP \ "Total number of messages sent in the group" +// maintained by neuron core // milliseconds consumed in last group timer invocation #define NEU_METRIC_GROUP_LAST_TIMER_MS "group_last_timer_ms" #define NEU_METRIC_GROUP_LAST_TIMER_MS_TYPE NEU_METRIC_TYPE_GAUAGE #define NEU_METRIC_GROUP_LAST_TIMER_MS_HELP \ - "Time in milliseconds consumed in last group timer invocation" + "Time in milliseconds consumed on last group timer invocation" + +// number of messages sent +#define NEU_METRIC_SEND_MSGS_TOTAL "send_msgs_total" +#define NEU_METRIC_SEND_MSGS_TOTAL_TYPE NEU_METRIC_TYPE_COUNTER +#define NEU_METRIC_SEND_MSGS_TOTAL_HELP "Total number of messages sent" + +// number of errors encounter while sending messages +#define NEU_METRIC_SEND_MSG_ERRORS_TOTAL "send_msg_errors_total" +#define NEU_METRIC_SEND_MSG_ERRORS_TOTAL_TYPE NEU_METRIC_TYPE_COUNTER +#define NEU_METRIC_SEND_MSG_ERRORS_TOTAL_HELP \ + "Total number of errors sending messages" typedef enum { NEU_METRICS_CATEGORY_GLOBAL, diff --git a/plugins/monitor/metric_handle.c b/plugins/monitor/metric_handle.c index 3196a13c..7fca96ca 100644 --- a/plugins/monitor/metric_handle.c +++ b/plugins/monitor/metric_handle.c @@ -147,6 +147,25 @@ gen_single_node_metrics(const neu_node_metrics_t *node_metrics, FILE *stream) } } +static inline bool has_entry(neu_node_metrics_t *node_metrics, const char *name) +{ + neu_metric_entry_t * e = NULL; + neu_group_metrics_t *g = NULL; + HASH_FIND_STR(node_metrics->entries, name, e); + if (e) { + return true; + } + + HASH_LOOP(hh, node_metrics->group_metrics, g) + { + HASH_FIND_STR(g->entries, name, e); + if (e) { + return true; + } + } + return false; +} + static void gen_all_node_metrics(const neu_metrics_t *metrics, int type_filter, FILE *stream) { @@ -163,6 +182,10 @@ static void gen_all_node_metrics(const neu_metrics_t *metrics, int type_filter, continue; } + if (!has_entry(n, r->name)) { + continue; + } + if (!commented) { commented = true; fprintf(stream, "# HELP %s %s\n# TYPE %s %s\n", r->name, diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index 3766fe5b..0323dc92 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -71,6 +71,10 @@ static const adapter_callbacks_t callback_funs = { REGISTER_METRIC(adapter, NEU_METRIC_TAG_READS_TOTAL, 0); \ REGISTER_METRIC(adapter, NEU_METRIC_TAG_READ_ERRORS_TOTAL, 0) +#define REGISTER_APP_METRICS(adapter) \ + REGISTER_METRIC(adapter, NEU_METRIC_SEND_MSGS_TOTAL, 0); \ + REGISTER_METRIC(adapter, NEU_METRIC_SEND_MSG_ERRORS_TOTAL, 0); + neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info) { int rv = 0; @@ -115,6 +119,9 @@ neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info) neu_adapter_driver_init((neu_adapter_driver_t *) adapter); break; case NEU_NA_TYPE_APP: + if (adapter->module->display) { + REGISTER_APP_METRICS(adapter); + } break; } diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 669aa2eb..8d4b585d 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -399,7 +399,7 @@ int neu_adapter_driver_add_group(neu_adapter_driver_t *driver, const char *name, NEU_METRIC_GROUP_TAGS_TOTAL, neu_group_tag_size(find->group)); REGISTER_GROUP_METRIC(&driver->adapter, find->name, - NEU_METRIC_GROUP_SEND_MSGS, 0); + NEU_METRIC_GROUP_SEND_MSGS_TOTAL, 0); REGISTER_GROUP_METRIC(&driver->adapter, find->name, NEU_METRIC_GROUP_LAST_TIMER_MS, 0);