From: Willy Tarreau Date: Mon, 4 Jan 2016 18:04:18 +0000 (+0100) Subject: MINOR: stats: create stats fields storage and CSV dump function X-Git-Tag: v1.7-dev2~49 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=82a8602da731677acce2f85d45d19fcff67a9c26;p=thirdparty%2Fhaproxy.git MINOR: stats: create stats fields storage and CSV dump function The new function stats_dump_fields_csv() currenty walks over all CSV fields and prints all non-empty ones as one line. Strings are csv-encoded on the fly. --- diff --git a/src/dumpstats.c b/src/dumpstats.c index 623d7ac5e3..3e82ceb600 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -396,6 +396,9 @@ const char *stat_field_names[ST_F_TOTAL_FIELDS] = { [ST_F_TTIME] = "ttime", }; +/* one line of stats */ +static struct field stats[ST_F_TOTAL_FIELDS]; + static int stats_dump_backend_to_buffer(struct stream_interface *si); static int stats_dump_env_to_buffer(struct stream_interface *si); static int stats_dump_info_to_buffer(struct stream_interface *si); @@ -3204,6 +3207,21 @@ static int stats_dump_pools_to_buffer(struct stream_interface *si) return 1; } +/* Dump all fields from into using CSV format */ +static int stats_dump_fields_csv(struct chunk *out, const struct field *stats) +{ + int field; + + for (field = 0; field < ST_F_TOTAL_FIELDS; field++) { + if (!stats_emit_raw_data_field(out, &stats[field])) + return 0; + if (!chunk_strcat(out, ",")) + return 0; + } + chunk_strcat(&trash, "\n"); + return 1; +} + /* Dumps a frontend's line to the trash for the current proxy and uses * the state from stream interface . The caller is responsible for clearing * the trash if needed. Returns non-zero if it emits anything, zero otherwise.