Skip to content

Commit f47d819

Browse files
committed
optimize apr_psprintf calls in Prometheus output
Signed-off-by: Hans Zandbelt <[email protected]>
1 parent fd25b13 commit f47d819

File tree

1 file changed

+16
-19
lines changed

1 file changed

+16
-19
lines changed

src/metrics.c

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,6 +1151,7 @@ static const char *oidc_metric_prometheus_normalize_name(apr_pool_t *pool, const
11511151

11521152
#define OIDC_METRICS_PROMETHEUS_SERVER "server_name"
11531153
#define OIDC_METRICS_PROMETHEUS_BUCKET "bucket"
1154+
#define OIDC_METRICS_PROMETHEUS_SPEC "value"
11541155

11551156
typedef struct oidc_metric_prometheus_callback_ctx_t {
11561157
char *s_result;
@@ -1178,15 +1179,13 @@ int oidc_metrics_prometheus_counters(void *rec, const char *key, const char *val
11781179
while (iter2) {
11791180
s_spec = json_object_iter_key(iter2);
11801181
j_spec = json_object_iter_value(iter2);
1181-
if (_oidc_strcmp(OIDC_METRICS_SPEC_DEFAULT, s_spec) == 0) {
1182-
s_text = apr_psprintf(ctx->pool, "%s%s{%s=\"%s\"} %s\n", s_text, s_label,
1183-
OIDC_METRICS_PROMETHEUS_SERVER, s_server,
1184-
_json_int2str(ctx->pool, json_integer_value(j_spec)));
1185-
} else {
1186-
s_text = apr_psprintf(ctx->pool, "%s%s{%s=\"%s\",value=\"%s\"} %s\n", s_text, s_label,
1187-
OIDC_METRICS_PROMETHEUS_SERVER, s_server, s_spec,
1188-
_json_int2str(ctx->pool, json_integer_value(j_spec)));
1189-
}
1182+
s_text = apr_psprintf(ctx->pool, "%s%s{%s=\"%s\"", s_text, s_label,
1183+
OIDC_METRICS_PROMETHEUS_SERVER, s_server);
1184+
if (_oidc_strcmp(OIDC_METRICS_SPEC_DEFAULT, s_spec) != 0)
1185+
s_text = apr_psprintf(ctx->pool, "%s,%s=\"%s\"", s_text, OIDC_METRICS_PROMETHEUS_SPEC,
1186+
s_spec);
1187+
s_text = apr_psprintf(ctx->pool, "%s} %s\n", s_text,
1188+
_json_int2str(ctx->pool, json_integer_value(j_spec)));
11901189
iter2 = json_object_iter_next(j_specs, iter2);
11911190
}
11921191
iter1 = json_object_iter_next(o_counter, iter1);
@@ -1217,16 +1216,14 @@ int oidc_metrics_prometheus_timings(void *rec, const char *key, const char *valu
12171216
s_key = json_object_iter_key(iter3);
12181217
j_member = json_object_iter_value(iter3);
12191218
s_bucket = oidc_metrics_prometheus_bucket_label(s_key);
1220-
if (s_bucket) {
1221-
s_text = apr_psprintf(ctx->pool, "%s%s_%s{%s,%s=\"%s\"} %s\n", s_text, s_label,
1222-
OIDC_METRICS_PROMETHEUS_BUCKET, s_bucket,
1223-
OIDC_METRICS_PROMETHEUS_SERVER, s_server,
1224-
_json_int2str(ctx->pool, json_integer_value(j_member)));
1225-
} else {
1226-
s_text = apr_psprintf(ctx->pool, "%s%s_%s{%s=\"%s\"} %s\n", s_text, s_label, s_key,
1227-
OIDC_METRICS_PROMETHEUS_SERVER, s_server,
1228-
_json_int2str(ctx->pool, json_integer_value(j_member)));
1229-
}
1219+
if (s_bucket)
1220+
s_text = apr_psprintf(ctx->pool, "%s%s_%s{%s,", s_text, s_label,
1221+
OIDC_METRICS_PROMETHEUS_BUCKET, s_bucket);
1222+
else
1223+
s_text = apr_psprintf(ctx->pool, "%s%s_%s{", s_text, s_label, s_key);
1224+
1225+
s_text = apr_psprintf(ctx->pool, "%s%s=\"%s\"} %s\n", s_text, OIDC_METRICS_PROMETHEUS_SERVER,
1226+
s_server, _json_int2str(ctx->pool, json_integer_value(j_member)));
12301227
iter3 = json_object_iter_next(j_timing, iter3);
12311228
}
12321229
iter1 = json_object_iter_next(o_timer, iter1);

0 commit comments

Comments
 (0)