From 1cf27effac2015e6260722b3dee8d13b2d7d29c4 Mon Sep 17 00:00:00 2001 From: Otto Date: Tue, 8 Jun 2021 13:45:33 +0200 Subject: [PATCH] Use %g for formatting. It strips trailing zeroes (unlike %f) and will switch to scientific notation for very small or large values. Also correct units for sum and count. --- pdns/rec_channel_rec.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pdns/rec_channel_rec.cc b/pdns/rec_channel_rec.cc index 2bd594f92d..5ed2f9ece5 100644 --- a/pdns/rec_channel_rec.cc +++ b/pdns/rec_channel_rec.cc @@ -1116,16 +1116,18 @@ static StatsMap toStatsMap(const string& name, const pdns::AtomicHistogram& hist const auto& data = histogram.getCumulativeBuckets(); const string pbasename = getPrometheusName(name); StatsMap entries; + char buf[32]; for (const auto& bucket : data) { - char buf[32]; - snprintf(buf, sizeof(buf), "%.0e", bucket.d_boundary / 1e6); + snprintf(buf, sizeof(buf), "%g", bucket.d_boundary / 1e6); std::string pname = pbasename + "seconds_bucket{" + "le=\"" + (bucket.d_boundary == std::numeric_limits::max() ? "+Inf" : buf) + "\"}"; entries.emplace(make_pair(bucket.d_name, StatsMapEntry{pname, std::to_string(bucket.d_count)})); } - entries.emplace(make_pair(name + "sum", StatsMapEntry{pbasename + "sum", std::to_string(histogram.getSum())})); - entries.emplace(make_pair(name + "count", StatsMapEntry{pbasename + "count", std::to_string(data.back().d_count)})); + + snprintf(buf, sizeof(buf), "%g", histogram.getSum() / 1e6); + entries.emplace(make_pair(name + "sum", StatsMapEntry{pbasename + "seconds_sum", buf})); + entries.emplace(make_pair(name + "count", StatsMapEntry{pbasename + "seconds_count", std::to_string(data.back().d_count)})); return entries; } -- 2.47.2