diff --git a/include/neuron/metrics.h b/include/neuron/metrics.h index ff4d538c..08ddc6a2 100644 --- a/include/neuron/metrics.h +++ b/include/neuron/metrics.h @@ -98,6 +98,20 @@ typedef enum { #define NEU_METRIC_GROUP_LAST_TIMER_MS_HELP \ "Time in milliseconds consumed on last group timer invocation" +// maintained by neuron core +// group last error code +#define NEU_METRIC_GROUP_LAST_ERROR_CODE "group_last_error_code" +#define NEU_METRIC_GROUP_LAST_ERROR_CODE_TYPE NEU_METRIC_TYPE_GAUAGE +#define NEU_METRIC_GROUP_LAST_ERROR_CODE_HELP \ + "Last encountered error code in group data acquisition" + +// maintained by neuron core +// group last error timestamp +#define NEU_METRIC_GROUP_LAST_ERROR_TS "group_last_error_timestamp_ms" +#define NEU_METRIC_GROUP_LAST_ERROR_TS_TYPE NEU_METRIC_TYPE_GAUAGE +#define NEU_METRIC_GROUP_LAST_ERROR_TS_HELP \ + "Timestamp (ms) of the last encountered error in group data acquisition" + // number of messages sent #define NEU_METRIC_SEND_MSGS_TOTAL "send_msgs_total" #define NEU_METRIC_SEND_MSGS_TOTAL_TYPE NEU_METRIC_TYPE_COUNTER diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index c5e89b75..7293b831 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -110,7 +110,16 @@ static void update_with_meta(neu_adapter_t *adapter, const char *group, const char *tag, neu_dvalue_t value, neu_tag_meta_t *metas, int n_meta) { - neu_adapter_driver_t *driver = (neu_adapter_driver_t *) adapter; + neu_adapter_driver_t * driver = (neu_adapter_driver_t *) adapter; + neu_adapter_update_metric_cb_t update_metric = + driver->adapter.cb_funs.update_metric; + + if (value.type == NEU_TYPE_ERROR) { + update_metric(&driver->adapter, NEU_METRIC_GROUP_LAST_ERROR_CODE, + value.value.i32, group); + update_metric(&driver->adapter, NEU_METRIC_GROUP_LAST_ERROR_TS, + global_timestamp, group); + } if (value.type == NEU_TYPE_ERROR && tag == NULL) { group_t *g = find_group(driver, group); @@ -127,21 +136,18 @@ static void update_with_meta(neu_adapter_t *adapter, const char *group, global_timestamp, value, NULL, 0); ++err_count; } - driver->adapter.cb_funs.update_metric( - &driver->adapter, NEU_METRIC_TAG_READS_TOTAL, err_count, NULL); - driver->adapter.cb_funs.update_metric( - &driver->adapter, NEU_METRIC_TAG_READ_ERRORS_TOTAL, err_count, - NULL); + update_metric(&driver->adapter, NEU_METRIC_TAG_READS_TOTAL, + err_count, NULL); + update_metric(&driver->adapter, NEU_METRIC_TAG_READ_ERRORS_TOTAL, + err_count, NULL); utarray_free(tags); } } else { neu_driver_cache_update(driver->cache, group, tag, global_timestamp, value, metas, n_meta); - driver->adapter.cb_funs.update_metric( - &driver->adapter, NEU_METRIC_TAG_READS_TOTAL, 1, NULL); - driver->adapter.cb_funs.update_metric( - &driver->adapter, NEU_METRIC_TAG_READ_ERRORS_TOTAL, - NEU_TYPE_ERROR == value.type, NULL); + update_metric(&driver->adapter, NEU_METRIC_TAG_READS_TOTAL, 1, NULL); + update_metric(&driver->adapter, NEU_METRIC_TAG_READ_ERRORS_TOTAL, + NEU_TYPE_ERROR == value.type, NULL); } nlog_info( "update driver: %s, group: %s, tag: %s, type: %s, timestamp: %" PRId64 @@ -704,6 +710,10 @@ int neu_adapter_driver_add_group(neu_adapter_driver_t *driver, const char *name, NEU_METRIC_GROUP_LAST_SEND_MSGS, 0); REGISTER_GROUP_METRIC(&driver->adapter, find->name, NEU_METRIC_GROUP_LAST_TIMER_MS, 0); + REGISTER_GROUP_METRIC(&driver->adapter, find->name, + NEU_METRIC_GROUP_LAST_ERROR_CODE, 0); + REGISTER_GROUP_METRIC(&driver->adapter, find->name, + NEU_METRIC_GROUP_LAST_ERROR_TS, 0); HASH_ADD_STR(driver->groups, name, find); ret = NEU_ERR_SUCCESS;