From 286eeceb89a83f146cd50729b2c547075aa5ec7c Mon Sep 17 00:00:00 2001 From: Yao Yue Date: Mon, 14 Jan 2019 17:51:00 -0800 Subject: [PATCH] add stats functions to print just name or value --- include/cc_metric.h | 2 ++ src/stats/cc_metric.c | 56 +++++++++++++++++++++++++++++++++---------- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/include/cc_metric.h b/include/cc_metric.h index e224e81a..e2667d15 100644 --- a/include/cc_metric.h +++ b/include/cc_metric.h @@ -136,6 +136,8 @@ struct metric { }; void metric_reset(struct metric sarr[], unsigned int nmetric); +size_t metric_print_name(char *buf, size_t nbuf, char *fmt, struct metric *m); +size_t metric_print_value(char *buf, size_t nbuf, char *fmt, struct metric *m); size_t metric_print(char *buf, size_t nbuf, char *fmt, struct metric *m); void metric_describe_all(struct metric metrics[], unsigned int nmetric); diff --git a/src/stats/cc_metric.c b/src/stats/cc_metric.c index aa863805..171bdff4 100644 --- a/src/stats/cc_metric.c +++ b/src/stats/cc_metric.c @@ -58,15 +58,9 @@ metric_reset(struct metric sarr[], unsigned int n) } } -size_t -metric_print(char *buf, size_t nbuf, char *fmt, struct metric *m) +static void +_metric_value(char *buf, struct metric *m) { - char val_buf[VALUE_PRINT_LEN]; - - if (m == NULL) { - return 0; - } - switch(m->type) { case METRIC_COUNTER: /** @@ -74,22 +68,58 @@ metric_print(char *buf, size_t nbuf, char *fmt, struct metric *m) * and negatively impact readability, and since this function should not * be called often enough to make it absolutely performance critical. */ - cc_scnprintf(val_buf, VALUE_PRINT_LEN, "%llu", __atomic_load_n( - &m->counter, __ATOMIC_RELAXED)); + cc_scnprintf(buf, VALUE_PRINT_LEN, "%llu", __atomic_load_n(&m->counter, + __ATOMIC_RELAXED)); break; case METRIC_GAUGE: - cc_scnprintf(val_buf, VALUE_PRINT_LEN, "%lld", __atomic_load_n( - &m->gauge, __ATOMIC_RELAXED)); + cc_scnprintf(buf, VALUE_PRINT_LEN, "%lld", __atomic_load_n(&m->gauge, + __ATOMIC_RELAXED)); break; case METRIC_FPN: - cc_scnprintf(val_buf, VALUE_PRINT_LEN, "%f", m->fpn); + cc_scnprintf(buf, VALUE_PRINT_LEN, "%f", m->fpn); break; default: NOT_REACHED(); } +} + +size_t +metric_print_name(char *buf, size_t nbuf, char *fmt, struct metric *m) +{ + if (m == NULL) { + return 0; + } + + return cc_scnprintf(buf, nbuf, fmt, m->name); +} + +size_t +metric_print_value(char *buf, size_t nbuf, char *fmt, struct metric *m) +{ + char val_buf[VALUE_PRINT_LEN]; + + if (m == NULL) { + return 0; + } + + _metric_value(val_buf, m); + + return cc_scnprintf(buf, nbuf, fmt, val_buf); +} + +size_t +metric_print(char *buf, size_t nbuf, char *fmt, struct metric *m) +{ + char val_buf[VALUE_PRINT_LEN]; + + if (m == NULL) { + return 0; + } + + _metric_value(val_buf, m); return cc_scnprintf(buf, nbuf, fmt, m->name, val_buf); }