From 6b3d8ea146a635bf069db39c0b3a18722fb9cfb7 Mon Sep 17 00:00:00 2001 From: Unbit Date: Wed, 13 Nov 2013 02:41:47 +0100 Subject: [PATCH] added avg metrics collector --- core/metrics.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/core/metrics.c b/core/metrics.c index 9f6fb139..47dc8ee0 100644 --- a/core/metrics.c +++ b/core/metrics.c @@ -970,6 +970,22 @@ static int64_t uwsgi_metric_collector_sum(struct uwsgi_metric *um) { return total; } +static int64_t uwsgi_metric_collector_avg(struct uwsgi_metric *um) { + int64_t total = 0; + int64_t count = 0; + struct uwsgi_metric_child *umc = um->children; + while(umc) { + struct uwsgi_metric *c = umc->um; + total += *c->value; + count++; + umc = umc->next; + } + + if (count == 0) return 0; + + return total/count; +} + static int64_t uwsgi_metric_collector_func(struct uwsgi_metric *um) { if (!um->arg1) return 0; int64_t (*func)(struct uwsgi_metric *) = (int64_t (*)(struct uwsgi_metric *)) um->custom; @@ -985,5 +1001,6 @@ void uwsgi_metrics_collectors_setup() { uwsgi_register_metric_collector("ptr", uwsgi_metric_collector_ptr); uwsgi_register_metric_collector("file", uwsgi_metric_collector_file); uwsgi_register_metric_collector("sum", uwsgi_metric_collector_sum); + uwsgi_register_metric_collector("avg", uwsgi_metric_collector_avg); uwsgi_register_metric_collector("func", uwsgi_metric_collector_func); }