From: Willy Tarreau Date: Sat, 8 May 2021 08:38:20 +0000 (+0200) Subject: MINOR: stats: avoid excessive padding of float values with trailing zeroes X-Git-Tag: v2.4-dev19~79 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=065ba3186e5938be75aa8072549477563f3c9532;p=thirdparty%2Fhaproxy.git MINOR: stats: avoid excessive padding of float values with trailing zeroes When emitting stats, we don't need to have 6 zeroes after the decimal point for each value, so let's trim floating point numbers to the longest needed only. --- diff --git a/src/stats.c b/src/stats.c index 9862fdd35a..df1e9be699 100644 --- a/src/stats.c +++ b/src/stats.c @@ -374,7 +374,11 @@ int stats_emit_raw_data_field(struct buffer *out, const struct field *f) case FF_U32: return chunk_appendf(out, "%u", f->u.u32); case FF_S64: return chunk_appendf(out, "%lld", (long long)f->u.s64); case FF_U64: return chunk_appendf(out, "%llu", (unsigned long long)f->u.u64); - case FF_FLT: return chunk_appendf(out, "%f", f->u.flt); + case FF_FLT: { + size_t prev_data = out->data; + out->data = flt_trim(out->area, prev_data, chunk_appendf(out, "%f", f->u.flt)); + return out->data; + } case FF_STR: return csv_enc_append(field_str(f, 0), 1, out) != NULL; default: return chunk_appendf(out, "[INCORRECT_FIELD_TYPE_%08x]", f->type); } @@ -406,7 +410,11 @@ int stats_emit_typed_data_field(struct buffer *out, const struct field *f) case FF_U32: return chunk_appendf(out, "u32:%u", f->u.u32); case FF_S64: return chunk_appendf(out, "s64:%lld", (long long)f->u.s64); case FF_U64: return chunk_appendf(out, "u64:%llu", (unsigned long long)f->u.u64); - case FF_FLT: return chunk_appendf(out, "flt:%f", f->u.flt); + case FF_FLT: { + size_t prev_data = out->data; + out->data = flt_trim(out->area, prev_data, chunk_appendf(out, "flt:%f", f->u.flt)); + return out->data; + } case FF_STR: return chunk_appendf(out, "str:%s", field_str(f, 0)); default: return chunk_appendf(out, "%08x:?", f->type); } @@ -448,7 +456,7 @@ int stats_emit_json_data_field(struct buffer *out, const struct field *f) (unsigned long long) f->u.u64); break; case FF_FLT: type = "\"flt\""; - snprintf(buf, sizeof(buf), "%f", f->u.flt); + flt_trim(buf, 0, snprintf(buf, sizeof(buf), "%f", f->u.flt)); break; case FF_STR: type = "\"str\""; value = field_str(f, 0);