MINOR: dumpstats: split stats_dump_fe_stats() in two parts

This patch splits the function stats_dump_fe_stats() in two parts. The
extracted part is called stats_fill_fe_stats(), and just fill the stats buffer.
This split allows the usage of preformated stats in other parts of HAProxy
like the Lua.
This commit is contained in:
Thierry Fournier 2016-03-25 08:20:11 +01:00 committed by Willy Tarreau
parent cb2c767681
commit 23d2d64185
2 changed files with 28 additions and 11 deletions

View File

@ -392,6 +392,7 @@ extern const char *info_field_names[];
extern const char *stat_field_names[]; extern const char *stat_field_names[];
int stats_fill_info(struct field *info, int len); int stats_fill_info(struct field *info, int len);
int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len);
extern struct applet http_stats_applet; extern struct applet http_stats_applet;

View File

@ -3893,21 +3893,17 @@ static int stats_dump_one_line(const struct field *stats, unsigned int flags, st
return stats_dump_fields_csv(&trash, stats); return stats_dump_fields_csv(&trash, stats);
} }
/* Dumps a frontend's line to the trash for the current proxy <px> and uses /* Fill <stats> with the frontend statistics. <stats> is
* the state from stream interface <si>. The caller is responsible for clearing * preallocated array of length <len>. The length of the array
* the trash if needed. Returns non-zero if it emits anything, zero otherwise. * must be at least ST_F_TOTAL_FIELDS. If this length is less then
* this value, the function returns 0, otherwise, it returns 1.
*/ */
static int stats_dump_fe_stats(struct stream_interface *si, struct proxy *px) int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len)
{ {
struct appctx *appctx = __objt_appctx(si->end); if (len < ST_F_TOTAL_FIELDS)
if (!(px->cap & PR_CAP_FE))
return 0; return 0;
if ((appctx->ctx.stats.flags & STAT_BOUND) && !(appctx->ctx.stats.type & (1 << STATS_TYPE_FE))) memset(stats, 0, sizeof(*stats) * len);
return 0;
memset(&stats, 0, sizeof(stats));
stats[ST_F_PXNAME] = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, px->id); stats[ST_F_PXNAME] = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, px->id);
stats[ST_F_SVNAME] = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, "FRONTEND"); stats[ST_F_SVNAME] = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, "FRONTEND");
@ -3957,6 +3953,26 @@ static int stats_dump_fe_stats(struct stream_interface *si, struct proxy *px)
stats[ST_F_CONN_RATE_MAX] = mkf_u32(FN_MAX, px->fe_counters.cps_max); stats[ST_F_CONN_RATE_MAX] = mkf_u32(FN_MAX, px->fe_counters.cps_max);
stats[ST_F_CONN_TOT] = mkf_u64(FN_COUNTER, px->fe_counters.cum_conn); stats[ST_F_CONN_TOT] = mkf_u64(FN_COUNTER, px->fe_counters.cum_conn);
return 1;
}
/* Dumps a frontend's line to the trash for the current proxy <px> and uses
* the state from stream interface <si>. The caller is responsible for clearing
* the trash if needed. Returns non-zero if it emits anything, zero otherwise.
*/
static int stats_dump_fe_stats(struct stream_interface *si, struct proxy *px)
{
struct appctx *appctx = __objt_appctx(si->end);
if (!(px->cap & PR_CAP_FE))
return 0;
if ((appctx->ctx.stats.flags & STAT_BOUND) && !(appctx->ctx.stats.type & (1 << STATS_TYPE_FE)))
return 0;
if (!stats_fill_fe_stats(px, stats, ST_F_TOTAL_FIELDS))
return 0;
return stats_dump_one_line(stats, 0, px, appctx); return stats_dump_one_line(stats, 0, px, appctx);
} }