struct listener *li; /* current listener */
struct server *sv; /* current server */
unsigned int flags; /* PROMEX_FL_* */
+ unsigned field_num; /* current field number (ST_F_* etc) */
int obj_state; /* current state among PROMEX_{FRONT|BACK|SRV|LI}_STATE_* */
};
const struct promex_metric *metric, const struct ist name,
struct ist *out, size_t max)
{
+ struct promex_ctx *ctx = appctx->svcctx;
struct ist type;
struct ist desc;
goto full;
if (metric->flags & PROMEX_FL_INFO_METRIC)
- desc = ist(info_fields[appctx->st2].desc);
+ desc = ist(info_fields[ctx->field_num].desc);
else if (metric->flags & PROMEX_FL_STICKTABLE_METRIC)
- desc = promex_sticktable_metric_desc[appctx->st2];
- else if (!isttest(promex_st_metric_desc[appctx->st2]))
- desc = ist(stat_fields[appctx->st2].desc);
+ desc = promex_sticktable_metric_desc[ctx->field_num];
+ else if (!isttest(promex_st_metric_desc[ctx->field_num]))
+ desc = ist(stat_fields[ctx->field_num].desc);
else
- desc = promex_st_metric_desc[appctx->st2];
+ desc = promex_st_metric_desc[ctx->field_num];
if (istcat(out, desc, max) == -1 ||
istcat(out, ist("\n# TYPE "), max) == -1 ||
if (!stats_fill_info(info, INF_TOTAL_FIELDS, 0))
return -1;
- for (; appctx->st2 < INF_TOTAL_FIELDS; appctx->st2++) {
+ for (; ctx->field_num < INF_TOTAL_FIELDS; ctx->field_num++) {
struct promex_label labels[PROMEX_MAX_LABELS-1] = {};
- if (!(promex_global_metrics[appctx->st2].flags & ctx->flags))
+ if (!(promex_global_metrics[ctx->field_num].flags & ctx->flags))
continue;
- switch (appctx->st2) {
+ switch (ctx->field_num) {
case INF_BUILD_INFO:
labels[0].name = ist("version");
labels[0].value = ist(HAPROXY_VERSION);
break;
default:
- val = info[appctx->st2];
+ val = info[ctx->field_num];
}
- if (!promex_dump_metric(appctx, htx, prefix, &promex_global_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_global_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
int ret = 1;
enum promex_front_state state;
- for (;appctx->st2 < ST_F_TOTAL_FIELDS; appctx->st2++) {
- if (!(promex_st_metrics[appctx->st2].flags & ctx->flags))
+ for (;ctx->field_num < ST_F_TOTAL_FIELDS; ctx->field_num++) {
+ if (!(promex_st_metrics[ctx->field_num].flags & ctx->flags))
continue;
while (ctx->px) {
if ((px->flags & PR_FL_DISABLED) || px->uuid <= 0 || !(px->cap & PR_CAP_FE))
goto next_px;
- if (!stats_fill_fe_stats(px, stats, ST_F_TOTAL_FIELDS, &(appctx->st2)))
+ if (!stats_fill_fe_stats(px, stats, ST_F_TOTAL_FIELDS, &(ctx->field_num)))
return -1;
- switch (appctx->st2) {
+ switch (ctx->field_num) {
case ST_F_STATUS:
state = !(px->flags & PR_FL_STOPPED);
for (; ctx->obj_state < PROMEX_FRONT_STATE_COUNT; ctx->obj_state++) {
labels[1].name = ist("state");
labels[1].value = promex_front_st[ctx->obj_state];
val = mkf_u32(FO_STATUS, state == ctx->obj_state);
- if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
}
case ST_F_COMP_RSP:
if (px->mode != PR_MODE_HTTP)
goto next_px;
- val = stats[appctx->st2];
+ val = stats[ctx->field_num];
break;
case ST_F_HRSP_1XX:
case ST_F_HRSP_2XX:
case ST_F_HRSP_OTHER:
if (px->mode != PR_MODE_HTTP)
goto next_px;
- if (appctx->st2 != ST_F_HRSP_1XX)
+ if (ctx->field_num != ST_F_HRSP_1XX)
ctx->flags &= ~PROMEX_FL_METRIC_HDR;
labels[1].name = ist("code");
- labels[1].value = promex_hrsp_code[appctx->st2 - ST_F_HRSP_1XX];
- val = stats[appctx->st2];
+ labels[1].value = promex_hrsp_code[ctx->field_num - ST_F_HRSP_1XX];
+ val = stats[ctx->field_num];
break;
default:
- val = stats[appctx->st2];
+ val = stats[ctx->field_num];
}
- if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
next_px:
int ret = 1;
enum li_status status;
- for (;appctx->st2 < ST_F_TOTAL_FIELDS; appctx->st2++) {
- if (!(promex_st_metrics[appctx->st2].flags & ctx->flags))
+ for (;ctx->field_num < ST_F_TOTAL_FIELDS; ctx->field_num++) {
+ if (!(promex_st_metrics[ctx->field_num].flags & ctx->flags))
continue;
while (ctx->px) {
labels[1].value = ist2(li->name, strlen(li->name));
if (!stats_fill_li_stats(px, li, 0, stats,
- ST_F_TOTAL_FIELDS, &(appctx->st2)))
+ ST_F_TOTAL_FIELDS, &(ctx->field_num)))
return -1;
- switch (appctx->st2) {
+ switch (ctx->field_num) {
case ST_F_STATUS:
status = get_li_status(li);
for (; ctx->obj_state < LI_STATE_COUNT; ctx->obj_state++) {
val = mkf_u32(FO_STATUS, status == ctx->obj_state);
labels[2].name = ist("state");
labels[2].value = ist(li_status_st[ctx->obj_state]);
- if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
}
ctx->obj_state = 0;
continue;
default:
- val = stats[appctx->st2];
+ val = stats[ctx->field_num];
}
if (!promex_dump_metric(appctx, htx, prefix,
- &promex_st_metrics[appctx->st2],
+ &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
}
enum promex_back_state bkd_state;
enum promex_srv_state srv_state;
- for (;appctx->st2 < ST_F_TOTAL_FIELDS; appctx->st2++) {
- if (!(promex_st_metrics[appctx->st2].flags & ctx->flags))
+ for (;ctx->field_num < ST_F_TOTAL_FIELDS; ctx->field_num++) {
+ if (!(promex_st_metrics[ctx->field_num].flags & ctx->flags))
continue;
while (ctx->px) {
if ((px->flags & PR_FL_DISABLED) || px->uuid <= 0 || !(px->cap & PR_CAP_BE))
goto next_px;
- if (!stats_fill_be_stats(px, 0, stats, ST_F_TOTAL_FIELDS, &(appctx->st2)))
+ if (!stats_fill_be_stats(px, 0, stats, ST_F_TOTAL_FIELDS, &(ctx->field_num)))
return -1;
- switch (appctx->st2) {
+ switch (ctx->field_num) {
case ST_F_AGG_SRV_CHECK_STATUS:
if (!px->srv)
goto next_px;
val = mkf_u32(FN_GAUGE, srv_state_count[ctx->obj_state]);
labels[1].name = ist("state");
labels[1].value = promex_srv_st[ctx->obj_state];
- if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
}
labels[1].name = ist("state");
labels[1].value = promex_back_st[ctx->obj_state];
val = mkf_u32(FO_STATUS, bkd_state == ctx->obj_state);
- if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
}
case ST_F_COMP_RSP:
if (px->mode != PR_MODE_HTTP)
goto next_px;
- val = stats[appctx->st2];
+ val = stats[ctx->field_num];
break;
case ST_F_HRSP_1XX:
case ST_F_HRSP_2XX:
case ST_F_HRSP_OTHER:
if (px->mode != PR_MODE_HTTP)
goto next_px;
- if (appctx->st2 != ST_F_HRSP_1XX)
+ if (ctx->field_num != ST_F_HRSP_1XX)
ctx->flags &= ~PROMEX_FL_METRIC_HDR;
labels[1].name = ist("code");
- labels[1].value = promex_hrsp_code[appctx->st2 - ST_F_HRSP_1XX];
- val = stats[appctx->st2];
+ labels[1].value = promex_hrsp_code[ctx->field_num - ST_F_HRSP_1XX];
+ val = stats[ctx->field_num];
break;
default:
- val = stats[appctx->st2];
+ val = stats[ctx->field_num];
}
- if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
next_px:
enum promex_srv_state state;
const char *check_state;
- for (;appctx->st2 < ST_F_TOTAL_FIELDS; appctx->st2++) {
- if (!(promex_st_metrics[appctx->st2].flags & ctx->flags))
+ for (;ctx->field_num < ST_F_TOTAL_FIELDS; ctx->field_num++) {
+ if (!(promex_st_metrics[ctx->field_num].flags & ctx->flags))
continue;
while (ctx->px) {
labels[1].name = ist("server");
labels[1].value = ist2(sv->id, strlen(sv->id));
- if (!stats_fill_sv_stats(px, sv, 0, stats, ST_F_TOTAL_FIELDS, &(appctx->st2)))
+ if (!stats_fill_sv_stats(px, sv, 0, stats, ST_F_TOTAL_FIELDS, &(ctx->field_num)))
return -1;
if ((ctx->flags & PROMEX_FL_NO_MAINT_SRV) && (sv->cur_admin & SRV_ADMF_MAINT))
goto next_sv;
- switch (appctx->st2) {
+ switch (ctx->field_num) {
case ST_F_STATUS:
state = promex_srv_status(sv);
for (; ctx->obj_state < PROMEX_SRV_STATE_COUNT; ctx->obj_state++) {
val = mkf_u32(FO_STATUS, state == ctx->obj_state);
labels[2].name = ist("state");
labels[2].value = promex_srv_st[ctx->obj_state];
- if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
}
check_state = get_check_status_info(ctx->obj_state);
labels[2].name = ist("state");
labels[2].value = ist(check_state);
- if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
}
case ST_F_REQ_TOT:
if (px->mode != PR_MODE_HTTP)
goto next_px;
- val = stats[appctx->st2];
+ val = stats[ctx->field_num];
break;
case ST_F_HRSP_1XX:
case ST_F_HRSP_2XX:
case ST_F_HRSP_OTHER:
if (px->mode != PR_MODE_HTTP)
goto next_px;
- if (appctx->st2 != ST_F_HRSP_1XX)
+ if (ctx->field_num != ST_F_HRSP_1XX)
ctx->flags &= ~PROMEX_FL_METRIC_HDR;
labels[2].name = ist("code");
- labels[2].value = promex_hrsp_code[appctx->st2 - ST_F_HRSP_1XX];
- val = stats[appctx->st2];
+ labels[2].value = promex_hrsp_code[ctx->field_num - ST_F_HRSP_1XX];
+ val = stats[ctx->field_num];
break;
default:
- val = stats[appctx->st2];
+ val = stats[ctx->field_num];
}
- if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[appctx->st2],
+ if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
next_sv:
int ret = 1;
struct stktable *t;
- for (; appctx->st2 < STICKTABLE_TOTAL_FIELDS; appctx->st2++) {
- if (!(promex_sticktable_metrics[appctx->st2].flags & ctx->flags))
+ for (; ctx->field_num < STICKTABLE_TOTAL_FIELDS; ctx->field_num++) {
+ if (!(promex_sticktable_metrics[ctx->field_num].flags & ctx->flags))
continue;
while (ctx->st) {
labels[0].value = ist2(t->id, strlen(t->id));
labels[1].name = ist("type");
labels[1].value = ist2(stktable_types[t->type].kw, strlen(stktable_types[t->type].kw));
- switch (appctx->st2) {
+ switch (ctx->field_num) {
case STICKTABLE_SIZE:
val = mkf_u32(FN_GAUGE, t->size);
break;
}
if (!promex_dump_metric(appctx, htx, prefix,
- &promex_sticktable_metrics[appctx->st2],
+ &promex_sticktable_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
ctx->sv = NULL;
ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_INFO_METRIC);
ctx->obj_state = 0;
- appctx->st2 = INF_NAME;
+ ctx->field_num = INF_NAME;
appctx->st1 = PROMEX_DUMPER_GLOBAL;
/* fall through */
ctx->flags &= ~PROMEX_FL_INFO_METRIC;
ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_FRONT_METRIC);
ctx->obj_state = 0;
- appctx->st2 = ST_F_PXNAME;
+ ctx->field_num = ST_F_PXNAME;
appctx->st1 = PROMEX_DUMPER_FRONT;
/* fall through */
ctx->flags &= ~PROMEX_FL_FRONT_METRIC;
ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_LI_METRIC);
ctx->obj_state = 0;
- appctx->st2 = ST_F_PXNAME;
+ ctx->field_num = ST_F_PXNAME;
appctx->st1 = PROMEX_DUMPER_LI;
/* fall through */
ctx->flags &= ~PROMEX_FL_LI_METRIC;
ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_BACK_METRIC);
ctx->obj_state = 0;
- appctx->st2 = ST_F_PXNAME;
+ ctx->field_num = ST_F_PXNAME;
appctx->st1 = PROMEX_DUMPER_BACK;
/* fall through */
ctx->flags &= ~PROMEX_FL_BACK_METRIC;
ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_SRV_METRIC);
ctx->obj_state = 0;
- appctx->st2 = ST_F_PXNAME;
+ ctx->field_num = ST_F_PXNAME;
appctx->st1 = PROMEX_DUMPER_SRV;
/* fall through */
ctx->sv = NULL;
ctx->flags &= ~(PROMEX_FL_METRIC_HDR|PROMEX_FL_SRV_METRIC);
ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_STICKTABLE_METRIC);
- appctx->st2 = STICKTABLE_SIZE;
+ ctx->field_num = STICKTABLE_SIZE;
appctx->st1 = PROMEX_DUMPER_STICKTABLE;
/* fall through */
ctx->li = NULL;
ctx->sv = NULL;
ctx->flags &= ~(PROMEX_FL_METRIC_HDR|PROMEX_FL_STICKTABLE_METRIC);
- appctx->st2 = 0;
+ ctx->field_num = 0;
appctx->st1 = PROMEX_DUMPER_DONE;
/* fall through */
ctx->li = NULL;
ctx->sv = NULL;
ctx->flags = 0;
- appctx->st2 = 0;
+ ctx->field_num = 0;
appctx->st1 = PROMEX_DUMPER_DONE;
return -1;
}