}
list_for_each_entry_from(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
- void *counters;
-
if (!(stats_px_get_cap(mod->domain_flags) & STATS_PX_CAP_FE))
continue;
if ((px->flags & PR_FL_DISABLED) || px->uuid <= 0 || !(px->cap & PR_CAP_FE))
goto next_px2;
- counters = EXTRA_COUNTERS_GET(px->extra_counters_fe, mod);
- if (!mod->fill_stats(counters, stats + ctx->field_num, &ctx->mod_field_num))
+ if (!mod->fill_stats(mod, px->extra_counters_fe, stats + ctx->field_num, &ctx->mod_field_num))
return -1;
val = stats[ctx->field_num + ctx->mod_field_num];
}
list_for_each_entry_from(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
- void *counters;
-
if (!(stats_px_get_cap(mod->domain_flags) & STATS_PX_CAP_LI))
continue;
labels[lb_idx+1].name = ist("mod");
labels[lb_idx+1].value = ist2(mod->name, strlen(mod->name));
- counters = EXTRA_COUNTERS_GET(li->extra_counters, mod);
- if (!mod->fill_stats(counters, stats + ctx->field_num, &ctx->mod_field_num))
+ if (!mod->fill_stats(mod, li->extra_counters, stats + ctx->field_num, &ctx->mod_field_num))
return -1;
val = stats[ctx->field_num + ctx->mod_field_num];
}
list_for_each_entry_from(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
- void *counters;
-
if (!(stats_px_get_cap(mod->domain_flags) & STATS_PX_CAP_BE))
continue;
if ((px->flags & PR_FL_DISABLED) || px->uuid <= 0 || !(px->cap & PR_CAP_BE))
goto next_px2;
- counters = EXTRA_COUNTERS_GET(px->extra_counters_be, mod);
- if (!mod->fill_stats(counters, stats + ctx->field_num, &ctx->mod_field_num))
+ if (!mod->fill_stats(mod, px->extra_counters_be, stats + ctx->field_num, &ctx->mod_field_num))
return -1;
val = stats[ctx->field_num + ctx->mod_field_num];
}
list_for_each_entry_from(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
- void *counters;
-
if (!(stats_px_get_cap(mod->domain_flags) & STATS_PX_CAP_SRV))
continue;
goto next_sv2;
- counters = EXTRA_COUNTERS_GET(sv->extra_counters, mod);
- if (!mod->fill_stats(counters, stats + ctx->field_num, &ctx->mod_field_num))
+ if (!mod->fill_stats(mod, sv->extra_counters, stats + ctx->field_num, &ctx->mod_field_num))
goto error;
val = stats[ctx->field_num + ctx->mod_field_num];
struct list list;
const char *name;
- /* functor used to generate the stats module using counters provided through data parameter */
- int (*fill_stats)(void *data, struct field *, unsigned int *);
+ /* function used to generate the stats module using counters provided through data parameter */
+ int (*fill_stats)(struct stats_module *, struct extra_counters *, struct field *, unsigned int *);
struct stat_col *stats; /* statistics provided by the module */
void *counters; /* initial values of allocated counters */
long long qpack_decoder_stream_error; /* total number of QPACK_DECODER_STREAM_ERROR errors received */
} h3_counters;
-static int h3_fill_stats(void *data, struct field *stats, unsigned int *selected_field)
+static int h3_fill_stats(struct stats_module *mod, struct extra_counters *ctr,
+ struct field *stats, unsigned int *selected_field)
{
- struct h3_counters *counters = data;
+ struct h3_counters *counters = EXTRA_COUNTERS_GET(ctr, mod);
unsigned int current_field = (selected_field != NULL ? *selected_field : 0);
for (; current_field < H3_STATS_COUNT; current_field++) {
#endif
} h1_counters;
-static int h1_fill_stats(void *data, struct field *stats, unsigned int *selected_field)
+static int h1_fill_stats(struct stats_module *mod, struct extra_counters *ctr,
+ struct field *stats, unsigned int *selected_field)
{
- struct h1_counters *counters = data;
+ struct h1_counters *counters = EXTRA_COUNTERS_GET(ctr, mod);
unsigned int current_field = (selected_field != NULL ? *selected_field : 0);
for (; current_field < H1_STATS_COUNT; current_field++) {
long long total_streams; /* total number of streams */
} h2_counters;
-static int h2_fill_stats(void *data, struct field *stats, unsigned int *selected_field)
+static int h2_fill_stats(struct stats_module *mod, struct extra_counters *ctr,
+ struct field *stats, unsigned int *selected_field)
{
- struct h2_counters *counters = data;
+ struct h2_counters *counters = EXTRA_COUNTERS_GET(ctr, mod);
unsigned int current_field = (selected_field != NULL ? *selected_field : 0);
for (; current_field < H2_STATS_COUNT; current_field++) {
struct quic_counters quic_counters;
-static int quic_fill_stats(void *data, struct field *stats, unsigned int *selected_field)
+static int quic_fill_stats(struct stats_module *mod, struct extra_counters *ctr,
+ struct field *stats, unsigned int *selected_field)
{
- struct quic_counters *counters = data;
+ struct quic_counters *counters = EXTRA_COUNTERS_GET(ctr, mod);
unsigned int current_field = (selected_field != NULL ? *selected_field : 0);
for (; current_field < QUIC_STATS_COUNT; current_field++) {
static struct dns_counters dns_counters;
-static int resolv_fill_stats(void *d, struct field *stats, unsigned int *selected_field)
+static int resolv_fill_stats(struct stats_module *mod, struct extra_counters *ctr,
+ struct field *stats, unsigned int *selected_field)
{
- struct dns_counters *counters = d;
+ struct dns_counters *counters = EXTRA_COUNTERS_GET(ctr, mod);
unsigned int current_field = (selected_field != NULL ? *selected_field : 0);
for (; current_field < RSLV_STAT_END; current_field++) {
memset(stats, 0, sizeof(struct field) * stats_count);
list_for_each_entry(mod, stat_modules, list) {
- struct counters_node *counters = EXTRA_COUNTERS_GET(ns->extra_counters, mod);
-
- if (!mod->fill_stats(counters, stats + idx, NULL))
+ if (!mod->fill_stats(mod, ns->extra_counters, stats + idx, NULL))
continue;
idx += mod->stats_count;
}
labels[1].name = ist("nameserver");
labels[1].value = ist(ns->id);
- ret = resolv_fill_stats(ns->counters, stats, &id);
+ ret = resolv_fill_stats(&rslv_stats_module, ns->extra_counters, stats, &id);
if (ret == 1)
*field = stats[id];
return ret;
static struct ssl_counters ssl_counters;
-static int ssl_fill_stats(void *data, struct field *stats, unsigned int *selected_field)
+static int ssl_fill_stats(struct stats_module *mod, struct extra_counters *ctr,
+ struct field *stats, unsigned int *selected_field)
{
- struct ssl_counters *counters = data;
+ struct ssl_counters *counters = EXTRA_COUNTERS_GET(ctr, mod);
unsigned int current_field = (selected_field != NULL ? *selected_field : 0);
for (; current_field < SSL_ST_STATS_COUNT; current_field++) {
return 0;
list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
- void *counters;
-
if (ctx->flags & STAT_F_FMT_FILE)
continue;
continue;
}
- counters = EXTRA_COUNTERS_GET(px->extra_counters_fe, mod);
- if (!mod->fill_stats(counters, line + stats_count, NULL))
+ if (!mod->fill_stats(mod, px->extra_counters_fe, line + stats_count, NULL))
continue;
stats_count += mod->stats_count;
}
return 0;
list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
- void *counters;
-
if (ctx->flags & STAT_F_FMT_FILE)
continue;
continue;
}
- counters = EXTRA_COUNTERS_GET(l->extra_counters, mod);
- if (!mod->fill_stats(counters, line + stats_count, NULL))
+ if (!mod->fill_stats(mod, l->extra_counters, line + stats_count, NULL))
continue;
stats_count += mod->stats_count;
}
return 0;
list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
- void *counters;
-
if (ctx->flags & STAT_F_FMT_FILE)
continue;
continue;
}
- counters = EXTRA_COUNTERS_GET(sv->extra_counters, mod);
- if (!mod->fill_stats(counters, line + stats_count, NULL))
+ if (!mod->fill_stats(mod, sv->extra_counters, line + stats_count, NULL))
continue;
stats_count += mod->stats_count;
}
return 0;
list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
- struct extra_counters *counters;
-
if (ctx->flags & STAT_F_FMT_FILE)
continue;
continue;
}
- counters = EXTRA_COUNTERS_GET(px->extra_counters_be, mod);
- if (!mod->fill_stats(counters, line + stats_count, NULL))
+ if (!mod->fill_stats(mod, px->extra_counters_be, line + stats_count, NULL))
continue;
stats_count += mod->stats_count;
}