From f4258bdf3b21f24a328bf0ae1407080faff2f109 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Fri, 5 May 2023 10:59:39 +0200 Subject: [PATCH] MINOR: stats: Use the applet API to write data stats_putchk() is updated to use the applet API instead of the channel API to write data. To do so, the appctx is passed as parameter instead of the channel. This way, the applet does not need to take care to request more room it it fails to put data into the channel's buffer. --- include/haproxy/stats.h | 2 +- src/resolvers.c | 5 +---- src/stats.c | 35 +++++++++++++++++++---------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/include/haproxy/stats.h b/include/haproxy/stats.h index 90a4f51ef..f9e6d97e2 100644 --- a/include/haproxy/stats.h +++ b/include/haproxy/stats.h @@ -45,7 +45,7 @@ extern THREAD_LOCAL struct field info[]; extern THREAD_LOCAL struct field *stat_l[]; struct htx; -int stats_putchk(struct channel *chn, struct htx *htx); +int stats_putchk(struct appctx *appctx, struct htx *htx); int stats_dump_one_line(const struct field *stats, size_t stats_count, struct appctx *appctx); diff --git a/src/resolvers.c b/src/resolvers.c index 1213303a5..4a9209ebb 100644 --- a/src/resolvers.c +++ b/src/resolvers.c @@ -2671,7 +2671,6 @@ static int stats_dump_resolv_to_buffer(struct stconn *sc, struct list *stat_modules) { struct appctx *appctx = __sc_appctx(sc); - struct channel *rep = sc_ic(sc); struct stats_module *mod; size_t idx = 0; @@ -2687,13 +2686,12 @@ static int stats_dump_resolv_to_buffer(struct stconn *sc, if (!stats_dump_one_line(stats, idx, appctx)) return 0; - if (!stats_putchk(rep, NULL)) + if (!stats_putchk(appctx, NULL)) goto full; return 1; full: - sc_need_room(sc); return 0; } @@ -2740,7 +2738,6 @@ int stats_dump_resolvers(struct stconn *sc, return 1; full: - sc_need_room(sc); return 0; } diff --git a/src/stats.c b/src/stats.c index 823c8f6cf..56f62d884 100644 --- a/src/stats.c +++ b/src/stats.c @@ -305,20 +305,26 @@ static inline enum stats_domain_px_cap stats_px_get_cap(uint32_t domain) static void stats_dump_json_schema(struct buffer *out); -int stats_putchk(struct channel *chn, struct htx *htx) +int stats_putchk(struct appctx *appctx, struct htx *htx) { + struct stconn *sc = appctx_sc(appctx); + struct channel *chn = sc_ic(sc); struct buffer *chk = &trash_chunk; if (htx) { - if (chk->data >= channel_htx_recv_max(chn, htx)) + if (chk->data >= channel_htx_recv_max(chn, htx)) { + sc_need_room(sc, chk->data); return 0; - if (!htx_add_data_atonce(htx, ist2(chk->area, chk->data))) + } + if (!htx_add_data_atonce(htx, ist2(chk->area, chk->data))) { + sc_need_room(sc, 0); return 0; + } channel_add_input(chn, chk->data); chk->data = 0; } else { - if (ci_putchk(chn, chk) == -1) + if (applet_putchk(appctx, chk) == -1) return 0; } return 1; @@ -3196,7 +3202,7 @@ more: case STAT_PX_ST_TH: if (ctx->flags & STAT_FMT_HTML) { stats_dump_html_px_hdr(sc, px); - if (!stats_putchk(rep, htx)) + if (!stats_putchk(appctx, htx)) goto full; } @@ -3206,7 +3212,7 @@ more: case STAT_PX_ST_FE: /* print the frontend */ if (stats_dump_fe_stats(sc, px)) { - if (!stats_putchk(rep, htx)) + if (!stats_putchk(appctx, htx)) goto full; ctx->flags |= STAT_STARTED; if (ctx->field) @@ -3244,7 +3250,7 @@ more: /* print the frontend */ if (stats_dump_li_stats(sc, px, l)) { - if (!stats_putchk(rep, htx)) + if (!stats_putchk(appctx, htx)) goto full; ctx->flags |= STAT_STARTED; if (ctx->field) @@ -3327,7 +3333,7 @@ more: } if (stats_dump_sv_stats(sc, px, sv)) { - if (!stats_putchk(rep, htx)) + if (!stats_putchk(appctx, htx)) goto full; ctx->flags |= STAT_STARTED; if (ctx->field) @@ -3342,7 +3348,7 @@ more: case STAT_PX_ST_BE: /* print the backend */ if (stats_dump_be_stats(sc, px)) { - if (!stats_putchk(rep, htx)) + if (!stats_putchk(appctx, htx)) goto full; ctx->flags |= STAT_STARTED; if (ctx->field) @@ -3356,7 +3362,7 @@ more: case STAT_PX_ST_END: if (ctx->flags & STAT_FMT_HTML) { stats_dump_html_px_end(sc, px); - if (!stats_putchk(rep, htx)) + if (!stats_putchk(appctx, htx)) goto full; } @@ -3372,7 +3378,6 @@ more: } full: - sc_need_room(sc); /* restore previous field */ ctx->field = current_field; return 0; @@ -3891,7 +3896,6 @@ static int stats_dump_stat_to_buffer(struct stconn *sc, struct htx *htx, { struct appctx *appctx = __sc_appctx(sc); struct show_stat_ctx *ctx = appctx->svcctx; - struct channel *rep = sc_ic(sc); enum stats_domain domain = ctx->domain; chunk_reset(&trash_chunk); @@ -3911,7 +3915,7 @@ static int stats_dump_stat_to_buffer(struct stconn *sc, struct htx *htx, else if (!(ctx->flags & STAT_FMT_TYPED)) stats_dump_csv_header(ctx->domain); - if (!stats_putchk(rep, htx)) + if (!stats_putchk(appctx, htx)) goto full; if (ctx->flags & STAT_JSON_SCHM) { @@ -3924,7 +3928,7 @@ static int stats_dump_stat_to_buffer(struct stconn *sc, struct htx *htx, case STAT_STATE_INFO: if (ctx->flags & STAT_FMT_HTML) { stats_dump_html_info(sc, uri); - if (!stats_putchk(rep, htx)) + if (!stats_putchk(appctx, htx)) goto full; } @@ -3963,7 +3967,7 @@ static int stats_dump_stat_to_buffer(struct stconn *sc, struct htx *htx, stats_dump_html_end(); else stats_dump_json_end(); - if (!stats_putchk(rep, htx)) + if (!stats_putchk(appctx, htx)) goto full; } @@ -3980,7 +3984,6 @@ static int stats_dump_stat_to_buffer(struct stconn *sc, struct htx *htx, } full: - sc_need_room(sc); return 0; }