/* Dump the header lines for <metric>. It is its #HELP and #TYPE strings. It
* returns 1 on success. Otherwise, if <out> length exceeds <max>, it returns 0.
*/
-static int promex_dump_metric_header(struct appctx *appctx, struct htx *htx,
- const struct promex_metric *metric, const struct ist name,
+static int promex_dump_metric_header(struct appctx *appctx, struct htx *htx, const struct promex_metric *metric,
+ const struct ist name, const struct ist d,
struct ist *out, size_t max)
{
struct promex_ctx *ctx = appctx->svcctx;
istcat(out, ist(" "), max) == -1)
goto full;
- if (metric->flags & PROMEX_FL_INFO_METRIC)
+ if (isttest(d))
+ desc = d;
+ else if (metric->flags & PROMEX_FL_INFO_METRIC)
desc = ist(info_fields[ctx->field_num].desc);
- else if (metric->flags & PROMEX_FL_STICKTABLE_METRIC)
- 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[ctx->field_num];
if (istcat(out, desc, max) == -1 ||
istcat(out, ist("\n# TYPE "), max) == -1 ||
* success. Otherwise if <out> length exceeds <max>, it returns 0.
*/
static int promex_dump_metric(struct appctx *appctx, struct htx *htx, struct ist prefix,
- const struct ist n, const struct promex_metric *metric,
+ const struct ist n, const struct ist desc, const struct promex_metric *metric,
struct field *val, struct promex_label *labels, struct ist *out, size_t max)
{
struct ist name = { .ptr = (char[PROMEX_MAX_NAME_LEN]){ 0 }, .len = 0 };
istcat(&name, prefix, PROMEX_MAX_NAME_LEN);
istcat(&name, (isttest(n) ? n : metric->n), PROMEX_MAX_NAME_LEN);
-
if ((ctx->flags & PROMEX_FL_METRIC_HDR) &&
- !promex_dump_metric_header(appctx, htx, metric, name, out, max))
+ !promex_dump_metric_header(appctx, htx, metric, name, desc, out, max))
goto full;
if (istcat(out, name, max) == -1)
val = info[ctx->field_num];
}
- if (!promex_dump_metric(appctx, htx, prefix, IST_NULL, &promex_global_metrics[ctx->field_num],
+ if (!promex_dump_metric(appctx, htx, prefix, IST_NULL, IST_NULL,
+ &promex_global_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
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_front_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_front_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
labels[2].value = ist(li_status_st[ctx->obj_state]);
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_li_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_li_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
labels[1].value = promex_srv_st[ctx->obj_state];
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_back_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
labels[1].value = ist(check_state);
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_back_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
val = mkf_u32(FO_STATUS, bkd_state == ctx->obj_state);
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_back_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_back_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
labels[2].value = promex_srv_st[ctx->obj_state];
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_srv_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
labels[2].value = ist(check_state);
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_srv_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
if (!promex_dump_metric(appctx, htx, prefix,
promex_st_srv_metrics_names[ctx->field_num],
+ promex_st_metric_desc[ctx->field_num],
&promex_st_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;
}
if (!promex_dump_metric(appctx, htx, prefix, IST_NULL,
+ promex_sticktable_metric_desc[ctx->field_num],
&promex_sticktable_metrics[ctx->field_num],
&val, labels, &out, max))
goto full;