]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: stats: rename proxy stats
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 19 Apr 2024 16:03:45 +0000 (18:03 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Mon, 22 Apr 2024 14:25:18 +0000 (16:25 +0200)
This commit is the first one of a serie which adjust naming convention
for stats module. The objective is to remove ambiguity and better
reflect how stats are implemented, especially since the introduction of
stats module.

This patch renames elements related to proxies statistics. One of the
main change is to rename ST_F_* statistics indexes prefix with the new
name ST_I_PX_*. This remove the reference to field which represents
another concept in the stats module. In the same vein, global
stat_fields variable is renamed metrics_px.

addons/promex/service-prometheus.c
include/haproxy/stats-t.h
include/haproxy/stats.h
reg-tests/webstats/missing-stats-fields.vtc
src/hlua_fcn.c
src/stats-html.c
src/stats-json.c
src/stats.c

index 1d587711c63174911b2194bd886410b61c602dcf..2b07efa962e1e945cd0a345632bb01c84ab6139f 100644 (file)
@@ -79,8 +79,8 @@ struct promex_metric_filter  {
 struct promex_ctx {
        void *p[4];                /* generic pointers used to save context  */
        unsigned int flags;        /* PROMEX_FL_* */
-       unsigned field_num;        /* current field number (ST_F_* etc) */
-       unsigned mod_field_num;    /* first field number of the current module (ST_F_* etc) */
+       unsigned field_num;        /* current field number (ST_I_PX_* etc) */
+       unsigned mod_field_num;    /* first field number of the current module (ST_I_PX_* etc) */
        int obj_state;             /* current state among PROMEX_{FRONT|BACK|SRV|LI}_STATE_* */
        struct list modules;       /* list of promex modules to export */
        struct eb_root filters;    /* list of filters to apply on metrics name */
@@ -173,154 +173,154 @@ const struct promex_metric promex_global_metrics[INF_TOTAL_FIELDS] = {
 };
 
 /* frontend/backend/server fields */
-const struct promex_metric promex_st_metrics[ST_F_TOTAL_FIELDS] = {
-       //[ST_F_PXNAME]               ignored
-       //[ST_F_SVNAME]               ignored
-       [ST_F_QCUR]                 = { .n = IST("current_queue"),                    .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_QMAX]                 = { .n = IST("max_queue"),                        .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_SCUR]                 = { .n = IST("current_sessions"),                 .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_SMAX]                 = { .n = IST("max_sessions"),                     .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_SLIM]                 = { .n = IST("limit_sessions"),                   .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_STOT]                 = { .n = IST("sessions_total"),                   .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_BIN]                  = { .n = IST("bytes_in_total"),                   .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_BOUT]                 = { .n = IST("bytes_out_total"),                  .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_DREQ]                 = { .n = IST("requests_denied_total"),            .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_DRESP]                = { .n = IST("responses_denied_total"),           .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_EREQ]                 = { .n = IST("request_errors_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC                                               ) },
-       [ST_F_ECON]                 = { .n = IST("connection_errors_total"),          .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_ERESP]                = { .n = IST("response_errors_total"),            .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_WRETR]                = { .n = IST("retry_warnings_total"),             .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_WREDIS]               = { .n = IST("redispatch_warnings_total"),        .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_STATUS]               = { .n = IST("status"),                           .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_WEIGHT]               = { .n = IST("weight"),                           .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_ACT]                  = { .n = IST("active_servers"),                   .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_BCK]                  = { .n = IST("backup_servers"),                   .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_CHKFAIL]              = { .n = IST("check_failures_total"),             .type = PROMEX_MT_COUNTER,  .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_CHKDOWN]              = { .n = IST("check_up_down_total"),              .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_LASTCHG]              = { .n = IST("check_last_change_seconds"),        .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_DOWNTIME]             = { .n = IST("downtime_seconds_total"),           .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_QLIMIT]               = { .n = IST("queue_limit"),                      .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       //[ST_F_PID]                  ignored
-       //[ST_F_IID]                  ignored
-       //[ST_F_SID]                  ignored
-       [ST_F_THROTTLE]             = { .n = IST("current_throttle"),                 .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_LBTOT]                = { .n = IST("loadbalanced_total"),               .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       //[ST_F_TRACKED]              ignored
-       //[ST_F_TYPE]                 ignored
-       //[ST_F_RATE]                 ignored
-       [ST_F_RATE_LIM]             = { .n = IST("limit_session_rate"),               .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
-       [ST_F_RATE_MAX]             = { .n = IST("max_session_rate"),                 .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_CHECK_STATUS]         = { .n = IST("check_status"),                     .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_CHECK_CODE]           = { .n = IST("check_code"),                       .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_CHECK_DURATION]       = { .n = IST("check_duration_seconds"),           .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_HRSP_1XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_HRSP_2XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_HRSP_3XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_HRSP_4XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_HRSP_5XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_HRSP_OTHER]           = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       //[ST_F_HANAFAIL]             ignored
-       //[ST_F_REQ_RATE]             ignored
-       [ST_F_REQ_RATE_MAX]         = { .n = IST("http_requests_rate_max"),           .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
-       [ST_F_REQ_TOT]              = { .n = IST("http_requests_total"),              .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_CLI_ABRT]             = { .n = IST("client_aborts_total"),              .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_SRV_ABRT]             = { .n = IST("server_aborts_total"),              .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_COMP_IN]              = { .n = IST("http_comp_bytes_in_total"),         .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_COMP_OUT]             = { .n = IST("http_comp_bytes_out_total"),        .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_COMP_BYP]             = { .n = IST("http_comp_bytes_bypassed_total"),   .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_COMP_RSP]             = { .n = IST("http_comp_responses_total"),        .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_LASTSESS]             = { .n = IST("last_session_seconds"),             .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       //[ST_F_LAST_CHK]             ignored
-       //[ST_F_LAST_AGT]             ignored
-       [ST_F_QTIME]                = { .n = IST("queue_time_average_seconds"),       .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_CTIME]                = { .n = IST("connect_time_average_seconds"),     .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_RTIME]                = { .n = IST("response_time_average_seconds"),    .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_TTIME]                = { .n = IST("total_time_average_seconds"),       .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       //[ST_F_AGENT_STATUS]         ignored
-       //[ST_F_AGENT_CODE]           ignored
-       //[ST_F_AGENT_DURATION]       ignored
-       //[ST_F_CHECK_DESC]           ignored
-       //[ST_F_AGENT_DESC]           ignored
-       //[ST_F_CHECK_RISE]           ignored
-       //[ST_F_CHECK_FALL]           ignored
-       //[ST_F_CHECK_HEALTH]         ignored
-       //[ST_F_AGENT_RISE]           ignored
-       //[ST_F_AGENT_FALL]           ignored
-       //[ST_F_AGENT_HEALTH]         ignored
-       //[ST_F_ADDR]                 ignored
-       //[ST_F_COOKIE]               ignored
-       //[ST_F_MODE]                 ignored
-       //[ST_F_ALGO]                 ignored
-       //[ST_F_CONN_RATE]            ignored
-       [ST_F_CONN_RATE_MAX]        = { .n = IST("connections_rate_max"),             .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
-       [ST_F_CONN_TOT]             = { .n = IST("connections_total"),                .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
-       [ST_F_INTERCEPTED]          = { .n = IST("intercepted_requests_total"),       .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
-       [ST_F_DCON]                 = { .n = IST("denied_connections_total"),         .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC                                               ) },
-       [ST_F_DSES]                 = { .n = IST("denied_sessions_total"),            .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC                                               ) },
-       [ST_F_WREW]                 = { .n = IST("failed_header_rewriting_total"),    .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_CONNECT]              = { .n = IST("connection_attempts_total"),        .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_REUSE]                = { .n = IST("connection_reuses_total"),          .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_CACHE_LOOKUPS]        = { .n = IST("http_cache_lookups_total"),         .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_CACHE_HITS]           = { .n = IST("http_cache_hits_total"),            .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_SRV_ICUR]             = { .n = IST("idle_connections_current"),         .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_SRV_ILIM]             = { .n = IST("idle_connections_limit"),           .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_QT_MAX]               = { .n = IST("max_queue_time_seconds"),           .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_CT_MAX]               = { .n = IST("max_connect_time_seconds"),         .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_RT_MAX]               = { .n = IST("max_response_time_seconds"),        .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_TT_MAX]               = { .n = IST("max_total_time_seconds"),           .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_EINT]                 = { .n = IST("internal_errors_total"),            .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_IDLE_CONN_CUR]        = { .n = IST("unsafe_idle_connections_current"),  .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_SAFE_CONN_CUR]        = { .n = IST("safe_idle_connections_current"),    .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_USED_CONN_CUR]        = { .n = IST("used_connections_current"),         .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_NEED_CONN_EST]        = { .n = IST("need_connections_current"),         .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
-       [ST_F_UWEIGHT]              = { .n = IST("uweight"),                          .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
-       [ST_F_AGG_SRV_CHECK_STATUS] = { .n = IST("agg_server_check_status"),          .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_AGG_SRV_STATUS ]      = { .n = IST("agg_server_status"),                .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC                       ) },
-       [ST_F_AGG_CHECK_STATUS]     = { .n = IST("agg_check_status"),                 .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC                       ) },
+const struct promex_metric promex_st_metrics[ST_I_PX_MAX] = {
+       //[ST_I_PX_PXNAME]               ignored
+       //[ST_I_PX_SVNAME]               ignored
+       [ST_I_PX_QCUR]                 = { .n = IST("current_queue"),                    .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_QMAX]                 = { .n = IST("max_queue"),                        .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_SCUR]                 = { .n = IST("current_sessions"),                 .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_SMAX]                 = { .n = IST("max_sessions"),                     .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_SLIM]                 = { .n = IST("limit_sessions"),                   .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_STOT]                 = { .n = IST("sessions_total"),                   .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_BIN]                  = { .n = IST("bytes_in_total"),                   .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_BOUT]                 = { .n = IST("bytes_out_total"),                  .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_DREQ]                 = { .n = IST("requests_denied_total"),            .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_DRESP]                = { .n = IST("responses_denied_total"),           .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_EREQ]                 = { .n = IST("request_errors_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC                                               ) },
+       [ST_I_PX_ECON]                 = { .n = IST("connection_errors_total"),          .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_ERESP]                = { .n = IST("response_errors_total"),            .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_WRETR]                = { .n = IST("retry_warnings_total"),             .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_WREDIS]               = { .n = IST("redispatch_warnings_total"),        .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_STATUS]               = { .n = IST("status"),                           .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_WEIGHT]               = { .n = IST("weight"),                           .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_ACT]                  = { .n = IST("active_servers"),                   .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_BCK]                  = { .n = IST("backup_servers"),                   .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_CHKFAIL]              = { .n = IST("check_failures_total"),             .type = PROMEX_MT_COUNTER,  .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_CHKDOWN]              = { .n = IST("check_up_down_total"),              .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_LASTCHG]              = { .n = IST("check_last_change_seconds"),        .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_DOWNTIME]             = { .n = IST("downtime_seconds_total"),           .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_QLIMIT]               = { .n = IST("queue_limit"),                      .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       //[ST_I_PX_PID]                  ignored
+       //[ST_I_PX_IID]                  ignored
+       //[ST_I_PX_SID]                  ignored
+       [ST_I_PX_THROTTLE]             = { .n = IST("current_throttle"),                 .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_LBTOT]                = { .n = IST("loadbalanced_total"),               .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       //[ST_I_PX_TRACKED]              ignored
+       //[ST_I_PX_TYPE]                 ignored
+       //[ST_I_PX_RATE]                 ignored
+       [ST_I_PX_RATE_LIM]             = { .n = IST("limit_session_rate"),               .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
+       [ST_I_PX_RATE_MAX]             = { .n = IST("max_session_rate"),                 .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_CHECK_STATUS]         = { .n = IST("check_status"),                     .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_CHECK_CODE]           = { .n = IST("check_code"),                       .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_CHECK_DURATION]       = { .n = IST("check_duration_seconds"),           .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_HRSP_1XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_HRSP_2XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_HRSP_3XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_HRSP_4XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_HRSP_5XX]             = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_HRSP_OTHER]           = { .n = IST("http_responses_total"),             .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       //[ST_I_PX_HANAFAIL]             ignored
+       //[ST_I_PX_REQ_RATE]             ignored
+       [ST_I_PX_REQ_RATE_MAX]         = { .n = IST("http_requests_rate_max"),           .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
+       [ST_I_PX_REQ_TOT]              = { .n = IST("http_requests_total"),              .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_CLI_ABRT]             = { .n = IST("client_aborts_total"),              .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_SRV_ABRT]             = { .n = IST("server_aborts_total"),              .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_COMP_IN]              = { .n = IST("http_comp_bytes_in_total"),         .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_COMP_OUT]             = { .n = IST("http_comp_bytes_out_total"),        .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_COMP_BYP]             = { .n = IST("http_comp_bytes_bypassed_total"),   .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_COMP_RSP]             = { .n = IST("http_comp_responses_total"),        .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_LASTSESS]             = { .n = IST("last_session_seconds"),             .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       //[ST_I_PX_LAST_CHK]             ignored
+       //[ST_I_PX_LAST_AGT]             ignored
+       [ST_I_PX_QTIME]                = { .n = IST("queue_time_average_seconds"),       .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_CTIME]                = { .n = IST("connect_time_average_seconds"),     .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_RTIME]                = { .n = IST("response_time_average_seconds"),    .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_TTIME]                = { .n = IST("total_time_average_seconds"),       .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       //[ST_I_PX_AGENT_STATUS]         ignored
+       //[ST_I_PX_AGENT_CODE]           ignored
+       //[ST_I_PX_AGENT_DURATION]       ignored
+       //[ST_I_PX_CHECK_DESC]           ignored
+       //[ST_I_PX_AGENT_DESC]           ignored
+       //[ST_I_PX_CHECK_RISE]           ignored
+       //[ST_I_PX_CHECK_FALL]           ignored
+       //[ST_I_PX_CHECK_HEALTH]         ignored
+       //[ST_I_PX_AGENT_RISE]           ignored
+       //[ST_I_PX_AGENT_FALL]           ignored
+       //[ST_I_PX_AGENT_HEALTH]         ignored
+       //[ST_I_PX_ADDR]                 ignored
+       //[ST_I_PX_COOKIE]               ignored
+       //[ST_I_PX_MODE]                 ignored
+       //[ST_I_PX_ALGO]                 ignored
+       //[ST_I_PX_CONN_RATE]            ignored
+       [ST_I_PX_CONN_RATE_MAX]        = { .n = IST("connections_rate_max"),             .type = PROMEX_MT_GAUGE,    .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
+       [ST_I_PX_CONN_TOT]             = { .n = IST("connections_total"),                .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
+       [ST_I_PX_INTERCEPTED]          = { .n = IST("intercepted_requests_total"),       .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC                                                                     ) },
+       [ST_I_PX_DCON]                 = { .n = IST("denied_connections_total"),         .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC                                               ) },
+       [ST_I_PX_DSES]                 = { .n = IST("denied_sessions_total"),            .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC                                               ) },
+       [ST_I_PX_WREW]                 = { .n = IST("failed_header_rewriting_total"),    .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_CONNECT]              = { .n = IST("connection_attempts_total"),        .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_REUSE]                = { .n = IST("connection_reuses_total"),          .type = PROMEX_MT_COUNTER,  .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_CACHE_LOOKUPS]        = { .n = IST("http_cache_lookups_total"),         .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_CACHE_HITS]           = { .n = IST("http_cache_hits_total"),            .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC |                       PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_SRV_ICUR]             = { .n = IST("idle_connections_current"),         .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_SRV_ILIM]             = { .n = IST("idle_connections_limit"),           .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_QT_MAX]               = { .n = IST("max_queue_time_seconds"),           .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_CT_MAX]               = { .n = IST("max_connect_time_seconds"),         .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_RT_MAX]               = { .n = IST("max_response_time_seconds"),        .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_TT_MAX]               = { .n = IST("max_total_time_seconds"),           .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_EINT]                 = { .n = IST("internal_errors_total"),            .type = PROMEX_MT_COUNTER,  .flags = (PROMEX_FL_FRONT_METRIC | PROMEX_FL_LI_METRIC | PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_IDLE_CONN_CUR]        = { .n = IST("unsafe_idle_connections_current"),  .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_SAFE_CONN_CUR]        = { .n = IST("safe_idle_connections_current"),    .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_USED_CONN_CUR]        = { .n = IST("used_connections_current"),         .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_NEED_CONN_EST]        = { .n = IST("need_connections_current"),         .type = PROMEX_MT_GAUGE,    .flags = (                                                                       PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_UWEIGHT]              = { .n = IST("uweight"),                          .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) },
+       [ST_I_PX_AGG_SRV_CHECK_STATUS] = { .n = IST("agg_server_check_status"),       .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_AGG_SRV_STATUS ]      = { .n = IST("agg_server_status"),                     .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC                       ) },
+       [ST_I_PX_AGG_CHECK_STATUS]     = { .n = IST("agg_check_status"),                      .type = PROMEX_MT_GAUGE,    .flags = (                                               PROMEX_FL_BACK_METRIC                       ) },
 };
 
 /* Specialized frontend metric names, to override default ones */
-const struct ist promex_st_front_metrics_names[ST_F_TOTAL_FIELDS] = {
+const struct ist promex_st_front_metrics_names[ST_I_PX_MAX] = {
 };
 
 /* Specialized backend metric names, to override default ones */
-const struct ist promex_st_back_metrics_names[ST_F_TOTAL_FIELDS] = {
+const struct ist promex_st_back_metrics_names[ST_I_PX_MAX] = {
 };
 
 /* Specialized listener metric names, to override default ones */
-const struct ist promex_st_li_metrics_names[ST_F_TOTAL_FIELDS] = {
+const struct ist promex_st_li_metrics_names[ST_I_PX_MAX] = {
 };
 
 /* Specialized server metric names, to override default ones */
-const struct ist promex_st_srv_metrics_names[ST_F_TOTAL_FIELDS] = {
-       [ST_F_ACT] = IST("active"),
-       [ST_F_BCK] = IST("backup"),
+const struct ist promex_st_srv_metrics_names[ST_I_PX_MAX] = {
+       [ST_I_PX_ACT] = IST("active"),
+       [ST_I_PX_BCK] = IST("backup"),
 };
 
 /* Description of overridden stats fields */
-const struct ist promex_st_metric_desc[ST_F_TOTAL_FIELDS] = {
-       [ST_F_STATUS]         = IST("Current status of the service, per state label value."),
-       [ST_F_CHECK_STATUS]   = IST("Status of last health check, per state label value."),
-       [ST_F_CHECK_CODE]     = IST("layer5-7 code, if available of the last health check."),
-       [ST_F_CHECK_DURATION] = IST("Total duration of the latest server health check, in seconds."),
-       [ST_F_QTIME]          = IST("Avg. queue time for last 1024 successful connections."),
-       [ST_F_CTIME]          = IST("Avg. connect time for last 1024 successful connections."),
-       [ST_F_RTIME]          = IST("Avg. response time for last 1024 successful connections."),
-       [ST_F_TTIME]          = IST("Avg. total time for last 1024 successful connections."),
-       [ST_F_QT_MAX]         = IST("Maximum observed time spent in the queue"),
-       [ST_F_CT_MAX]         = IST("Maximum observed time spent waiting for a connection to complete"),
-       [ST_F_RT_MAX]         = IST("Maximum observed time spent waiting for a server response"),
-       [ST_F_TT_MAX]         = IST("Maximum observed total request+response time (request+queue+connect+response+processing)"),
+const struct ist promex_st_metric_desc[ST_I_PX_MAX] = {
+       [ST_I_PX_STATUS]         = IST("Current status of the service, per state label value."),
+       [ST_I_PX_CHECK_STATUS]   = IST("Status of last health check, per state label value."),
+       [ST_I_PX_CHECK_CODE]     = IST("layer5-7 code, if available of the last health check."),
+       [ST_I_PX_CHECK_DURATION] = IST("Total duration of the latest server health check, in seconds."),
+       [ST_I_PX_QTIME]          = IST("Avg. queue time for last 1024 successful connections."),
+       [ST_I_PX_CTIME]          = IST("Avg. connect time for last 1024 successful connections."),
+       [ST_I_PX_RTIME]          = IST("Avg. response time for last 1024 successful connections."),
+       [ST_I_PX_TTIME]          = IST("Avg. total time for last 1024 successful connections."),
+       [ST_I_PX_QT_MAX]         = IST("Maximum observed time spent in the queue"),
+       [ST_I_PX_CT_MAX]         = IST("Maximum observed time spent waiting for a connection to complete"),
+       [ST_I_PX_RT_MAX]         = IST("Maximum observed time spent waiting for a server response"),
+       [ST_I_PX_TT_MAX]         = IST("Maximum observed total request+response time (request+queue+connect+response+processing)"),
 };
 
-/* Specific labels for all ST_F_HRSP_* fields */
-const struct ist promex_hrsp_code[1 + ST_F_HRSP_OTHER - ST_F_HRSP_1XX] = {
-       [ST_F_HRSP_1XX - ST_F_HRSP_1XX]   = IST("1xx"),
-       [ST_F_HRSP_2XX - ST_F_HRSP_1XX]   = IST("2xx"),
-       [ST_F_HRSP_3XX - ST_F_HRSP_1XX]   = IST("3xx"),
-       [ST_F_HRSP_4XX - ST_F_HRSP_1XX]   = IST("4xx"),
-       [ST_F_HRSP_5XX - ST_F_HRSP_1XX]   = IST("5xx"),
-       [ST_F_HRSP_OTHER - ST_F_HRSP_1XX] = IST("other"),
+/* Specific labels for all ST_I_PX_HRSP_* fields */
+const struct ist promex_hrsp_code[1 + ST_I_PX_HRSP_OTHER - ST_I_PX_HRSP_1XX] = {
+       [ST_I_PX_HRSP_1XX - ST_I_PX_HRSP_1XX]   = IST("1xx"),
+       [ST_I_PX_HRSP_2XX - ST_I_PX_HRSP_1XX]   = IST("2xx"),
+       [ST_I_PX_HRSP_3XX - ST_I_PX_HRSP_1XX]   = IST("3xx"),
+       [ST_I_PX_HRSP_4XX - ST_I_PX_HRSP_1XX]   = IST("4xx"),
+       [ST_I_PX_HRSP_5XX - ST_I_PX_HRSP_1XX]   = IST("5xx"),
+       [ST_I_PX_HRSP_OTHER - ST_I_PX_HRSP_1XX] = IST("other"),
 };
 
 enum promex_front_state {
@@ -631,7 +631,7 @@ static int promex_dump_front_metrics(struct appctx *appctx, struct htx *htx)
        int ret = 1;
        enum promex_front_state state;
 
-       for (;ctx->field_num < ST_F_TOTAL_FIELDS; ctx->field_num++) {
+       for (;ctx->field_num < ST_I_PX_MAX; ctx->field_num++) {
                if (!(promex_st_metrics[ctx->field_num].flags & ctx->flags))
                        continue;
 
@@ -641,7 +641,7 @@ static int promex_dump_front_metrics(struct appctx *appctx, struct htx *htx)
                if (!isttest(name))
                        name = promex_st_metrics[ctx->field_num].n;
                if (!isttest(desc))
-                       desc = ist(stat_fields[ctx->field_num].desc);
+                       desc = ist(metrics_px[ctx->field_num].desc);
 
                if (promex_filter_metric(appctx, prefix, name))
                        continue;
@@ -659,11 +659,11 @@ static int promex_dump_front_metrics(struct appctx *appctx, struct htx *htx)
                        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, &(ctx->field_num)))
+                       if (!stats_fill_fe_stats(px, stats, ST_I_PX_MAX, &(ctx->field_num)))
                                return -1;
 
                        switch (ctx->field_num) {
-                               case ST_F_STATUS:
+                               case ST_I_PX_STATUS:
                                        state = !(px->flags & PR_FL_STOPPED);
                                        for (; ctx->obj_state < PROMEX_FRONT_STATE_COUNT; ctx->obj_state++) {
                                                labels[1].name = ist("state");
@@ -677,31 +677,31 @@ static int promex_dump_front_metrics(struct appctx *appctx, struct htx *htx)
                                        }
                                        ctx->obj_state = 0;
                                        goto next_px;
-                               case ST_F_REQ_RATE_MAX:
-                               case ST_F_REQ_TOT:
-                               case ST_F_INTERCEPTED:
-                               case ST_F_CACHE_LOOKUPS:
-                               case ST_F_CACHE_HITS:
-                               case ST_F_COMP_IN:
-                               case ST_F_COMP_OUT:
-                               case ST_F_COMP_BYP:
-                               case ST_F_COMP_RSP:
+                               case ST_I_PX_REQ_RATE_MAX:
+                               case ST_I_PX_REQ_TOT:
+                               case ST_I_PX_INTERCEPTED:
+                               case ST_I_PX_CACHE_LOOKUPS:
+                               case ST_I_PX_CACHE_HITS:
+                               case ST_I_PX_COMP_IN:
+                               case ST_I_PX_COMP_OUT:
+                               case ST_I_PX_COMP_BYP:
+                               case ST_I_PX_COMP_RSP:
                                        if (px->mode != PR_MODE_HTTP)
                                                goto next_px;
                                        val = stats[ctx->field_num];
                                        break;
-                               case ST_F_HRSP_1XX:
-                               case ST_F_HRSP_2XX:
-                               case ST_F_HRSP_3XX:
-                               case ST_F_HRSP_4XX:
-                               case ST_F_HRSP_5XX:
-                               case ST_F_HRSP_OTHER:
+                               case ST_I_PX_HRSP_1XX:
+                               case ST_I_PX_HRSP_2XX:
+                               case ST_I_PX_HRSP_3XX:
+                               case ST_I_PX_HRSP_4XX:
+                               case ST_I_PX_HRSP_5XX:
+                               case ST_I_PX_HRSP_OTHER:
                                        if (px->mode != PR_MODE_HTTP)
                                                goto next_px;
-                                       if (ctx->field_num != ST_F_HRSP_1XX)
+                                       if (ctx->field_num != ST_I_PX_HRSP_1XX)
                                                ctx->flags &= ~PROMEX_FL_METRIC_HDR;
                                        labels[1].name = ist("code");
-                                       labels[1].value = promex_hrsp_code[ctx->field_num - ST_F_HRSP_1XX];
+                                       labels[1].value = promex_hrsp_code[ctx->field_num - ST_I_PX_HRSP_1XX];
                                        val = stats[ctx->field_num];
                                        break;
 
@@ -818,7 +818,7 @@ static int promex_dump_listener_metrics(struct appctx *appctx, struct htx *htx)
        int ret = 1;
        enum li_status status;
 
-       for (;ctx->field_num < ST_F_TOTAL_FIELDS; ctx->field_num++) {
+       for (;ctx->field_num < ST_I_PX_MAX; ctx->field_num++) {
                if (!(promex_st_metrics[ctx->field_num].flags & ctx->flags))
                        continue;
 
@@ -828,7 +828,7 @@ static int promex_dump_listener_metrics(struct appctx *appctx, struct htx *htx)
                if (!isttest(name))
                        name = promex_st_metrics[ctx->field_num].n;
                if (!isttest(desc))
-                       desc = ist(stat_fields[ctx->field_num].desc);
+                       desc = ist(metrics_px[ctx->field_num].desc);
 
                if (promex_filter_metric(appctx, prefix, name))
                        continue;
@@ -857,11 +857,11 @@ static int promex_dump_listener_metrics(struct appctx *appctx, struct htx *htx)
                                labels[1].value = ist2(li->name, strlen(li->name));
 
                                if (!stats_fill_li_stats(px, li, 0, stats,
-                                                        ST_F_TOTAL_FIELDS, &(ctx->field_num)))
+                                                        ST_I_PX_MAX, &(ctx->field_num)))
                                        return -1;
 
                                switch (ctx->field_num) {
-                                       case ST_F_STATUS:
+                                       case ST_I_PX_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);
@@ -1006,7 +1006,7 @@ static int promex_dump_back_metrics(struct appctx *appctx, struct htx *htx)
        enum promex_srv_state srv_state;
        enum healthcheck_status srv_check_status;
 
-       for (;ctx->field_num < ST_F_TOTAL_FIELDS; ctx->field_num++) {
+       for (;ctx->field_num < ST_I_PX_MAX; ctx->field_num++) {
                if (!(promex_st_metrics[ctx->field_num].flags & ctx->flags))
                        continue;
 
@@ -1016,7 +1016,7 @@ static int promex_dump_back_metrics(struct appctx *appctx, struct htx *htx)
                if (!isttest(name))
                        name = promex_st_metrics[ctx->field_num].n;
                if (!isttest(desc))
-                       desc = ist(stat_fields[ctx->field_num].desc);
+                       desc = ist(metrics_px[ctx->field_num].desc);
 
                if (promex_filter_metric(appctx, prefix, name))
                        continue;
@@ -1037,12 +1037,12 @@ static int promex_dump_back_metrics(struct appctx *appctx, struct htx *htx)
                        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, &(ctx->field_num)))
+                       if (!stats_fill_be_stats(px, 0, stats, ST_I_PX_MAX, &(ctx->field_num)))
                                return -1;
 
                        switch (ctx->field_num) {
-                               case ST_F_AGG_SRV_CHECK_STATUS: // DEPRECATED
-                               case ST_F_AGG_SRV_STATUS:
+                               case ST_I_PX_AGG_SRV_CHECK_STATUS: // DEPRECATED
+                               case ST_I_PX_AGG_SRV_STATUS:
                                        if (!px->srv)
                                                goto next_px;
                                        sv = px->srv;
@@ -1062,7 +1062,7 @@ static int promex_dump_back_metrics(struct appctx *appctx, struct htx *htx)
                                        }
                                        ctx->obj_state = 0;
                                        goto next_px;
-                               case ST_F_AGG_CHECK_STATUS:
+                               case ST_I_PX_AGG_CHECK_STATUS:
                                        if (!px->srv)
                                                goto next_px;
                                        sv = px->srv;
@@ -1087,7 +1087,7 @@ static int promex_dump_back_metrics(struct appctx *appctx, struct htx *htx)
                                        }
                                        ctx->obj_state = 0;
                                        goto next_px;
-                               case ST_F_STATUS:
+                               case ST_I_PX_STATUS:
                                        bkd_state = ((px->lbprm.tot_weight > 0 || !px->srv) ? 1 : 0);
                                        for (; ctx->obj_state < PROMEX_BACK_STATE_COUNT; ctx->obj_state++) {
                                                labels[1].name = ist("state");
@@ -1100,61 +1100,61 @@ static int promex_dump_back_metrics(struct appctx *appctx, struct htx *htx)
                                        }
                                        ctx->obj_state = 0;
                                        goto next_px;
-                               case ST_F_QTIME:
+                               case ST_I_PX_QTIME:
                                        secs = (double)swrate_avg(px->be_counters.q_time, TIME_STATS_SAMPLES) / 1000.0;
                                        val = mkf_flt(FN_AVG, secs);
                                        break;
-                               case ST_F_CTIME:
+                               case ST_I_PX_CTIME:
                                        secs = (double)swrate_avg(px->be_counters.c_time, TIME_STATS_SAMPLES) / 1000.0;
                                        val = mkf_flt(FN_AVG, secs);
                                        break;
-                               case ST_F_RTIME:
+                               case ST_I_PX_RTIME:
                                        secs = (double)swrate_avg(px->be_counters.d_time, TIME_STATS_SAMPLES) / 1000.0;
                                        val = mkf_flt(FN_AVG, secs);
                                        break;
-                               case ST_F_TTIME:
+                               case ST_I_PX_TTIME:
                                        secs = (double)swrate_avg(px->be_counters.t_time, TIME_STATS_SAMPLES) / 1000.0;
                                        val = mkf_flt(FN_AVG, secs);
                                        break;
-                               case ST_F_QT_MAX:
+                               case ST_I_PX_QT_MAX:
                                        secs = (double)px->be_counters.qtime_max / 1000.0;
                                        val = mkf_flt(FN_MAX, secs);
                                        break;
-                               case ST_F_CT_MAX:
+                               case ST_I_PX_CT_MAX:
                                        secs = (double)px->be_counters.ctime_max / 1000.0;
                                        val = mkf_flt(FN_MAX, secs);
                                        break;
-                               case ST_F_RT_MAX:
+                               case ST_I_PX_RT_MAX:
                                        secs = (double)px->be_counters.dtime_max / 1000.0;
                                        val = mkf_flt(FN_MAX, secs);
                                        break;
-                               case ST_F_TT_MAX:
+                               case ST_I_PX_TT_MAX:
                                        secs = (double)px->be_counters.ttime_max / 1000.0;
                                        val = mkf_flt(FN_MAX, secs);
                                        break;
-                               case ST_F_REQ_TOT:
-                               case ST_F_CACHE_LOOKUPS:
-                               case ST_F_CACHE_HITS:
-                               case ST_F_COMP_IN:
-                               case ST_F_COMP_OUT:
-                               case ST_F_COMP_BYP:
-                               case ST_F_COMP_RSP:
+                               case ST_I_PX_REQ_TOT:
+                               case ST_I_PX_CACHE_LOOKUPS:
+                               case ST_I_PX_CACHE_HITS:
+                               case ST_I_PX_COMP_IN:
+                               case ST_I_PX_COMP_OUT:
+                               case ST_I_PX_COMP_BYP:
+                               case ST_I_PX_COMP_RSP:
                                        if (px->mode != PR_MODE_HTTP)
                                                goto next_px;
                                        val = stats[ctx->field_num];
                                        break;
-                               case ST_F_HRSP_1XX:
-                               case ST_F_HRSP_2XX:
-                               case ST_F_HRSP_3XX:
-                               case ST_F_HRSP_4XX:
-                               case ST_F_HRSP_5XX:
-                               case ST_F_HRSP_OTHER:
+                               case ST_I_PX_HRSP_1XX:
+                               case ST_I_PX_HRSP_2XX:
+                               case ST_I_PX_HRSP_3XX:
+                               case ST_I_PX_HRSP_4XX:
+                               case ST_I_PX_HRSP_5XX:
+                               case ST_I_PX_HRSP_OTHER:
                                        if (px->mode != PR_MODE_HTTP)
                                                goto next_px;
-                                       if (ctx->field_num != ST_F_HRSP_1XX)
+                                       if (ctx->field_num != ST_I_PX_HRSP_1XX)
                                                ctx->flags &= ~PROMEX_FL_METRIC_HDR;
                                        labels[1].name = ist("code");
-                                       labels[1].value = promex_hrsp_code[ctx->field_num - ST_F_HRSP_1XX];
+                                       labels[1].value = promex_hrsp_code[ctx->field_num - ST_I_PX_HRSP_1XX];
                                        val = stats[ctx->field_num];
                                        break;
 
@@ -1272,7 +1272,7 @@ static int promex_dump_srv_metrics(struct appctx *appctx, struct htx *htx)
        enum promex_srv_state state;
        const char *check_state;
 
-       for (;ctx->field_num < ST_F_TOTAL_FIELDS; ctx->field_num++) {
+       for (;ctx->field_num < ST_I_PX_MAX; ctx->field_num++) {
                if (!(promex_st_metrics[ctx->field_num].flags & ctx->flags))
                        continue;
 
@@ -1282,7 +1282,7 @@ static int promex_dump_srv_metrics(struct appctx *appctx, struct htx *htx)
                if (!isttest(name))
                        name = promex_st_metrics[ctx->field_num].n;
                if (!isttest(desc))
-                       desc = ist(stat_fields[ctx->field_num].desc);
+                       desc = ist(metrics_px[ctx->field_num].desc);
 
                if (promex_filter_metric(appctx, prefix, name))
                        continue;
@@ -1307,14 +1307,14 @@ static int promex_dump_srv_metrics(struct appctx *appctx, struct htx *htx)
                                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, &(ctx->field_num)))
+                               if (!stats_fill_sv_stats(px, sv, 0, stats, ST_I_PX_MAX, &(ctx->field_num)))
                                        return -1;
 
                                if ((ctx->flags & PROMEX_FL_NO_MAINT_SRV) && (sv->cur_admin & SRV_ADMF_MAINT))
                                        goto next_sv;
 
                                switch (ctx->field_num) {
-                                       case ST_F_STATUS:
+                                       case ST_I_PX_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);
@@ -1327,39 +1327,39 @@ static int promex_dump_srv_metrics(struct appctx *appctx, struct htx *htx)
                                                }
                                                ctx->obj_state = 0;
                                                goto next_sv;
-                                       case ST_F_QTIME:
+                                       case ST_I_PX_QTIME:
                                                secs = (double)swrate_avg(sv->counters.q_time, TIME_STATS_SAMPLES) / 1000.0;
                                                val = mkf_flt(FN_AVG, secs);
                                                break;
-                                       case ST_F_CTIME:
+                                       case ST_I_PX_CTIME:
                                                secs = (double)swrate_avg(sv->counters.c_time, TIME_STATS_SAMPLES) / 1000.0;
                                                val = mkf_flt(FN_AVG, secs);
                                                break;
-                                       case ST_F_RTIME:
+                                       case ST_I_PX_RTIME:
                                                secs = (double)swrate_avg(sv->counters.d_time, TIME_STATS_SAMPLES) / 1000.0;
                                                val = mkf_flt(FN_AVG, secs);
                                                break;
-                                       case ST_F_TTIME:
+                                       case ST_I_PX_TTIME:
                                                secs = (double)swrate_avg(sv->counters.t_time, TIME_STATS_SAMPLES) / 1000.0;
                                                val = mkf_flt(FN_AVG, secs);
                                                break;
-                                       case ST_F_QT_MAX:
+                                       case ST_I_PX_QT_MAX:
                                                secs = (double)sv->counters.qtime_max / 1000.0;
                                                val = mkf_flt(FN_MAX, secs);
                                                break;
-                                       case ST_F_CT_MAX:
+                                       case ST_I_PX_CT_MAX:
                                                secs = (double)sv->counters.ctime_max / 1000.0;
                                                val = mkf_flt(FN_MAX, secs);
                                                break;
-                                       case ST_F_RT_MAX:
+                                       case ST_I_PX_RT_MAX:
                                                secs = (double)sv->counters.dtime_max / 1000.0;
                                                val = mkf_flt(FN_MAX, secs);
                                                break;
-                                       case ST_F_TT_MAX:
+                                       case ST_I_PX_TT_MAX:
                                                secs = (double)sv->counters.ttime_max / 1000.0;
                                                val = mkf_flt(FN_MAX, secs);
                                                break;
-                                       case ST_F_CHECK_STATUS:
+                                       case ST_I_PX_CHECK_STATUS:
                                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) != CHK_ST_ENABLED)
                                                        goto next_sv;
 
@@ -1377,38 +1377,38 @@ static int promex_dump_srv_metrics(struct appctx *appctx, struct htx *htx)
                                                }
                                                ctx->obj_state = 0;
                                                goto next_sv;
-                                       case ST_F_CHECK_CODE:
+                                       case ST_I_PX_CHECK_CODE:
                                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) != CHK_ST_ENABLED)
                                                        goto next_sv;
                                                val = mkf_u32(FN_OUTPUT, (sv->check.status < HCHK_STATUS_L57DATA) ? 0 : sv->check.code);
                                                break;
-                                       case ST_F_CHECK_DURATION:
+                                       case ST_I_PX_CHECK_DURATION:
                                                if (sv->check.status < HCHK_STATUS_CHECKED)
                                                    goto next_sv;
                                                secs = (double)sv->check.duration / 1000.0;
                                                val = mkf_flt(FN_DURATION, secs);
                                                break;
-                                       case ST_F_REQ_TOT:
+                                       case ST_I_PX_REQ_TOT:
                                                if (px->mode != PR_MODE_HTTP) {
                                                        sv = NULL;
                                                        goto next_px;
                                                }
                                                val = stats[ctx->field_num];
                                                break;
-                                       case ST_F_HRSP_1XX:
-                                       case ST_F_HRSP_2XX:
-                                       case ST_F_HRSP_3XX:
-                                       case ST_F_HRSP_4XX:
-                                       case ST_F_HRSP_5XX:
-                                       case ST_F_HRSP_OTHER:
+                                       case ST_I_PX_HRSP_1XX:
+                                       case ST_I_PX_HRSP_2XX:
+                                       case ST_I_PX_HRSP_3XX:
+                                       case ST_I_PX_HRSP_4XX:
+                                       case ST_I_PX_HRSP_5XX:
+                                       case ST_I_PX_HRSP_OTHER:
                                                if (px->mode != PR_MODE_HTTP) {
                                                        sv = NULL;
                                                        goto next_px;
                                                }
-                                               if (ctx->field_num != ST_F_HRSP_1XX)
+                                               if (ctx->field_num != ST_I_PX_HRSP_1XX)
                                                        ctx->flags &= ~PROMEX_FL_METRIC_HDR;
                                                labels[2].name = ist("code");
-                                               labels[2].value = promex_hrsp_code[ctx->field_num - ST_F_HRSP_1XX];
+                                               labels[2].value = promex_hrsp_code[ctx->field_num - ST_I_PX_HRSP_1XX];
                                                val = stats[ctx->field_num];
                                                break;
 
@@ -1720,7 +1720,7 @@ static int promex_dump_metrics(struct appctx *appctx, struct stconn *sc, struct
                        ctx->flags &= ~PROMEX_FL_INFO_METRIC;
                        ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_FRONT_METRIC);
                        ctx->obj_state = 0;
-                       ctx->field_num = ST_F_PXNAME;
+                       ctx->field_num = ST_I_PX_PXNAME;
                        ctx->mod_field_num = 0;
                        appctx->st1 = PROMEX_DUMPER_FRONT;
                        __fallthrough;
@@ -1738,7 +1738,7 @@ static int promex_dump_metrics(struct appctx *appctx, struct stconn *sc, struct
                        ctx->flags &= ~PROMEX_FL_FRONT_METRIC;
                        ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_LI_METRIC);
                        ctx->obj_state = 0;
-                       ctx->field_num = ST_F_PXNAME;
+                       ctx->field_num = ST_I_PX_PXNAME;
                        ctx->mod_field_num = 0;
                        appctx->st1 = PROMEX_DUMPER_LI;
                        __fallthrough;
@@ -1756,7 +1756,7 @@ static int promex_dump_metrics(struct appctx *appctx, struct stconn *sc, struct
                        ctx->flags &= ~PROMEX_FL_LI_METRIC;
                        ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_BACK_METRIC);
                        ctx->obj_state = 0;
-                       ctx->field_num = ST_F_PXNAME;
+                       ctx->field_num = ST_I_PX_PXNAME;
                        ctx->mod_field_num = 0;
                        appctx->st1 = PROMEX_DUMPER_BACK;
                        __fallthrough;
@@ -1774,7 +1774,7 @@ static int promex_dump_metrics(struct appctx *appctx, struct stconn *sc, struct
                        ctx->flags &= ~PROMEX_FL_BACK_METRIC;
                        ctx->flags |= (PROMEX_FL_METRIC_HDR|PROMEX_FL_SRV_METRIC);
                        ctx->obj_state = 0;
-                       ctx->field_num = ST_F_PXNAME;
+                       ctx->field_num = ST_I_PX_PXNAME;
                        ctx->mod_field_num = 0;
                        appctx->st1 = PROMEX_DUMPER_SRV;
                        __fallthrough;
index 6f07a581220564f87a1fdce302d5c912f921fc67..a5fd244ef0f20fce5d6f673dd14a46eace060fba 100644 (file)
@@ -339,129 +339,129 @@ enum info_field {
 
 
 /* Stats fields for CSV output. For any field added here, please add the text
- * representation in the stat_fields array. Please only append at the end,
- * before the ST_F_TOTAL_FIELDS entry, and never insert anything in the middle
+ * representation in the metrics_px array. Please only append at the end,
+ * before the ST_I_PX_MAX entry, and never insert anything in the middle
  * nor at the beginning.When adding an entry here, one must always add a
- * corresponding one in stat_fields[] otherwise Lua's get_stats() will break,
+ * corresponding one in metrics_px[] otherwise Lua's get_stats() will break,
  * and "show stats" will show a null.
  */
 enum stat_field {
-       ST_F_PXNAME,
-       ST_F_SVNAME,
-       ST_F_QCUR,
-       ST_F_QMAX,
-       ST_F_SCUR,
-       ST_F_SMAX,
-       ST_F_SLIM,
-       ST_F_STOT,
-       ST_F_BIN ,
-       ST_F_BOUT,
-       ST_F_DREQ,
-       ST_F_DRESP,
-       ST_F_EREQ,
-       ST_F_ECON,
-       ST_F_ERESP,
-       ST_F_WRETR,
-       ST_F_WREDIS,
-       ST_F_STATUS,
-       ST_F_WEIGHT,
-       ST_F_ACT,
-       ST_F_BCK,
-       ST_F_CHKFAIL,
-       ST_F_CHKDOWN,
-       ST_F_LASTCHG,
-       ST_F_DOWNTIME,
-       ST_F_QLIMIT,
-       ST_F_PID,
-       ST_F_IID,
-       ST_F_SID,
-       ST_F_THROTTLE,
-       ST_F_LBTOT,
-       ST_F_TRACKED,
-       ST_F_TYPE,
-       ST_F_RATE,
-       ST_F_RATE_LIM,
-       ST_F_RATE_MAX,
-       ST_F_CHECK_STATUS,
-       ST_F_CHECK_CODE,
-       ST_F_CHECK_DURATION,
-       ST_F_HRSP_1XX,
-       ST_F_HRSP_2XX,
-       ST_F_HRSP_3XX,
-       ST_F_HRSP_4XX,
-       ST_F_HRSP_5XX,
-       ST_F_HRSP_OTHER,
-       ST_F_HANAFAIL,
-       ST_F_REQ_RATE,
-       ST_F_REQ_RATE_MAX,
-       ST_F_REQ_TOT,
-       ST_F_CLI_ABRT,
-       ST_F_SRV_ABRT,
-       ST_F_COMP_IN,
-       ST_F_COMP_OUT,
-       ST_F_COMP_BYP,
-       ST_F_COMP_RSP,
-       ST_F_LASTSESS,
-       ST_F_LAST_CHK,
-       ST_F_LAST_AGT,
-       ST_F_QTIME,
-       ST_F_CTIME,
-       ST_F_RTIME,
-       ST_F_TTIME,
-       ST_F_AGENT_STATUS,
-       ST_F_AGENT_CODE,
-       ST_F_AGENT_DURATION,
-       ST_F_CHECK_DESC,
-       ST_F_AGENT_DESC,
-       ST_F_CHECK_RISE,
-       ST_F_CHECK_FALL,
-       ST_F_CHECK_HEALTH,
-       ST_F_AGENT_RISE,
-       ST_F_AGENT_FALL,
-       ST_F_AGENT_HEALTH,
-       ST_F_ADDR,
-       ST_F_COOKIE,
-       ST_F_MODE,
-       ST_F_ALGO,
-       ST_F_CONN_RATE,
-       ST_F_CONN_RATE_MAX,
-       ST_F_CONN_TOT,
-       ST_F_INTERCEPTED,
-       ST_F_DCON,
-       ST_F_DSES,
-       ST_F_WREW,
-       ST_F_CONNECT,
-       ST_F_REUSE,
-       ST_F_CACHE_LOOKUPS,
-       ST_F_CACHE_HITS,
-       ST_F_SRV_ICUR,
-       ST_F_SRV_ILIM,
-       ST_F_QT_MAX,
-       ST_F_CT_MAX,
-       ST_F_RT_MAX,
-       ST_F_TT_MAX,
-       ST_F_EINT,
-       ST_F_IDLE_CONN_CUR,
-       ST_F_SAFE_CONN_CUR,
-       ST_F_USED_CONN_CUR,
-       ST_F_NEED_CONN_EST,
-       ST_F_UWEIGHT,
-       ST_F_AGG_SRV_STATUS,
-       ST_F_AGG_SRV_CHECK_STATUS,
-       ST_F_AGG_CHECK_STATUS,
-       ST_F_SRID,
-       ST_F_SESS_OTHER,
-       ST_F_H1SESS,
-       ST_F_H2SESS,
-       ST_F_H3SESS,
-       ST_F_REQ_OTHER,
-       ST_F_H1REQ,
-       ST_F_H2REQ,
-       ST_F_H3REQ,
-       ST_F_PROTO,
+       ST_I_PX_PXNAME,
+       ST_I_PX_SVNAME,
+       ST_I_PX_QCUR,
+       ST_I_PX_QMAX,
+       ST_I_PX_SCUR,
+       ST_I_PX_SMAX,
+       ST_I_PX_SLIM,
+       ST_I_PX_STOT,
+       ST_I_PX_BIN ,
+       ST_I_PX_BOUT,
+       ST_I_PX_DREQ,
+       ST_I_PX_DRESP,
+       ST_I_PX_EREQ,
+       ST_I_PX_ECON,
+       ST_I_PX_ERESP,
+       ST_I_PX_WRETR,
+       ST_I_PX_WREDIS,
+       ST_I_PX_STATUS,
+       ST_I_PX_WEIGHT,
+       ST_I_PX_ACT,
+       ST_I_PX_BCK,
+       ST_I_PX_CHKFAIL,
+       ST_I_PX_CHKDOWN,
+       ST_I_PX_LASTCHG,
+       ST_I_PX_DOWNTIME,
+       ST_I_PX_QLIMIT,
+       ST_I_PX_PID,
+       ST_I_PX_IID,
+       ST_I_PX_SID,
+       ST_I_PX_THROTTLE,
+       ST_I_PX_LBTOT,
+       ST_I_PX_TRACKED,
+       ST_I_PX_TYPE,
+       ST_I_PX_RATE,
+       ST_I_PX_RATE_LIM,
+       ST_I_PX_RATE_MAX,
+       ST_I_PX_CHECK_STATUS,
+       ST_I_PX_CHECK_CODE,
+       ST_I_PX_CHECK_DURATION,
+       ST_I_PX_HRSP_1XX,
+       ST_I_PX_HRSP_2XX,
+       ST_I_PX_HRSP_3XX,
+       ST_I_PX_HRSP_4XX,
+       ST_I_PX_HRSP_5XX,
+       ST_I_PX_HRSP_OTHER,
+       ST_I_PX_HANAFAIL,
+       ST_I_PX_REQ_RATE,
+       ST_I_PX_REQ_RATE_MAX,
+       ST_I_PX_REQ_TOT,
+       ST_I_PX_CLI_ABRT,
+       ST_I_PX_SRV_ABRT,
+       ST_I_PX_COMP_IN,
+       ST_I_PX_COMP_OUT,
+       ST_I_PX_COMP_BYP,
+       ST_I_PX_COMP_RSP,
+       ST_I_PX_LASTSESS,
+       ST_I_PX_LAST_CHK,
+       ST_I_PX_LAST_AGT,
+       ST_I_PX_QTIME,
+       ST_I_PX_CTIME,
+       ST_I_PX_RTIME,
+       ST_I_PX_TTIME,
+       ST_I_PX_AGENT_STATUS,
+       ST_I_PX_AGENT_CODE,
+       ST_I_PX_AGENT_DURATION,
+       ST_I_PX_CHECK_DESC,
+       ST_I_PX_AGENT_DESC,
+       ST_I_PX_CHECK_RISE,
+       ST_I_PX_CHECK_FALL,
+       ST_I_PX_CHECK_HEALTH,
+       ST_I_PX_AGENT_RISE,
+       ST_I_PX_AGENT_FALL,
+       ST_I_PX_AGENT_HEALTH,
+       ST_I_PX_ADDR,
+       ST_I_PX_COOKIE,
+       ST_I_PX_MODE,
+       ST_I_PX_ALGO,
+       ST_I_PX_CONN_RATE,
+       ST_I_PX_CONN_RATE_MAX,
+       ST_I_PX_CONN_TOT,
+       ST_I_PX_INTERCEPTED,
+       ST_I_PX_DCON,
+       ST_I_PX_DSES,
+       ST_I_PX_WREW,
+       ST_I_PX_CONNECT,
+       ST_I_PX_REUSE,
+       ST_I_PX_CACHE_LOOKUPS,
+       ST_I_PX_CACHE_HITS,
+       ST_I_PX_SRV_ICUR,
+       ST_I_PX_SRV_ILIM,
+       ST_I_PX_QT_MAX,
+       ST_I_PX_CT_MAX,
+       ST_I_PX_RT_MAX,
+       ST_I_PX_TT_MAX,
+       ST_I_PX_EINT,
+       ST_I_PX_IDLE_CONN_CUR,
+       ST_I_PX_SAFE_CONN_CUR,
+       ST_I_PX_USED_CONN_CUR,
+       ST_I_PX_NEED_CONN_EST,
+       ST_I_PX_UWEIGHT,
+       ST_I_PX_AGG_SRV_STATUS,
+       ST_I_PX_AGG_SRV_CHECK_STATUS,
+       ST_I_PX_AGG_CHECK_STATUS,
+       ST_I_PX_SRID,
+       ST_I_PX_SESS_OTHER,
+       ST_I_PX_H1SESS,
+       ST_I_PX_H2SESS,
+       ST_I_PX_H3SESS,
+       ST_I_PX_REQ_OTHER,
+       ST_I_PX_H1REQ,
+       ST_I_PX_H2REQ,
+       ST_I_PX_H3REQ,
+       ST_I_PX_PROTO,
 
        /* must always be the last one */
-       ST_F_TOTAL_FIELDS
+       ST_I_PX_MAX
 };
 
 /* Please consider updating stats_dump_fields_*(),
index e86c1299d0a7c566702d797f4195277b05a6f7ca..b3379ae7da6d30c7f30b6a065827561fe0757275 100644 (file)
@@ -38,7 +38,7 @@ struct stconn;
 /* These two structs contains all field names and descriptions according to
  * the the number of entries in "enum stat_field" and "enum info_field"
  */
-extern const struct name_desc stat_fields[];
+extern const struct name_desc metrics_px[];
 extern const struct name_desc info_fields[];
 extern const char *stat_status_codes[];
 extern struct applet http_stats_applet;
index c85855d5f1b47555f254a2e725189d8e04d316b5..8b292c38654ed50817716f727889b313511b7bcf 100644 (file)
@@ -1,6 +1,6 @@
 varnishtest "Verifies the absence of (null) in 'show stats' header"
 
-# This can happen if a new ST_F_xxx enum is added without updating
+# This can happen if a new ST_I_PX_xxx enum is added without updating
 # stats_fields[].
 
 feature ignore_unknown_macro
index 96ec85b21b2578c60ed494e0e73fbee1ba4187b6..fde5ad8a95d78b315867619802199fb704de5e05 100644 (file)
@@ -53,7 +53,7 @@ static int class_stktable_ref;
 static int class_proxy_list_ref;
 static int class_server_list_ref;
 
-#define STATS_LEN (MAX((int)ST_F_TOTAL_FIELDS, (int)INF_TOTAL_FIELDS))
+#define STATS_LEN (MAX((int)ST_I_PX_MAX, (int)INF_TOTAL_FIELDS))
 
 static THREAD_LOCAL struct field stats[STATS_LEN];
 
@@ -1159,11 +1159,11 @@ int hlua_listener_get_stats(lua_State *L)
        }
 
        stats_fill_li_stats(li->bind_conf->frontend, li, STAT_SHLGNDS, stats,
-                           STATS_LEN, NULL);
+                           STATS_LEN, NULL);
 
        lua_newtable(L);
-       for (i=0; i<ST_F_TOTAL_FIELDS; i++) {
-               lua_pushstring(L, stat_fields[i].name);
+       for (i=0; i<ST_I_PX_MAX; i++) {
+               lua_pushstring(L, metrics_px[i].name);
                hlua_fcn_pushfield(L, &stats[i]);
                lua_settable(L, -3);
        }
@@ -1208,8 +1208,8 @@ int hlua_server_get_stats(lua_State *L)
                            STATS_LEN, NULL);
 
        lua_newtable(L);
-       for (i=0; i<ST_F_TOTAL_FIELDS; i++) {
-               lua_pushstring(L, stat_fields[i].name);
+       for (i=0; i<ST_I_PX_MAX; i++) {
+               lua_pushstring(L, metrics_px[i].name);
                hlua_fcn_pushfield(L, &stats[i]);
                lua_settable(L, -3);
        }
@@ -2056,8 +2056,8 @@ int hlua_proxy_get_stats(lua_State *L)
        else
                stats_fill_fe_stats(px, stats, STATS_LEN, NULL);
        lua_newtable(L);
-       for (i=0; i<ST_F_TOTAL_FIELDS; i++) {
-               lua_pushstring(L, stat_fields[i].name);
+       for (i=0; i<ST_I_PX_MAX; i++) {
+               lua_pushstring(L, metrics_px[i].name);
                hlua_fcn_pushfield(L, &stats[i]);
                lua_settable(L, -3);
        }
index de4103faf3f2dc9984ad849e5b2385817b310b15..9f313c34355ea50b2173d7acd7817ef70b8e6e5a 100644 (file)
@@ -498,7 +498,7 @@ int stats_dump_fields_html(struct buffer *out,
        int flags = ctx->flags;
        int i = 0, j = 0;
 
-       if (stats[ST_F_TYPE].u.u32 == STATS_TYPE_FE) {
+       if (stats[ST_I_PX_TYPE].u.u32 == STATS_TYPE_FE) {
                chunk_appendf(out,
                              /* name, queue */
                              "<tr class=\"frontend\">");
@@ -514,7 +514,7 @@ int stats_dump_fields_html(struct buffer *out,
                              "<a class=lfsb href=\"#%s/Frontend\">Frontend</a></td>"
                              "<td colspan=3></td>"
                              "",
-                             field_str(stats, ST_F_PXNAME), field_str(stats, ST_F_PXNAME));
+                             field_str(stats, ST_I_PX_PXNAME), field_str(stats, ST_I_PX_PXNAME));
 
                chunk_appendf(out,
                              /* sessions rate : current */
@@ -522,14 +522,14 @@ int stats_dump_fields_html(struct buffer *out,
                              "<tr><th>Current connection rate:</th><td>%s/s</td></tr>"
                              "<tr><th>Current session rate:</th><td>%s/s</td></tr>"
                              "",
-                             U2H(stats[ST_F_RATE].u.u32),
-                             U2H(stats[ST_F_CONN_RATE].u.u32),
-                             U2H(stats[ST_F_RATE].u.u32));
+                             U2H(stats[ST_I_PX_RATE].u.u32),
+                             U2H(stats[ST_I_PX_CONN_RATE].u.u32),
+                             U2H(stats[ST_I_PX_RATE].u.u32));
 
-               if (strcmp(field_str(stats, ST_F_MODE), "http") == 0)
+               if (strcmp(field_str(stats, ST_I_PX_MODE), "http") == 0)
                        chunk_appendf(out,
                                      "<tr><th>Current request rate:</th><td>%s/s</td></tr>",
-                                     U2H(stats[ST_F_REQ_RATE].u.u32));
+                                     U2H(stats[ST_I_PX_REQ_RATE].u.u32));
 
                chunk_appendf(out,
                              "</table></div></u></td>"
@@ -538,20 +538,20 @@ int stats_dump_fields_html(struct buffer *out,
                              "<tr><th>Max connection rate:</th><td>%s/s</td></tr>"
                              "<tr><th>Max session rate:</th><td>%s/s</td></tr>"
                              "",
-                             U2H(stats[ST_F_RATE_MAX].u.u32),
-                             U2H(stats[ST_F_CONN_RATE_MAX].u.u32),
-                             U2H(stats[ST_F_RATE_MAX].u.u32));
+                             U2H(stats[ST_I_PX_RATE_MAX].u.u32),
+                             U2H(stats[ST_I_PX_CONN_RATE_MAX].u.u32),
+                             U2H(stats[ST_I_PX_RATE_MAX].u.u32));
 
-               if (strcmp(field_str(stats, ST_F_MODE), "http") == 0)
+               if (strcmp(field_str(stats, ST_I_PX_MODE), "http") == 0)
                        chunk_appendf(out,
                                      "<tr><th>Max request rate:</th><td>%s/s</td></tr>",
-                                     U2H(stats[ST_F_REQ_RATE_MAX].u.u32));
+                                     U2H(stats[ST_I_PX_REQ_RATE_MAX].u.u32));
 
                chunk_appendf(out,
                              "</table></div></u></td>"
                              /* sessions rate : limit */
                              "<td>%s</td>",
-                             LIM2A(stats[ST_F_RATE_LIM].u.u32, "-"));
+                             LIM2A(stats[ST_I_PX_RATE_LIM].u.u32, "-"));
 
                chunk_appendf(out,
                              /* sessions: current, max, limit, total */
@@ -560,13 +560,13 @@ int stats_dump_fields_html(struct buffer *out,
                              "<tr><th>Cum. connections:</th><td>%s</td></tr>"
                              "<tr><th>Cum. sessions:</th><td>%s</td></tr>"
                              "",
-                             U2H(stats[ST_F_SCUR].u.u32), U2H(stats[ST_F_SMAX].u.u32), U2H(stats[ST_F_SLIM].u.u32),
-                             U2H(stats[ST_F_STOT].u.u64),
-                             U2H(stats[ST_F_CONN_TOT].u.u64),
-                             U2H(stats[ST_F_STOT].u.u64));
+                             U2H(stats[ST_I_PX_SCUR].u.u32), U2H(stats[ST_I_PX_SMAX].u.u32), U2H(stats[ST_I_PX_SLIM].u.u32),
+                             U2H(stats[ST_I_PX_STOT].u.u64),
+                             U2H(stats[ST_I_PX_CONN_TOT].u.u64),
+                             U2H(stats[ST_I_PX_STOT].u.u64));
 
                /* http response (via hover): 1xx, 2xx, 3xx, 4xx, 5xx, other */
-               if (strcmp(field_str(stats, ST_F_MODE), "http") == 0) {
+               if (strcmp(field_str(stats, ST_I_PX_MODE), "http") == 0) {
                        chunk_appendf(out,
                                      "<tr><th>- HTTP/1 sessions:</th><td>%s</td></tr>"
                                      "<tr><th>- HTTP/2 sessions:</th><td>%s</td></tr>"
@@ -578,15 +578,15 @@ int stats_dump_fields_html(struct buffer *out,
                                      "<tr><th>- HTTP/3 requests:</th><td>%s</td></tr>"
                                      "<tr><th>- other requests:</th><td>%s</td></tr>"
                                      "",
-                                     U2H(stats[ST_F_H1SESS].u.u64),
-                                     U2H(stats[ST_F_H2SESS].u.u64),
-                                     U2H(stats[ST_F_H3SESS].u.u64),
-                                     U2H(stats[ST_F_SESS_OTHER].u.u64),
-                                     U2H(stats[ST_F_REQ_TOT].u.u64),
-                                     U2H(stats[ST_F_H1REQ].u.u64),
-                                     U2H(stats[ST_F_H2REQ].u.u64),
-                                     U2H(stats[ST_F_H3REQ].u.u64),
-                                     U2H(stats[ST_F_REQ_OTHER].u.u64));
+                                     U2H(stats[ST_I_PX_H1SESS].u.u64),
+                                     U2H(stats[ST_I_PX_H2SESS].u.u64),
+                                     U2H(stats[ST_I_PX_H3SESS].u.u64),
+                                     U2H(stats[ST_I_PX_SESS_OTHER].u.u64),
+                                     U2H(stats[ST_I_PX_REQ_TOT].u.u64),
+                                     U2H(stats[ST_I_PX_H1REQ].u.u64),
+                                     U2H(stats[ST_I_PX_H2REQ].u.u64),
+                                     U2H(stats[ST_I_PX_H3REQ].u.u64),
+                                     U2H(stats[ST_I_PX_REQ_OTHER].u.u64));
 
                        chunk_appendf(out,
                                      "<tr><th>- HTTP 1xx responses:</th><td>%s</td></tr>"
@@ -597,15 +597,15 @@ int stats_dump_fields_html(struct buffer *out,
                                      "<tr><th>- HTTP 5xx responses:</th><td>%s</td></tr>"
                                      "<tr><th>- other responses:</th><td>%s</td></tr>"
                                      "",
-                                     U2H(stats[ST_F_HRSP_1XX].u.u64),
-                                     U2H(stats[ST_F_HRSP_2XX].u.u64),
-                                     U2H(stats[ST_F_COMP_RSP].u.u64),
-                                     stats[ST_F_HRSP_2XX].u.u64 ?
-                                     (int)(100 * stats[ST_F_COMP_RSP].u.u64 / stats[ST_F_HRSP_2XX].u.u64) : 0,
-                                     U2H(stats[ST_F_HRSP_3XX].u.u64),
-                                     U2H(stats[ST_F_HRSP_4XX].u.u64),
-                                     U2H(stats[ST_F_HRSP_5XX].u.u64),
-                                     U2H(stats[ST_F_HRSP_OTHER].u.u64));
+                                     U2H(stats[ST_I_PX_HRSP_1XX].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_2XX].u.u64),
+                                     U2H(stats[ST_I_PX_COMP_RSP].u.u64),
+                                     stats[ST_I_PX_HRSP_2XX].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_COMP_RSP].u.u64 / stats[ST_I_PX_HRSP_2XX].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_HRSP_3XX].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_4XX].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_5XX].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_OTHER].u.u64));
 
                        chunk_appendf(out,
                                      "<tr><th>Intercepted requests:</th><td>%s</td></tr>"
@@ -614,13 +614,13 @@ int stats_dump_fields_html(struct buffer *out,
                                      "<tr><th>Failed hdr rewrites:</th><td>%s</td></tr>"
                                      "<tr><th>Internal errors:</th><td>%s</td></tr>"
                                      "",
-                                     U2H(stats[ST_F_INTERCEPTED].u.u64),
-                                     U2H(stats[ST_F_CACHE_LOOKUPS].u.u64),
-                                     U2H(stats[ST_F_CACHE_HITS].u.u64),
-                                     stats[ST_F_CACHE_LOOKUPS].u.u64 ?
-                                     (int)(100 * stats[ST_F_CACHE_HITS].u.u64 / stats[ST_F_CACHE_LOOKUPS].u.u64) : 0,
-                                     U2H(stats[ST_F_WREW].u.u64),
-                                     U2H(stats[ST_F_EINT].u.u64));
+                                     U2H(stats[ST_I_PX_INTERCEPTED].u.u64),
+                                     U2H(stats[ST_I_PX_CACHE_LOOKUPS].u.u64),
+                                     U2H(stats[ST_I_PX_CACHE_HITS].u.u64),
+                                     stats[ST_I_PX_CACHE_LOOKUPS].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_CACHE_HITS].u.u64 / stats[ST_I_PX_CACHE_LOOKUPS].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_WREW].u.u64),
+                                     U2H(stats[ST_I_PX_EINT].u.u64));
                }
 
                chunk_appendf(out,
@@ -630,7 +630,7 @@ int stats_dump_fields_html(struct buffer *out,
                              /* bytes : in */
                              "<td>%s</td>"
                              "",
-                             U2H(stats[ST_F_BIN].u.u64));
+                             U2H(stats[ST_I_PX_BIN].u.u64));
 
                chunk_appendf(out,
                              /* bytes:out + compression stats (via hover): comp_in, comp_out, comp_byp */
@@ -641,16 +641,16 @@ int stats_dump_fields_html(struct buffer *out,
                              "<tr><th>Compression bypass:</th><td>%s</td></tr>"
                              "<tr><th>Total bytes saved:</th><td>%s</td><td>(%d%%)</td></tr>"
                              "</table></div>%s</td>",
-                             (stats[ST_F_COMP_IN].u.u64 || stats[ST_F_COMP_BYP].u.u64) ? "<u>":"",
-                             U2H(stats[ST_F_BOUT].u.u64),
-                             U2H(stats[ST_F_BOUT].u.u64),
-                             U2H(stats[ST_F_COMP_IN].u.u64),
-                             U2H(stats[ST_F_COMP_OUT].u.u64),
-                             stats[ST_F_COMP_IN].u.u64 ? (int)(stats[ST_F_COMP_OUT].u.u64 * 100 / stats[ST_F_COMP_IN].u.u64) : 0,
-                             U2H(stats[ST_F_COMP_BYP].u.u64),
-                             U2H(stats[ST_F_COMP_IN].u.u64 - stats[ST_F_COMP_OUT].u.u64),
-                             stats[ST_F_BOUT].u.u64 ? (int)((stats[ST_F_COMP_IN].u.u64 - stats[ST_F_COMP_OUT].u.u64) * 100 / stats[ST_F_BOUT].u.u64) : 0,
-                             (stats[ST_F_COMP_IN].u.u64 || stats[ST_F_COMP_BYP].u.u64) ? "</u>":"");
+                             (stats[ST_I_PX_COMP_IN].u.u64 || stats[ST_I_PX_COMP_BYP].u.u64) ? "<u>":"",
+                             U2H(stats[ST_I_PX_BOUT].u.u64),
+                             U2H(stats[ST_I_PX_BOUT].u.u64),
+                             U2H(stats[ST_I_PX_COMP_IN].u.u64),
+                             U2H(stats[ST_I_PX_COMP_OUT].u.u64),
+                             stats[ST_I_PX_COMP_IN].u.u64 ? (int)(stats[ST_I_PX_COMP_OUT].u.u64 * 100 / stats[ST_I_PX_COMP_IN].u.u64) : 0,
+                             U2H(stats[ST_I_PX_COMP_BYP].u.u64),
+                             U2H(stats[ST_I_PX_COMP_IN].u.u64 - stats[ST_I_PX_COMP_OUT].u.u64),
+                             stats[ST_I_PX_BOUT].u.u64 ? (int)((stats[ST_I_PX_COMP_IN].u.u64 - stats[ST_I_PX_COMP_OUT].u.u64) * 100 / stats[ST_I_PX_BOUT].u.u64) : 0,
+                             (stats[ST_I_PX_COMP_IN].u.u64 || stats[ST_I_PX_COMP_BYP].u.u64) ? "</u>":"");
 
                chunk_appendf(out,
                              /* denied: req, resp */
@@ -664,9 +664,9 @@ int stats_dump_fields_html(struct buffer *out,
                              /* rest of server: nothing */
                              "<td class=ac colspan=8></td>"
                              "",
-                             U2H(stats[ST_F_DREQ].u.u64), U2H(stats[ST_F_DRESP].u.u64),
-                             U2H(stats[ST_F_EREQ].u.u64),
-                             field_str(stats, ST_F_STATUS));
+                             U2H(stats[ST_I_PX_DREQ].u.u64), U2H(stats[ST_I_PX_DRESP].u.u64),
+                             U2H(stats[ST_I_PX_EREQ].u.u64),
+                             field_str(stats, ST_I_PX_STATUS));
 
                if (flags & STAT_SHMODULES) {
                        list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
@@ -679,7 +679,7 @@ int stats_dump_fields_html(struct buffer *out,
                                        for (j = 0; j < mod->stats_count; ++j) {
                                                chunk_appendf(out,
                                                              "<tr><th>%s</th><td>%s</td></tr>",
-                                                             mod->stats[j].desc, field_to_html_str(&stats[ST_F_TOTAL_FIELDS + i]));
+                                                             mod->stats[j].desc, field_to_html_str(&stats[ST_I_PX_MAX + i]));
                                                ++i;
                                        }
                                        chunk_appendf(out, "</table></div></u>");
@@ -693,7 +693,7 @@ int stats_dump_fields_html(struct buffer *out,
 
                chunk_appendf(out, "</tr>");
        }
-       else if (stats[ST_F_TYPE].u.u32 == STATS_TYPE_SO) {
+       else if (stats[ST_I_PX_TYPE].u.u32 == STATS_TYPE_SO) {
                chunk_appendf(out, "<tr class=socket>");
                if (flags & STAT_ADMIN) {
                        /* Column sub-heading for Enable or Disable server */
@@ -705,24 +705,24 @@ int stats_dump_fields_html(struct buffer *out,
                              "<td class=ac><a name=\"%s/+%s\"></a>%s"
                              "<a class=lfsb href=\"#%s/+%s\">%s</a>"
                              "",
-                             field_str(stats, ST_F_PXNAME), field_str(stats, ST_F_SVNAME),
+                             field_str(stats, ST_I_PX_PXNAME), field_str(stats, ST_I_PX_SVNAME),
                              (flags & STAT_SHLGNDS)?"<u>":"",
-                             field_str(stats, ST_F_PXNAME), field_str(stats, ST_F_SVNAME), field_str(stats, ST_F_SVNAME));
+                             field_str(stats, ST_I_PX_PXNAME), field_str(stats, ST_I_PX_SVNAME), field_str(stats, ST_I_PX_SVNAME));
 
                if (flags & STAT_SHLGNDS) {
                        chunk_appendf(out, "<div class=tips>");
 
-                       if (isdigit((unsigned char)*field_str(stats, ST_F_ADDR)))
-                               chunk_appendf(out, "IPv4: %s, ", field_str(stats, ST_F_ADDR));
-                       else if (*field_str(stats, ST_F_ADDR) == '[')
-                               chunk_appendf(out, "IPv6: %s, ", field_str(stats, ST_F_ADDR));
-                       else if (*field_str(stats, ST_F_ADDR))
-                               chunk_appendf(out, "%s, ", field_str(stats, ST_F_ADDR));
+                       if (isdigit((unsigned char)*field_str(stats, ST_I_PX_ADDR)))
+                               chunk_appendf(out, "IPv4: %s, ", field_str(stats, ST_I_PX_ADDR));
+                       else if (*field_str(stats, ST_I_PX_ADDR) == '[')
+                               chunk_appendf(out, "IPv6: %s, ", field_str(stats, ST_I_PX_ADDR));
+                       else if (*field_str(stats, ST_I_PX_ADDR))
+                               chunk_appendf(out, "%s, ", field_str(stats, ST_I_PX_ADDR));
 
-                       chunk_appendf(out, "proto=%s, ", field_str(stats, ST_F_PROTO));
+                       chunk_appendf(out, "proto=%s, ", field_str(stats, ST_I_PX_PROTO));
 
                        /* id */
-                       chunk_appendf(out, "id: %d</div>", stats[ST_F_SID].u.u32);
+                       chunk_appendf(out, "id: %d</div>", stats[ST_I_PX_SID].u.u32);
                }
 
                chunk_appendf(out,
@@ -737,8 +737,8 @@ int stats_dump_fields_html(struct buffer *out,
                              "<td>%s</td><td>%s</td>"
                              "",
                              (flags & STAT_SHLGNDS)?"</u>":"",
-                             U2H(stats[ST_F_SCUR].u.u32), U2H(stats[ST_F_SMAX].u.u32), U2H(stats[ST_F_SLIM].u.u32),
-                             U2H(stats[ST_F_STOT].u.u64), U2H(stats[ST_F_BIN].u.u64), U2H(stats[ST_F_BOUT].u.u64));
+                             U2H(stats[ST_I_PX_SCUR].u.u32), U2H(stats[ST_I_PX_SMAX].u.u32), U2H(stats[ST_I_PX_SLIM].u.u32),
+                             U2H(stats[ST_I_PX_STOT].u.u64), U2H(stats[ST_I_PX_BIN].u.u64), U2H(stats[ST_I_PX_BOUT].u.u64));
 
                chunk_appendf(out,
                              /* denied: req, resp */
@@ -752,9 +752,9 @@ int stats_dump_fields_html(struct buffer *out,
                              /* rest of server: nothing */
                              "<td class=ac colspan=8></td>"
                              "",
-                             U2H(stats[ST_F_DREQ].u.u64), U2H(stats[ST_F_DRESP].u.u64),
-                             U2H(stats[ST_F_EREQ].u.u64),
-                             field_str(stats, ST_F_STATUS));
+                             U2H(stats[ST_I_PX_DREQ].u.u64), U2H(stats[ST_I_PX_DRESP].u.u64),
+                             U2H(stats[ST_I_PX_EREQ].u.u64),
+                             field_str(stats, ST_I_PX_STATUS));
 
                if (flags & STAT_SHMODULES) {
                        list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
@@ -767,7 +767,7 @@ int stats_dump_fields_html(struct buffer *out,
                                        for (j = 0; j < mod->stats_count; ++j) {
                                                chunk_appendf(out,
                                                              "<tr><th>%s</th><td>%s</td></tr>",
-                                                             mod->stats[j].desc, field_to_html_str(&stats[ST_F_TOTAL_FIELDS + i]));
+                                                             mod->stats[j].desc, field_to_html_str(&stats[ST_I_PX_MAX + i]));
                                                ++i;
                                        }
                                        chunk_appendf(out, "</table></div></u>");
@@ -781,7 +781,7 @@ int stats_dump_fields_html(struct buffer *out,
 
                chunk_appendf(out, "</tr>");
        }
-       else if (stats[ST_F_TYPE].u.u32 == STATS_TYPE_SV) {
+       else if (stats[ST_I_PX_TYPE].u.u32 == STATS_TYPE_SV) {
                const char *style;
 
                /* determine the style to use depending on the server's state,
@@ -791,29 +791,29 @@ int stats_dump_fields_html(struct buffer *out,
                 * drain with the same color.
                 */
 
-               if (strcmp(field_str(stats, ST_F_STATUS), "DOWN") == 0 ||
-                   strcmp(field_str(stats, ST_F_STATUS), "DOWN (agent)") == 0) {
+               if (strcmp(field_str(stats, ST_I_PX_STATUS), "DOWN") == 0 ||
+                   strcmp(field_str(stats, ST_I_PX_STATUS), "DOWN (agent)") == 0) {
                        style = "down";
                }
-               else if (strncmp(field_str(stats, ST_F_STATUS), "DOWN ", strlen("DOWN ")) == 0) {
+               else if (strncmp(field_str(stats, ST_I_PX_STATUS), "DOWN ", strlen("DOWN ")) == 0) {
                        style = "going_up";
                }
-               else if (strcmp(field_str(stats, ST_F_STATUS), "DRAIN") == 0) {
+               else if (strcmp(field_str(stats, ST_I_PX_STATUS), "DRAIN") == 0) {
                        style = "draining";
                }
-               else if (strncmp(field_str(stats, ST_F_STATUS), "NOLB ", strlen("NOLB ")) == 0) {
+               else if (strncmp(field_str(stats, ST_I_PX_STATUS), "NOLB ", strlen("NOLB ")) == 0) {
                        style = "going_down";
                }
-               else if (strcmp(field_str(stats, ST_F_STATUS), "NOLB") == 0) {
+               else if (strcmp(field_str(stats, ST_I_PX_STATUS), "NOLB") == 0) {
                        style = "nolb";
                }
-               else if (strcmp(field_str(stats, ST_F_STATUS), "no check") == 0) {
+               else if (strcmp(field_str(stats, ST_I_PX_STATUS), "no check") == 0) {
                        style = "no_check";
                }
-               else if (!stats[ST_F_CHKFAIL].type ||
-                        stats[ST_F_CHECK_HEALTH].u.u32 == stats[ST_F_CHECK_RISE].u.u32 + stats[ST_F_CHECK_FALL].u.u32 - 1) {
+               else if (!stats[ST_I_PX_CHKFAIL].type ||
+                        stats[ST_I_PX_CHECK_HEALTH].u.u32 == stats[ST_I_PX_CHECK_RISE].u.u32 + stats[ST_I_PX_CHECK_FALL].u.u32 - 1) {
                        /* no check or max health = UP */
-                       if (stats[ST_F_WEIGHT].u.u32)
+                       if (stats[ST_I_PX_WEIGHT].u.u32)
                                style = "up";
                        else
                                style = "draining";
@@ -822,45 +822,45 @@ int stats_dump_fields_html(struct buffer *out,
                        style = "going_down";
                }
 
-               if (strncmp(field_str(stats, ST_F_STATUS), "MAINT", 5) == 0)
+               if (strncmp(field_str(stats, ST_I_PX_STATUS), "MAINT", 5) == 0)
                        chunk_appendf(out, "<tr class=\"maintain\">");
                else
                        chunk_appendf(out,
                                      "<tr class=\"%s_%s\">",
-                                     (stats[ST_F_BCK].u.u32) ? "backup" : "active", style);
+                                     (stats[ST_I_PX_BCK].u.u32) ? "backup" : "active", style);
 
 
                if (flags & STAT_ADMIN)
                        chunk_appendf(out,
                                      "<td><input class='%s-checkbox' type=\"checkbox\" name=\"s\" value=\"%s\"></td>",
-                                     field_str(stats, ST_F_PXNAME),
-                                     field_str(stats, ST_F_SVNAME));
+                                     field_str(stats, ST_I_PX_PXNAME),
+                                     field_str(stats, ST_I_PX_SVNAME));
 
                chunk_appendf(out,
                              "<td class=ac><a name=\"%s/%s\"></a>%s"
                              "<a class=lfsb href=\"#%s/%s\">%s</a>"
                              "",
-                             field_str(stats, ST_F_PXNAME), field_str(stats, ST_F_SVNAME),
+                             field_str(stats, ST_I_PX_PXNAME), field_str(stats, ST_I_PX_SVNAME),
                              (flags & STAT_SHLGNDS) ? "<u>" : "",
-                             field_str(stats, ST_F_PXNAME), field_str(stats, ST_F_SVNAME), field_str(stats, ST_F_SVNAME));
+                             field_str(stats, ST_I_PX_PXNAME), field_str(stats, ST_I_PX_SVNAME), field_str(stats, ST_I_PX_SVNAME));
 
                if (flags & STAT_SHLGNDS) {
                        chunk_appendf(out, "<div class=tips>");
 
-                       if (isdigit((unsigned char)*field_str(stats, ST_F_ADDR)))
-                               chunk_appendf(out, "IPv4: %s, ", field_str(stats, ST_F_ADDR));
-                       else if (*field_str(stats, ST_F_ADDR) == '[')
-                               chunk_appendf(out, "IPv6: %s, ", field_str(stats, ST_F_ADDR));
-                       else if (*field_str(stats, ST_F_ADDR))
-                               chunk_appendf(out, "%s, ", field_str(stats, ST_F_ADDR));
+                       if (isdigit((unsigned char)*field_str(stats, ST_I_PX_ADDR)))
+                               chunk_appendf(out, "IPv4: %s, ", field_str(stats, ST_I_PX_ADDR));
+                       else if (*field_str(stats, ST_I_PX_ADDR) == '[')
+                               chunk_appendf(out, "IPv6: %s, ", field_str(stats, ST_I_PX_ADDR));
+                       else if (*field_str(stats, ST_I_PX_ADDR))
+                               chunk_appendf(out, "%s, ", field_str(stats, ST_I_PX_ADDR));
 
                        /* id */
-                       chunk_appendf(out, "id: %d, rid: %d", stats[ST_F_SID].u.u32, stats[ST_F_SRID].u.u32);
+                       chunk_appendf(out, "id: %d, rid: %d", stats[ST_I_PX_SID].u.u32, stats[ST_I_PX_SRID].u.u32);
 
                        /* cookie */
-                       if (stats[ST_F_COOKIE].type) {
+                       if (stats[ST_I_PX_COOKIE].type) {
                                chunk_appendf(out, ", cookie: '");
-                               chunk_initstr(&src, field_str(stats, ST_F_COOKIE));
+                               chunk_initstr(&src, field_str(stats, ST_I_PX_COOKIE));
                                chunk_htmlencode(out, &src);
                                chunk_appendf(out, "'");
                        }
@@ -875,8 +875,8 @@ int stats_dump_fields_html(struct buffer *out,
                              "<td>%s</td><td>%s</td><td></td>"
                              "",
                              (flags & STAT_SHLGNDS) ? "</u>" : "",
-                             U2H(stats[ST_F_QCUR].u.u32), U2H(stats[ST_F_QMAX].u.u32), LIM2A(stats[ST_F_QLIMIT].u.u32, "-"),
-                             U2H(stats[ST_F_RATE].u.u32), U2H(stats[ST_F_RATE_MAX].u.u32));
+                             U2H(stats[ST_I_PX_QCUR].u.u32), U2H(stats[ST_I_PX_QMAX].u.u32), LIM2A(stats[ST_I_PX_QLIMIT].u.u32, "-"),
+                             U2H(stats[ST_I_PX_RATE].u.u32), U2H(stats[ST_I_PX_RATE_MAX].u.u32));
 
                chunk_appendf(out,
                              /* sessions: current, max, limit, total */
@@ -895,22 +895,22 @@ int stats_dump_fields_html(struct buffer *out,
                              "<td><u>%s<div class=tips><table class=det>"
                              "<tr><th>Cum. sessions:</th><td>%s</td></tr>"
                              "",
-                             U2H(stats[ST_F_SCUR].u.u32),
-                             U2H(stats[ST_F_SCUR].u.u32),
-                             U2H(stats[ST_F_USED_CONN_CUR].u.u32),
-                             U2H(stats[ST_F_SRV_ICUR].u.u32),
-                             U2H(stats[ST_F_IDLE_CONN_CUR].u.u32),
-                             U2H(stats[ST_F_SAFE_CONN_CUR].u.u32),
-                             U2H(stats[ST_F_NEED_CONN_EST].u.u32),
-
-                               LIM2A(stats[ST_F_SLIM].u.u32, "-"),
-                               stats[ST_F_SRV_ILIM].type ? U2H(stats[ST_F_SRV_ILIM].u.u32) : "-",
-                             U2H(stats[ST_F_SMAX].u.u32), LIM2A(stats[ST_F_SLIM].u.u32, "-"),
-                             U2H(stats[ST_F_STOT].u.u64),
-                             U2H(stats[ST_F_STOT].u.u64));
+                             U2H(stats[ST_I_PX_SCUR].u.u32),
+                             U2H(stats[ST_I_PX_SCUR].u.u32),
+                             U2H(stats[ST_I_PX_USED_CONN_CUR].u.u32),
+                             U2H(stats[ST_I_PX_SRV_ICUR].u.u32),
+                             U2H(stats[ST_I_PX_IDLE_CONN_CUR].u.u32),
+                             U2H(stats[ST_I_PX_SAFE_CONN_CUR].u.u32),
+                             U2H(stats[ST_I_PX_NEED_CONN_EST].u.u32),
+
+                               LIM2A(stats[ST_I_PX_SLIM].u.u32, "-"),
+                               stats[ST_I_PX_SRV_ILIM].type ? U2H(stats[ST_I_PX_SRV_ILIM].u.u32) : "-",
+                             U2H(stats[ST_I_PX_SMAX].u.u32), LIM2A(stats[ST_I_PX_SLIM].u.u32, "-"),
+                             U2H(stats[ST_I_PX_STOT].u.u64),
+                             U2H(stats[ST_I_PX_STOT].u.u64));
 
                /* http response (via hover): 1xx, 2xx, 3xx, 4xx, 5xx, other */
-               if (strcmp(field_str(stats, ST_F_MODE), "http") == 0) {
+               if (strcmp(field_str(stats, ST_I_PX_MODE), "http") == 0) {
                        chunk_appendf(out,
                                      "<tr><th>New connections:</th><td>%s</td></tr>"
                                      "<tr><th>Reused connections:</th><td>%s</td><td>(%d%%)</td></tr>"
@@ -924,44 +924,44 @@ int stats_dump_fields_html(struct buffer *out,
                                      "<tr><th>Failed hdr rewrites:</th><td>%s</td></tr>"
                                      "<tr><th>Internal error:</th><td>%s</td></tr>"
                                      "",
-                                     U2H(stats[ST_F_CONNECT].u.u64),
-                                     U2H(stats[ST_F_REUSE].u.u64),
-                                     (stats[ST_F_CONNECT].u.u64 + stats[ST_F_REUSE].u.u64) ?
-                                     (int)(100 * stats[ST_F_REUSE].u.u64 / (stats[ST_F_CONNECT].u.u64 + stats[ST_F_REUSE].u.u64)) : 0,
-                                     U2H(stats[ST_F_REQ_TOT].u.u64),
-                                     U2H(stats[ST_F_HRSP_1XX].u.u64), stats[ST_F_REQ_TOT].u.u64 ?
-                                     (int)(100 * stats[ST_F_HRSP_1XX].u.u64 / stats[ST_F_REQ_TOT].u.u64) : 0,
-                                     U2H(stats[ST_F_HRSP_2XX].u.u64), stats[ST_F_REQ_TOT].u.u64 ?
-                                     (int)(100 * stats[ST_F_HRSP_2XX].u.u64 / stats[ST_F_REQ_TOT].u.u64) : 0,
-                                     U2H(stats[ST_F_HRSP_3XX].u.u64), stats[ST_F_REQ_TOT].u.u64 ?
-                                     (int)(100 * stats[ST_F_HRSP_3XX].u.u64 / stats[ST_F_REQ_TOT].u.u64) : 0,
-                                     U2H(stats[ST_F_HRSP_4XX].u.u64), stats[ST_F_REQ_TOT].u.u64 ?
-                                     (int)(100 * stats[ST_F_HRSP_4XX].u.u64 / stats[ST_F_REQ_TOT].u.u64) : 0,
-                                     U2H(stats[ST_F_HRSP_5XX].u.u64), stats[ST_F_REQ_TOT].u.u64 ?
-                                     (int)(100 * stats[ST_F_HRSP_5XX].u.u64 / stats[ST_F_REQ_TOT].u.u64) : 0,
-                                     U2H(stats[ST_F_HRSP_OTHER].u.u64), stats[ST_F_REQ_TOT].u.u64 ?
-                                     (int)(100 * stats[ST_F_HRSP_OTHER].u.u64 / stats[ST_F_REQ_TOT].u.u64) : 0,
-                                     U2H(stats[ST_F_WREW].u.u64),
-                                     U2H(stats[ST_F_EINT].u.u64));
+                                     U2H(stats[ST_I_PX_CONNECT].u.u64),
+                                     U2H(stats[ST_I_PX_REUSE].u.u64),
+                                     (stats[ST_I_PX_CONNECT].u.u64 + stats[ST_I_PX_REUSE].u.u64) ?
+                                     (int)(100 * stats[ST_I_PX_REUSE].u.u64 / (stats[ST_I_PX_CONNECT].u.u64 + stats[ST_I_PX_REUSE].u.u64)) : 0,
+                                     U2H(stats[ST_I_PX_REQ_TOT].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_1XX].u.u64), stats[ST_I_PX_REQ_TOT].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_HRSP_1XX].u.u64 / stats[ST_I_PX_REQ_TOT].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_HRSP_2XX].u.u64), stats[ST_I_PX_REQ_TOT].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_HRSP_2XX].u.u64 / stats[ST_I_PX_REQ_TOT].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_HRSP_3XX].u.u64), stats[ST_I_PX_REQ_TOT].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_HRSP_3XX].u.u64 / stats[ST_I_PX_REQ_TOT].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_HRSP_4XX].u.u64), stats[ST_I_PX_REQ_TOT].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_HRSP_4XX].u.u64 / stats[ST_I_PX_REQ_TOT].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_HRSP_5XX].u.u64), stats[ST_I_PX_REQ_TOT].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_HRSP_5XX].u.u64 / stats[ST_I_PX_REQ_TOT].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_HRSP_OTHER].u.u64), stats[ST_I_PX_REQ_TOT].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_HRSP_OTHER].u.u64 / stats[ST_I_PX_REQ_TOT].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_WREW].u.u64),
+                                     U2H(stats[ST_I_PX_EINT].u.u64));
                }
 
                chunk_appendf(out, "<tr><th colspan=3>Max / Avg over last 1024 success. conn.</th></tr>");
                chunk_appendf(out, "<tr><th>- Queue time:</th><td>%s / %s</td><td>ms</td></tr>",
-                             U2H(stats[ST_F_QT_MAX].u.u32), U2H(stats[ST_F_QTIME].u.u32));
+                             U2H(stats[ST_I_PX_QT_MAX].u.u32), U2H(stats[ST_I_PX_QTIME].u.u32));
                chunk_appendf(out, "<tr><th>- Connect time:</th><td>%s / %s</td><td>ms</td></tr>",
-                             U2H(stats[ST_F_CT_MAX].u.u32), U2H(stats[ST_F_CTIME].u.u32));
-               if (strcmp(field_str(stats, ST_F_MODE), "http") == 0)
+                             U2H(stats[ST_I_PX_CT_MAX].u.u32), U2H(stats[ST_I_PX_CTIME].u.u32));
+               if (strcmp(field_str(stats, ST_I_PX_MODE), "http") == 0)
                        chunk_appendf(out, "<tr><th>- Responses time:</th><td>%s / %s</td><td>ms</td></tr>",
-                                     U2H(stats[ST_F_RT_MAX].u.u32), U2H(stats[ST_F_RTIME].u.u32));
+                                     U2H(stats[ST_I_PX_RT_MAX].u.u32), U2H(stats[ST_I_PX_RTIME].u.u32));
                chunk_appendf(out, "<tr><th>- Total time:</th><td>%s / %s</td><td>ms</td></tr>",
-                             U2H(stats[ST_F_TT_MAX].u.u32), U2H(stats[ST_F_TTIME].u.u32));
+                             U2H(stats[ST_I_PX_TT_MAX].u.u32), U2H(stats[ST_I_PX_TTIME].u.u32));
 
                chunk_appendf(out,
                              "</table></div></u></td>"
                              /* sessions: lbtot, last */
                              "<td>%s</td><td>%s</td>",
-                             U2H(stats[ST_F_LBTOT].u.u64),
-                             human_time(stats[ST_F_LASTSESS].u.s32, 1));
+                             U2H(stats[ST_I_PX_LBTOT].u.u64),
+                             human_time(stats[ST_I_PX_LASTSESS].u.s32, 1));
 
                chunk_appendf(out,
                              /* bytes : in, out */
@@ -975,14 +975,14 @@ int stats_dump_fields_html(struct buffer *out,
                              /* warnings: retries, redispatches */
                              "<td>%lld</td><td>%lld</td>"
                              "",
-                             U2H(stats[ST_F_BIN].u.u64), U2H(stats[ST_F_BOUT].u.u64),
-                             U2H(stats[ST_F_DRESP].u.u64),
-                             U2H(stats[ST_F_ECON].u.u64),
-                             U2H(stats[ST_F_ERESP].u.u64),
-                             (long long)stats[ST_F_CLI_ABRT].u.u64,
-                             (long long)stats[ST_F_SRV_ABRT].u.u64,
-                             (long long)stats[ST_F_WRETR].u.u64,
-                             (long long)stats[ST_F_WREDIS].u.u64);
+                             U2H(stats[ST_I_PX_BIN].u.u64), U2H(stats[ST_I_PX_BOUT].u.u64),
+                             U2H(stats[ST_I_PX_DRESP].u.u64),
+                             U2H(stats[ST_I_PX_ECON].u.u64),
+                             U2H(stats[ST_I_PX_ERESP].u.u64),
+                             (long long)stats[ST_I_PX_CLI_ABRT].u.u64,
+                             (long long)stats[ST_I_PX_SRV_ABRT].u.u64,
+                             (long long)stats[ST_I_PX_WRETR].u.u64,
+                             (long long)stats[ST_I_PX_WREDIS].u.u64);
 
                /* status, last change */
                chunk_appendf(out, "<td class=ac>");
@@ -994,59 +994,59 @@ int stats_dump_fields_html(struct buffer *out,
                 */
 
 
-               if (strncmp(field_str(stats, ST_F_STATUS), "MAINT", 5) == 0) {
-                       chunk_appendf(out, "%s MAINT", human_time(stats[ST_F_LASTCHG].u.u32, 1));
+               if (strncmp(field_str(stats, ST_I_PX_STATUS), "MAINT", 5) == 0) {
+                       chunk_appendf(out, "%s MAINT", human_time(stats[ST_I_PX_LASTCHG].u.u32, 1));
                }
-               else if (strcmp(field_str(stats, ST_F_STATUS), "no check") == 0) {
+               else if (strcmp(field_str(stats, ST_I_PX_STATUS), "no check") == 0) {
                        chunk_strcat(out, "<i>no check</i>");
                }
                else {
-                       chunk_appendf(out, "%s %s", human_time(stats[ST_F_LASTCHG].u.u32, 1), field_str(stats, ST_F_STATUS));
-                       if (strncmp(field_str(stats, ST_F_STATUS), "DOWN", 4) == 0) {
-                               if (stats[ST_F_CHECK_HEALTH].u.u32)
+                       chunk_appendf(out, "%s %s", human_time(stats[ST_I_PX_LASTCHG].u.u32, 1), field_str(stats, ST_I_PX_STATUS));
+                       if (strncmp(field_str(stats, ST_I_PX_STATUS), "DOWN", 4) == 0) {
+                               if (stats[ST_I_PX_CHECK_HEALTH].u.u32)
                                        chunk_strcat(out, " &uarr;");
                        }
-                       else if (stats[ST_F_CHECK_HEALTH].u.u32 < stats[ST_F_CHECK_RISE].u.u32 + stats[ST_F_CHECK_FALL].u.u32 - 1)
+                       else if (stats[ST_I_PX_CHECK_HEALTH].u.u32 < stats[ST_I_PX_CHECK_RISE].u.u32 + stats[ST_I_PX_CHECK_FALL].u.u32 - 1)
                                chunk_strcat(out, " &darr;");
                }
 
-               if (strncmp(field_str(stats, ST_F_STATUS), "DOWN", 4) == 0 &&
-                   stats[ST_F_AGENT_STATUS].type && !stats[ST_F_AGENT_HEALTH].u.u32) {
+               if (strncmp(field_str(stats, ST_I_PX_STATUS), "DOWN", 4) == 0 &&
+                   stats[ST_I_PX_AGENT_STATUS].type && !stats[ST_I_PX_AGENT_HEALTH].u.u32) {
                        chunk_appendf(out,
                                      "</td><td class=ac><u> %s",
-                                     field_str(stats, ST_F_AGENT_STATUS));
+                                     field_str(stats, ST_I_PX_AGENT_STATUS));
 
-                       if (stats[ST_F_AGENT_CODE].type)
-                               chunk_appendf(out, "/%d", stats[ST_F_AGENT_CODE].u.u32);
+                       if (stats[ST_I_PX_AGENT_CODE].type)
+                               chunk_appendf(out, "/%d", stats[ST_I_PX_AGENT_CODE].u.u32);
 
-                       if (stats[ST_F_AGENT_DURATION].type)
-                               chunk_appendf(out, " in %lums", (long)stats[ST_F_AGENT_DURATION].u.u64);
+                       if (stats[ST_I_PX_AGENT_DURATION].type)
+                               chunk_appendf(out, " in %lums", (long)stats[ST_I_PX_AGENT_DURATION].u.u64);
 
-                       chunk_appendf(out, "<div class=tips>%s", field_str(stats, ST_F_AGENT_DESC));
+                       chunk_appendf(out, "<div class=tips>%s", field_str(stats, ST_I_PX_AGENT_DESC));
 
-                       if (*field_str(stats, ST_F_LAST_AGT)) {
+                       if (*field_str(stats, ST_I_PX_LAST_AGT)) {
                                chunk_appendf(out, ": ");
-                               chunk_initstr(&src, field_str(stats, ST_F_LAST_AGT));
+                               chunk_initstr(&src, field_str(stats, ST_I_PX_LAST_AGT));
                                chunk_htmlencode(out, &src);
                        }
                        chunk_appendf(out, "</div></u>");
                }
-               else if (stats[ST_F_CHECK_STATUS].type) {
+               else if (stats[ST_I_PX_CHECK_STATUS].type) {
                        chunk_appendf(out,
                                      "</td><td class=ac><u> %s",
-                                     field_str(stats, ST_F_CHECK_STATUS));
+                                     field_str(stats, ST_I_PX_CHECK_STATUS));
 
-                       if (stats[ST_F_CHECK_CODE].type)
-                               chunk_appendf(out, "/%d", stats[ST_F_CHECK_CODE].u.u32);
+                       if (stats[ST_I_PX_CHECK_CODE].type)
+                               chunk_appendf(out, "/%d", stats[ST_I_PX_CHECK_CODE].u.u32);
 
-                       if (stats[ST_F_CHECK_DURATION].type)
-                               chunk_appendf(out, " in %lums", (long)stats[ST_F_CHECK_DURATION].u.u64);
+                       if (stats[ST_I_PX_CHECK_DURATION].type)
+                               chunk_appendf(out, " in %lums", (long)stats[ST_I_PX_CHECK_DURATION].u.u64);
 
-                       chunk_appendf(out, "<div class=tips>%s", field_str(stats, ST_F_CHECK_DESC));
+                       chunk_appendf(out, "<div class=tips>%s", field_str(stats, ST_I_PX_CHECK_DESC));
 
-                       if (*field_str(stats, ST_F_LAST_CHK)) {
+                       if (*field_str(stats, ST_I_PX_LAST_CHK)) {
                                chunk_appendf(out, ": ");
-                               chunk_initstr(&src, field_str(stats, ST_F_LAST_CHK));
+                               chunk_initstr(&src, field_str(stats, ST_I_PX_LAST_CHK));
                                chunk_htmlencode(out, &src);
                        }
                        chunk_appendf(out, "</div></u>");
@@ -1060,39 +1060,39 @@ int stats_dump_fields_html(struct buffer *out,
                              /* act, bck */
                              "<td class=ac>%s</td><td class=ac>%s</td>"
                              "",
-                             stats[ST_F_WEIGHT].u.u32, stats[ST_F_UWEIGHT].u.u32,
-                             stats[ST_F_BCK].u.u32 ? "-" : "Y",
-                             stats[ST_F_BCK].u.u32 ? "Y" : "-");
+                             stats[ST_I_PX_WEIGHT].u.u32, stats[ST_I_PX_UWEIGHT].u.u32,
+                             stats[ST_I_PX_BCK].u.u32 ? "-" : "Y",
+                             stats[ST_I_PX_BCK].u.u32 ? "Y" : "-");
 
                /* check failures: unique, fatal, down time */
-               if (strcmp(field_str(stats, ST_F_STATUS), "MAINT (resolution)") == 0) {
+               if (strcmp(field_str(stats, ST_I_PX_STATUS), "MAINT (resolution)") == 0) {
                        chunk_appendf(out, "<td class=ac colspan=3>resolution</td>");
                }
-               else if (stats[ST_F_CHKFAIL].type) {
-                       chunk_appendf(out, "<td><u>%lld", (long long)stats[ST_F_CHKFAIL].u.u64);
+               else if (stats[ST_I_PX_CHKFAIL].type) {
+                       chunk_appendf(out, "<td><u>%lld", (long long)stats[ST_I_PX_CHKFAIL].u.u64);
 
-                       if (stats[ST_F_HANAFAIL].type)
-                               chunk_appendf(out, "/%lld", (long long)stats[ST_F_HANAFAIL].u.u64);
+                       if (stats[ST_I_PX_HANAFAIL].type)
+                               chunk_appendf(out, "/%lld", (long long)stats[ST_I_PX_HANAFAIL].u.u64);
 
                        chunk_appendf(out,
                                      "<div class=tips>Failed Health Checks%s</div></u></td>"
                                      "<td>%lld</td><td>%s</td>"
                                      "",
-                                     stats[ST_F_HANAFAIL].type ? "/Health Analyses" : "",
-                                     (long long)stats[ST_F_CHKDOWN].u.u64, human_time(stats[ST_F_DOWNTIME].u.u32, 1));
+                                     stats[ST_I_PX_HANAFAIL].type ? "/Health Analyses" : "",
+                                     (long long)stats[ST_I_PX_CHKDOWN].u.u64, human_time(stats[ST_I_PX_DOWNTIME].u.u32, 1));
                }
-               else if (strcmp(field_str(stats, ST_F_STATUS), "MAINT") != 0 && field_format(stats, ST_F_TRACKED) == FF_STR) {
+               else if (strcmp(field_str(stats, ST_I_PX_STATUS), "MAINT") != 0 && field_format(stats, ST_I_PX_TRACKED) == FF_STR) {
                        /* tracking a server (hence inherited maint would appear as "MAINT (via...)" */
                        chunk_appendf(out,
                                      "<td class=ac colspan=3><a class=lfsb href=\"#%s\">via %s</a></td>",
-                                     field_str(stats, ST_F_TRACKED), field_str(stats, ST_F_TRACKED));
+                                     field_str(stats, ST_I_PX_TRACKED), field_str(stats, ST_I_PX_TRACKED));
                }
                else
                        chunk_appendf(out, "<td colspan=3></td>");
 
                /* throttle */
-               if (stats[ST_F_THROTTLE].type)
-                       chunk_appendf(out, "<td class=ac>%d %%</td>\n", stats[ST_F_THROTTLE].u.u32);
+               if (stats[ST_I_PX_THROTTLE].type)
+                       chunk_appendf(out, "<td class=ac>%d %%</td>\n", stats[ST_I_PX_THROTTLE].u.u32);
                else
                        chunk_appendf(out, "<td class=ac>-</td>");
 
@@ -1107,7 +1107,7 @@ int stats_dump_fields_html(struct buffer *out,
                                        for (j = 0; j < mod->stats_count; ++j) {
                                                chunk_appendf(out,
                                                              "<tr><th>%s</th><td>%s</td></tr>",
-                                                             mod->stats[j].desc, field_to_html_str(&stats[ST_F_TOTAL_FIELDS + i]));
+                                                             mod->stats[j].desc, field_to_html_str(&stats[ST_I_PX_MAX + i]));
                                                ++i;
                                        }
                                        chunk_appendf(out, "</table></div></u>");
@@ -1121,7 +1121,7 @@ int stats_dump_fields_html(struct buffer *out,
 
                chunk_appendf(out, "</tr>\n");
        }
-       else if (stats[ST_F_TYPE].u.u32 == STATS_TYPE_BE) {
+       else if (stats[ST_I_PX_TYPE].u.u32 == STATS_TYPE_BE) {
                chunk_appendf(out, "<tr class=\"backend\">");
                if (flags & STAT_ADMIN) {
                        /* Column sub-heading for Enable or Disable server */
@@ -1134,17 +1134,17 @@ int stats_dump_fields_html(struct buffer *out,
                              "<a class=lfsb href=\"#%s/Backend\">Backend</a>"
                              "",
                              (flags & STAT_SHLGNDS)?"<u>":"",
-                             field_str(stats, ST_F_PXNAME), field_str(stats, ST_F_PXNAME));
+                             field_str(stats, ST_I_PX_PXNAME), field_str(stats, ST_I_PX_PXNAME));
 
                if (flags & STAT_SHLGNDS) {
                        /* balancing */
                        chunk_appendf(out, "<div class=tips>balancing: %s",
-                                     field_str(stats, ST_F_ALGO));
+                                     field_str(stats, ST_I_PX_ALGO));
 
                        /* cookie */
-                       if (stats[ST_F_COOKIE].type) {
+                       if (stats[ST_I_PX_COOKIE].type) {
                                chunk_appendf(out, ", cookie: '");
-                               chunk_initstr(&src, field_str(stats, ST_F_COOKIE));
+                               chunk_initstr(&src, field_str(stats, ST_I_PX_COOKIE));
                                chunk_htmlencode(out, &src);
                                chunk_appendf(out, "'");
                        }
@@ -1159,8 +1159,8 @@ int stats_dump_fields_html(struct buffer *out,
                              "<td>%s</td><td>%s</td><td></td>"
                              "",
                              (flags & STAT_SHLGNDS)?"</u>":"",
-                             U2H(stats[ST_F_QCUR].u.u32), U2H(stats[ST_F_QMAX].u.u32),
-                             U2H(stats[ST_F_RATE].u.u32), U2H(stats[ST_F_RATE_MAX].u.u32));
+                             U2H(stats[ST_I_PX_QCUR].u.u32), U2H(stats[ST_I_PX_QMAX].u.u32),
+                             U2H(stats[ST_I_PX_RATE].u.u32), U2H(stats[ST_I_PX_RATE_MAX].u.u32));
 
                chunk_appendf(out,
                              /* sessions: current, max, limit, total */
@@ -1168,12 +1168,12 @@ int stats_dump_fields_html(struct buffer *out,
                              "<td><u>%s<div class=tips><table class=det>"
                              "<tr><th>Cum. sessions:</th><td>%s</td></tr>"
                              "",
-                             U2H(stats[ST_F_SCUR].u.u32), U2H(stats[ST_F_SMAX].u.u32), U2H(stats[ST_F_SLIM].u.u32),
-                             U2H(stats[ST_F_STOT].u.u64),
-                             U2H(stats[ST_F_STOT].u.u64));
+                             U2H(stats[ST_I_PX_SCUR].u.u32), U2H(stats[ST_I_PX_SMAX].u.u32), U2H(stats[ST_I_PX_SLIM].u.u32),
+                             U2H(stats[ST_I_PX_STOT].u.u64),
+                             U2H(stats[ST_I_PX_STOT].u.u64));
 
                /* http response (via hover): 1xx, 2xx, 3xx, 4xx, 5xx, other */
-               if (strcmp(field_str(stats, ST_F_MODE), "http") == 0) {
+               if (strcmp(field_str(stats, ST_I_PX_MODE), "http") == 0) {
                        chunk_appendf(out,
                                      "<tr><th>New connections:</th><td>%s</td></tr>"
                                      "<tr><th>Reused connections:</th><td>%s</td><td>(%d%%)</td></tr>"
@@ -1190,38 +1190,38 @@ int stats_dump_fields_html(struct buffer *out,
                                      "<tr><th>Failed hdr rewrites:</th><td>%s</td></tr>"
                                      "<tr><th>Internal errors:</th><td>%s</td></tr>"
                                      "",
-                                     U2H(stats[ST_F_CONNECT].u.u64),
-                                     U2H(stats[ST_F_REUSE].u.u64),
-                                     (stats[ST_F_CONNECT].u.u64 + stats[ST_F_REUSE].u.u64) ?
-                                     (int)(100 * stats[ST_F_REUSE].u.u64 / (stats[ST_F_CONNECT].u.u64 + stats[ST_F_REUSE].u.u64)) : 0,
-                                     U2H(stats[ST_F_REQ_TOT].u.u64),
-                                     U2H(stats[ST_F_HRSP_1XX].u.u64),
-                                     U2H(stats[ST_F_HRSP_2XX].u.u64),
-                                     U2H(stats[ST_F_COMP_RSP].u.u64),
-                                     stats[ST_F_HRSP_2XX].u.u64 ?
-                                     (int)(100 * stats[ST_F_COMP_RSP].u.u64 / stats[ST_F_HRSP_2XX].u.u64) : 0,
-                                     U2H(stats[ST_F_HRSP_3XX].u.u64),
-                                     U2H(stats[ST_F_HRSP_4XX].u.u64),
-                                     U2H(stats[ST_F_HRSP_5XX].u.u64),
-                                     U2H(stats[ST_F_HRSP_OTHER].u.u64),
-                                     U2H(stats[ST_F_CACHE_LOOKUPS].u.u64),
-                                     U2H(stats[ST_F_CACHE_HITS].u.u64),
-                                     stats[ST_F_CACHE_LOOKUPS].u.u64 ?
-                                     (int)(100 * stats[ST_F_CACHE_HITS].u.u64 / stats[ST_F_CACHE_LOOKUPS].u.u64) : 0,
-                                     U2H(stats[ST_F_WREW].u.u64),
-                                     U2H(stats[ST_F_EINT].u.u64));
+                                     U2H(stats[ST_I_PX_CONNECT].u.u64),
+                                     U2H(stats[ST_I_PX_REUSE].u.u64),
+                                     (stats[ST_I_PX_CONNECT].u.u64 + stats[ST_I_PX_REUSE].u.u64) ?
+                                     (int)(100 * stats[ST_I_PX_REUSE].u.u64 / (stats[ST_I_PX_CONNECT].u.u64 + stats[ST_I_PX_REUSE].u.u64)) : 0,
+                                     U2H(stats[ST_I_PX_REQ_TOT].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_1XX].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_2XX].u.u64),
+                                     U2H(stats[ST_I_PX_COMP_RSP].u.u64),
+                                     stats[ST_I_PX_HRSP_2XX].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_COMP_RSP].u.u64 / stats[ST_I_PX_HRSP_2XX].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_HRSP_3XX].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_4XX].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_5XX].u.u64),
+                                     U2H(stats[ST_I_PX_HRSP_OTHER].u.u64),
+                                     U2H(stats[ST_I_PX_CACHE_LOOKUPS].u.u64),
+                                     U2H(stats[ST_I_PX_CACHE_HITS].u.u64),
+                                     stats[ST_I_PX_CACHE_LOOKUPS].u.u64 ?
+                                     (int)(100 * stats[ST_I_PX_CACHE_HITS].u.u64 / stats[ST_I_PX_CACHE_LOOKUPS].u.u64) : 0,
+                                     U2H(stats[ST_I_PX_WREW].u.u64),
+                                     U2H(stats[ST_I_PX_EINT].u.u64));
                }
 
                chunk_appendf(out, "<tr><th colspan=3>Max / Avg over last 1024 success. conn.</th></tr>");
                chunk_appendf(out, "<tr><th>- Queue time:</th><td>%s / %s</td><td>ms</td></tr>",
-                             U2H(stats[ST_F_QT_MAX].u.u32), U2H(stats[ST_F_QTIME].u.u32));
+                             U2H(stats[ST_I_PX_QT_MAX].u.u32), U2H(stats[ST_I_PX_QTIME].u.u32));
                chunk_appendf(out, "<tr><th>- Connect time:</th><td>%s / %s</td><td>ms</td></tr>",
-                             U2H(stats[ST_F_CT_MAX].u.u32), U2H(stats[ST_F_CTIME].u.u32));
-               if (strcmp(field_str(stats, ST_F_MODE), "http") == 0)
+                             U2H(stats[ST_I_PX_CT_MAX].u.u32), U2H(stats[ST_I_PX_CTIME].u.u32));
+               if (strcmp(field_str(stats, ST_I_PX_MODE), "http") == 0)
                        chunk_appendf(out, "<tr><th>- Responses time:</th><td>%s / %s</td><td>ms</td></tr>",
-                                     U2H(stats[ST_F_RT_MAX].u.u32), U2H(stats[ST_F_RTIME].u.u32));
+                                     U2H(stats[ST_I_PX_RT_MAX].u.u32), U2H(stats[ST_I_PX_RTIME].u.u32));
                chunk_appendf(out, "<tr><th>- Total time:</th><td>%s / %s</td><td>ms</td></tr>",
-                             U2H(stats[ST_F_TT_MAX].u.u32), U2H(stats[ST_F_TTIME].u.u32));
+                             U2H(stats[ST_I_PX_TT_MAX].u.u32), U2H(stats[ST_I_PX_TTIME].u.u32));
 
                chunk_appendf(out,
                              "</table></div></u></td>"
@@ -1230,9 +1230,9 @@ int stats_dump_fields_html(struct buffer *out,
                              /* bytes: in */
                              "<td>%s</td>"
                              "",
-                             U2H(stats[ST_F_LBTOT].u.u64),
-                             human_time(stats[ST_F_LASTSESS].u.s32, 1),
-                             U2H(stats[ST_F_BIN].u.u64));
+                             U2H(stats[ST_I_PX_LBTOT].u.u64),
+                             human_time(stats[ST_I_PX_LASTSESS].u.s32, 1),
+                             U2H(stats[ST_I_PX_BIN].u.u64));
 
                chunk_appendf(out,
                              /* bytes:out + compression stats (via hover): comp_in, comp_out, comp_byp */
@@ -1243,16 +1243,16 @@ int stats_dump_fields_html(struct buffer *out,
                              "<tr><th>Compression bypass:</th><td>%s</td></tr>"
                              "<tr><th>Total bytes saved:</th><td>%s</td><td>(%d%%)</td></tr>"
                              "</table></div>%s</td>",
-                             (stats[ST_F_COMP_IN].u.u64 || stats[ST_F_COMP_BYP].u.u64) ? "<u>":"",
-                             U2H(stats[ST_F_BOUT].u.u64),
-                             U2H(stats[ST_F_BOUT].u.u64),
-                             U2H(stats[ST_F_COMP_IN].u.u64),
-                             U2H(stats[ST_F_COMP_OUT].u.u64),
-                             stats[ST_F_COMP_IN].u.u64 ? (int)(stats[ST_F_COMP_OUT].u.u64 * 100 / stats[ST_F_COMP_IN].u.u64) : 0,
-                             U2H(stats[ST_F_COMP_BYP].u.u64),
-                             U2H(stats[ST_F_COMP_IN].u.u64 - stats[ST_F_COMP_OUT].u.u64),
-                             stats[ST_F_BOUT].u.u64 ? (int)((stats[ST_F_COMP_IN].u.u64 - stats[ST_F_COMP_OUT].u.u64) * 100 / stats[ST_F_BOUT].u.u64) : 0,
-                             (stats[ST_F_COMP_IN].u.u64 || stats[ST_F_COMP_BYP].u.u64) ? "</u>":"");
+                             (stats[ST_I_PX_COMP_IN].u.u64 || stats[ST_I_PX_COMP_BYP].u.u64) ? "<u>":"",
+                             U2H(stats[ST_I_PX_BOUT].u.u64),
+                             U2H(stats[ST_I_PX_BOUT].u.u64),
+                             U2H(stats[ST_I_PX_COMP_IN].u.u64),
+                             U2H(stats[ST_I_PX_COMP_OUT].u.u64),
+                             stats[ST_I_PX_COMP_IN].u.u64 ? (int)(stats[ST_I_PX_COMP_OUT].u.u64 * 100 / stats[ST_I_PX_COMP_IN].u.u64) : 0,
+                             U2H(stats[ST_I_PX_COMP_BYP].u.u64),
+                             U2H(stats[ST_I_PX_COMP_IN].u.u64 - stats[ST_I_PX_COMP_OUT].u.u64),
+                             stats[ST_I_PX_BOUT].u.u64 ? (int)((stats[ST_I_PX_COMP_IN].u.u64 - stats[ST_I_PX_COMP_OUT].u.u64) * 100 / stats[ST_I_PX_BOUT].u.u64) : 0,
+                             (stats[ST_I_PX_COMP_IN].u.u64 || stats[ST_I_PX_COMP_BYP].u.u64) ? "</u>":"");
 
                chunk_appendf(out,
                              /* denied: req, resp */
@@ -1270,24 +1270,24 @@ int stats_dump_fields_html(struct buffer *out,
                              "<td class=ac>%s %s</td><td class=ac>&nbsp;</td><td class=ac>%d/%d</td>"
                              "<td class=ac>%d</td><td class=ac>%d</td>"
                              "",
-                             U2H(stats[ST_F_DREQ].u.u64), U2H(stats[ST_F_DRESP].u.u64),
-                             U2H(stats[ST_F_ECON].u.u64),
-                             U2H(stats[ST_F_ERESP].u.u64),
-                             (long long)stats[ST_F_CLI_ABRT].u.u64,
-                             (long long)stats[ST_F_SRV_ABRT].u.u64,
-                             (long long)stats[ST_F_WRETR].u.u64, (long long)stats[ST_F_WREDIS].u.u64,
-                             human_time(stats[ST_F_LASTCHG].u.u32, 1),
-                             strcmp(field_str(stats, ST_F_STATUS), "DOWN") ? field_str(stats, ST_F_STATUS) : "<font color=\"red\"><b>DOWN</b></font>",
-                             stats[ST_F_WEIGHT].u.u32, stats[ST_F_UWEIGHT].u.u32,
-                             stats[ST_F_ACT].u.u32, stats[ST_F_BCK].u.u32);
+                             U2H(stats[ST_I_PX_DREQ].u.u64), U2H(stats[ST_I_PX_DRESP].u.u64),
+                             U2H(stats[ST_I_PX_ECON].u.u64),
+                             U2H(stats[ST_I_PX_ERESP].u.u64),
+                             (long long)stats[ST_I_PX_CLI_ABRT].u.u64,
+                             (long long)stats[ST_I_PX_SRV_ABRT].u.u64,
+                             (long long)stats[ST_I_PX_WRETR].u.u64, (long long)stats[ST_I_PX_WREDIS].u.u64,
+                             human_time(stats[ST_I_PX_LASTCHG].u.u32, 1),
+                             strcmp(field_str(stats, ST_I_PX_STATUS), "DOWN") ? field_str(stats, ST_I_PX_STATUS) : "<font color=\"red\"><b>DOWN</b></font>",
+                             stats[ST_I_PX_WEIGHT].u.u32, stats[ST_I_PX_UWEIGHT].u.u32,
+                             stats[ST_I_PX_ACT].u.u32, stats[ST_I_PX_BCK].u.u32);
 
                chunk_appendf(out,
                              /* rest of backend: nothing, down transitions, total downtime, throttle */
                              "<td class=ac>&nbsp;</td><td>%d</td>"
                              "<td>%s</td>"
                              "<td></td>",
-                             stats[ST_F_CHKDOWN].u.u32,
-                             stats[ST_F_DOWNTIME].type ? human_time(stats[ST_F_DOWNTIME].u.u32, 1) : "&nbsp;");
+                             stats[ST_I_PX_CHKDOWN].u.u32,
+                             stats[ST_I_PX_DOWNTIME].type ? human_time(stats[ST_I_PX_DOWNTIME].u.u32, 1) : "&nbsp;");
 
                if (flags & STAT_SHMODULES) {
                        list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
@@ -1300,7 +1300,7 @@ int stats_dump_fields_html(struct buffer *out,
                                        for (j = 0; j < mod->stats_count; ++j) {
                                                chunk_appendf(out,
                                                              "<tr><th>%s</th><td>%s</td></tr>",
-                                                             mod->stats[j].desc, field_to_html_str(&stats[ST_F_TOTAL_FIELDS + i]));
+                                                             mod->stats[j].desc, field_to_html_str(&stats[ST_I_PX_MAX + i]));
                                                ++i;
                                        }
                                        chunk_appendf(out, "</table></div></u>");
index 454e018715c81d2e80841f616ae918b075e97933..290a32ec3ce09a9da3186b436d36527cb2846228 100644 (file)
@@ -191,10 +191,10 @@ int stats_dump_fields_json(struct buffer *out,
                        stats_print_proxy_field_json(out, &stats[field],
                                                     stat_f[domain][field].name,
                                                     field,
-                                                    stats[ST_F_TYPE].u.u32,
-                                                    stats[ST_F_IID].u.u32,
-                                                    stats[ST_F_SID].u.u32,
-                                                    stats[ST_F_PID].u.u32);
+                                                    stats[ST_I_PX_TYPE].u.u32,
+                                                    stats[ST_I_PX_IID].u.u32,
+                                                    stats[ST_I_PX_SID].u.u32,
+                                                    stats[ST_I_PX_PID].u.u32);
                } else if (domain == STATS_DOMAIN_RESOLVERS) {
                        stats_print_rslv_field_json(out, &stats[field],
                                                    stat_f[domain][field].name,
index 5d7dc1a95e7b8e29f2c1f1d3b1b25ac66d8dd1b8..7eba03f182a98c206f833fab00ac157693f5aca9 100644 (file)
@@ -164,132 +164,132 @@ const struct name_desc info_fields[INF_TOTAL_FIELDS] = {
        [INF_NICED_TASKS]                    = { .name = "Niced_tasks",                 .desc = "Total number of active tasks+tasklets in the current worker process (Run_queue) that are niced" },
 };
 
-const struct name_desc stat_fields[ST_F_TOTAL_FIELDS] = {
-       [ST_F_PXNAME]                        = { .name = "pxname",                      .desc = "Proxy name" },
-       [ST_F_SVNAME]                        = { .name = "svname",                      .desc = "Server name" },
-       [ST_F_QCUR]                          = { .name = "qcur",                        .desc = "Number of current queued connections" },
-       [ST_F_QMAX]                          = { .name = "qmax",                        .desc = "Highest value of queued connections encountered since process started" },
-       [ST_F_SCUR]                          = { .name = "scur",                        .desc = "Number of current sessions on the frontend, backend or server" },
-       [ST_F_SMAX]                          = { .name = "smax",                        .desc = "Highest value of current sessions encountered since process started" },
-       [ST_F_SLIM]                          = { .name = "slim",                        .desc = "Frontend/listener/server's maxconn, backend's fullconn" },
-       [ST_F_STOT]                          = { .name = "stot",                        .desc = "Total number of sessions since process started" },
-       [ST_F_BIN]                           = { .name = "bin",                         .desc = "Total number of request bytes since process started" },
-       [ST_F_BOUT]                          = { .name = "bout",                        .desc = "Total number of response bytes since process started" },
-       [ST_F_DREQ]                          = { .name = "dreq",                        .desc = "Total number of denied requests since process started" },
-       [ST_F_DRESP]                         = { .name = "dresp",                       .desc = "Total number of denied responses since process started" },
-       [ST_F_EREQ]                          = { .name = "ereq",                        .desc = "Total number of invalid requests since process started" },
-       [ST_F_ECON]                          = { .name = "econ",                        .desc = "Total number of failed connections to server since the worker process started" },
-       [ST_F_ERESP]                         = { .name = "eresp",                       .desc = "Total number of invalid responses since the worker process started" },
-       [ST_F_WRETR]                         = { .name = "wretr",                       .desc = "Total number of server connection retries since the worker process started" },
-       [ST_F_WREDIS]                        = { .name = "wredis",                      .desc = "Total number of server redispatches due to connection failures since the worker process started" },
-       [ST_F_STATUS]                        = { .name = "status",                      .desc = "Frontend/listen status: OPEN/WAITING/FULL/STOP; backend: UP/DOWN; server: last check status" },
-       [ST_F_WEIGHT]                        = { .name = "weight",                      .desc = "Server's effective weight, or sum of active servers' effective weights for a backend" },
-       [ST_F_ACT]                           = { .name = "act",                         .desc = "Total number of active UP servers with a non-zero weight" },
-       [ST_F_BCK]                           = { .name = "bck",                         .desc = "Total number of backup UP servers with a non-zero weight" },
-       [ST_F_CHKFAIL]                       = { .name = "chkfail",                     .desc = "Total number of failed individual health checks per server/backend, since the worker process started" },
-       [ST_F_CHKDOWN]                       = { .name = "chkdown",                     .desc = "Total number of failed checks causing UP to DOWN server transitions, per server/backend, since the worker process started" },
-       [ST_F_LASTCHG]                       = { .name = "lastchg",                     .desc = "How long ago the last server state changed, in seconds" },
-       [ST_F_DOWNTIME]                      = { .name = "downtime",                    .desc = "Total time spent in DOWN state, for server or backend" },
-       [ST_F_QLIMIT]                        = { .name = "qlimit",                      .desc = "Limit on the number of connections in queue, for servers only (maxqueue argument)" },
-       [ST_F_PID]                           = { .name = "pid",                         .desc = "Relative worker process number (1)" },
-       [ST_F_IID]                           = { .name = "iid",                         .desc = "Frontend or Backend numeric identifier ('id' setting)" },
-       [ST_F_SID]                           = { .name = "sid",                         .desc = "Server numeric identifier ('id' setting)" },
-       [ST_F_THROTTLE]                      = { .name = "throttle",                    .desc = "Throttling ratio applied to a server's maxconn and weight during the slowstart period (0 to 100%)" },
-       [ST_F_LBTOT]                         = { .name = "lbtot",                       .desc = "Total number of requests routed by load balancing since the worker process started (ignores queue pop and stickiness)" },
-       [ST_F_TRACKED]                       = { .name = "tracked",                     .desc = "Name of the other server this server tracks for its state" },
-       [ST_F_TYPE]                          = { .name = "type",                        .desc = "Type of the object (Listener, Frontend, Backend, Server)" },
-       [ST_F_RATE]                          = { .name = "rate",                        .desc = "Total number of sessions processed by this object over the last second (sessions for listeners/frontends, requests for backends/servers)" },
-       [ST_F_RATE_LIM]                      = { .name = "rate_lim",                    .desc = "Limit on the number of sessions accepted in a second (frontend only, 'rate-limit sessions' setting)" },
-       [ST_F_RATE_MAX]                      = { .name = "rate_max",                    .desc = "Highest value of sessions per second observed since the worker process started" },
-       [ST_F_CHECK_STATUS]                  = { .name = "check_status",                .desc = "Status report of the server's latest health check, prefixed with '*' if a check is currently in progress" },
-       [ST_F_CHECK_CODE]                    = { .name = "check_code",                  .desc = "HTTP/SMTP/LDAP status code reported by the latest server health check" },
-       [ST_F_CHECK_DURATION]                = { .name = "check_duration",              .desc = "Total duration of the latest server health check, in milliseconds" },
-       [ST_F_HRSP_1XX]                      = { .name = "hrsp_1xx",                    .desc = "Total number of HTTP responses with status 100-199 returned by this object since the worker process started" },
-       [ST_F_HRSP_2XX]                      = { .name = "hrsp_2xx",                    .desc = "Total number of HTTP responses with status 200-299 returned by this object since the worker process started" },
-       [ST_F_HRSP_3XX]                      = { .name = "hrsp_3xx",                    .desc = "Total number of HTTP responses with status 300-399 returned by this object since the worker process started" },
-       [ST_F_HRSP_4XX]                      = { .name = "hrsp_4xx",                    .desc = "Total number of HTTP responses with status 400-499 returned by this object since the worker process started" },
-       [ST_F_HRSP_5XX]                      = { .name = "hrsp_5xx",                    .desc = "Total number of HTTP responses with status 500-599 returned by this object since the worker process started" },
-       [ST_F_HRSP_OTHER]                    = { .name = "hrsp_other",                  .desc = "Total number of HTTP responses with status <100, >599 returned by this object since the worker process started (error -1 included)" },
-       [ST_F_HANAFAIL]                      = { .name = "hanafail",                    .desc = "Total number of failed checks caused by an 'on-error' directive after an 'observe' condition matched" },
-       [ST_F_REQ_RATE]                      = { .name = "req_rate",                    .desc = "Number of HTTP requests processed over the last second on this object" },
-       [ST_F_REQ_RATE_MAX]                  = { .name = "req_rate_max",                .desc = "Highest value of http requests observed since the worker process started" },
-       [ST_F_REQ_TOT]                       = { .name = "req_tot",                     .desc = "Total number of HTTP requests processed by this object since the worker process started" },
-       [ST_F_CLI_ABRT]                      = { .name = "cli_abrt",                    .desc = "Total number of requests or connections aborted by the client since the worker process started" },
-       [ST_F_SRV_ABRT]                      = { .name = "srv_abrt",                    .desc = "Total number of requests or connections aborted by the server since the worker process started" },
-       [ST_F_COMP_IN]                       = { .name = "comp_in",                     .desc = "Total number of bytes submitted to the HTTP compressor for this object since the worker process started" },
-       [ST_F_COMP_OUT]                      = { .name = "comp_out",                    .desc = "Total number of bytes emitted by the HTTP compressor for this object since the worker process started" },
-       [ST_F_COMP_BYP]                      = { .name = "comp_byp",                    .desc = "Total number of bytes that bypassed HTTP compression for this object since the worker process started (CPU/memory/bandwidth limitation)" },
-       [ST_F_COMP_RSP]                      = { .name = "comp_rsp",                    .desc = "Total number of HTTP responses that were compressed for this object since the worker process started" },
-       [ST_F_LASTSESS]                      = { .name = "lastsess",                    .desc = "How long ago some traffic was seen on this object on this worker process, in seconds" },
-       [ST_F_LAST_CHK]                      = { .name = "last_chk",                    .desc = "Short description of the latest health check report for this server (see also check_desc)" },
-       [ST_F_LAST_AGT]                      = { .name = "last_agt",                    .desc = "Short description of the latest agent check report for this server (see also agent_desc)" },
-       [ST_F_QTIME]                         = { .name = "qtime",                       .desc = "Time spent in the queue, in milliseconds, averaged over the 1024 last requests (backend/server)" },
-       [ST_F_CTIME]                         = { .name = "ctime",                       .desc = "Time spent waiting for a connection to complete, in milliseconds, averaged over the 1024 last requests (backend/server)" },
-       [ST_F_RTIME]                         = { .name = "rtime",                       .desc = "Time spent waiting for a server response, in milliseconds, averaged over the 1024 last requests (backend/server)" },
-       [ST_F_TTIME]                         = { .name = "ttime",                       .desc = "Total request+response time (request+queue+connect+response+processing), in milliseconds, averaged over the 1024 last requests (backend/server)" },
-       [ST_F_AGENT_STATUS]                  = { .name = "agent_status",                .desc = "Status report of the server's latest agent check, prefixed with '*' if a check is currently in progress" },
-       [ST_F_AGENT_CODE]                    = { .name = "agent_code",                  .desc = "Status code reported by the latest server agent check" },
-       [ST_F_AGENT_DURATION]                = { .name = "agent_duration",              .desc = "Total duration of the latest server agent check, in milliseconds" },
-       [ST_F_CHECK_DESC]                    = { .name = "check_desc",                  .desc = "Textual description of the latest health check report for this server" },
-       [ST_F_AGENT_DESC]                    = { .name = "agent_desc",                  .desc = "Textual description of the latest agent check report for this server" },
-       [ST_F_CHECK_RISE]                    = { .name = "check_rise",                  .desc = "Number of successful health checks before declaring a server UP (server 'rise' setting)" },
-       [ST_F_CHECK_FALL]                    = { .name = "check_fall",                  .desc = "Number of failed health checks before declaring a server DOWN (server 'fall' setting)" },
-       [ST_F_CHECK_HEALTH]                  = { .name = "check_health",                .desc = "Current server health check level (0..fall-1=DOWN, fall..rise-1=UP)" },
-       [ST_F_AGENT_RISE]                    = { .name = "agent_rise",                  .desc = "Number of successful agent checks before declaring a server UP (server 'rise' setting)" },
-       [ST_F_AGENT_FALL]                    = { .name = "agent_fall",                  .desc = "Number of failed agent checks before declaring a server DOWN (server 'fall' setting)" },
-       [ST_F_AGENT_HEALTH]                  = { .name = "agent_health",                .desc = "Current server agent check level (0..fall-1=DOWN, fall..rise-1=UP)" },
-       [ST_F_ADDR]                          = { .name = "addr",                        .desc = "Server's address:port, shown only if show-legends is set, or at levels oper/admin for the CLI" },
-       [ST_F_COOKIE]                        = { .name = "cookie",                      .desc = "Backend's cookie name or Server's cookie value, shown only if show-legends is set, or at levels oper/admin for the CLI" },
-       [ST_F_MODE]                          = { .name = "mode",                        .desc = "'mode' setting (tcp/http/health/cli)" },
-       [ST_F_ALGO]                          = { .name = "algo",                        .desc = "Backend's load balancing algorithm, shown only if show-legends is set, or at levels oper/admin for the CLI" },
-       [ST_F_CONN_RATE]                     = { .name = "conn_rate",                   .desc = "Number of new connections accepted over the last second on the frontend for this worker process" },
-       [ST_F_CONN_RATE_MAX]                 = { .name = "conn_rate_max",               .desc = "Highest value of connections per second observed since the worker process started" },
-       [ST_F_CONN_TOT]                      = { .name = "conn_tot",                    .desc = "Total number of new connections accepted on this frontend since the worker process started" },
-       [ST_F_INTERCEPTED]                   = { .name = "intercepted",                 .desc = "Total number of HTTP requests intercepted on the frontend (redirects/stats/services) since the worker process started" },
-       [ST_F_DCON]                          = { .name = "dcon",                        .desc = "Total number of incoming connections blocked on a listener/frontend by a tcp-request connection rule since the worker process started" },
-       [ST_F_DSES]                          = { .name = "dses",                        .desc = "Total number of incoming sessions blocked on a listener/frontend by a tcp-request connection rule since the worker process started" },
-       [ST_F_WREW]                          = { .name = "wrew",                        .desc = "Total number of failed HTTP header rewrites since the worker process started" },
-       [ST_F_CONNECT]                       = { .name = "connect",                     .desc = "Total number of outgoing connection attempts on this backend/server since the worker process started" },
-       [ST_F_REUSE]                         = { .name = "reuse",                       .desc = "Total number of reused connection on this backend/server since the worker process started" },
-       [ST_F_CACHE_LOOKUPS]                 = { .name = "cache_lookups",               .desc = "Total number of HTTP requests looked up in the cache on this frontend/backend since the worker process started" },
-       [ST_F_CACHE_HITS]                    = { .name = "cache_hits",                  .desc = "Total number of HTTP requests not found in the cache on this frontend/backend since the worker process started" },
-       [ST_F_SRV_ICUR]                      = { .name = "srv_icur",                    .desc = "Current number of idle connections available for reuse on this server" },
-       [ST_F_SRV_ILIM]                      = { .name = "src_ilim",                    .desc = "Limit on the number of available idle connections on this server (server 'pool_max_conn' directive)" },
-       [ST_F_QT_MAX]                        = { .name = "qtime_max",                   .desc = "Maximum observed time spent in the queue, in milliseconds (backend/server)" },
-       [ST_F_CT_MAX]                        = { .name = "ctime_max",                   .desc = "Maximum observed time spent waiting for a connection to complete, in milliseconds (backend/server)" },
-       [ST_F_RT_MAX]                        = { .name = "rtime_max",                   .desc = "Maximum observed time spent waiting for a server response, in milliseconds (backend/server)" },
-       [ST_F_TT_MAX]                        = { .name = "ttime_max",                   .desc = "Maximum observed total request+response time (request+queue+connect+response+processing), in milliseconds (backend/server)" },
-       [ST_F_EINT]                          = { .name = "eint",                        .desc = "Total number of internal errors since process started"},
-       [ST_F_IDLE_CONN_CUR]                 = { .name = "idle_conn_cur",               .desc = "Current number of unsafe idle connections"},
-       [ST_F_SAFE_CONN_CUR]                 = { .name = "safe_conn_cur",               .desc = "Current number of safe idle connections"},
-       [ST_F_USED_CONN_CUR]                 = { .name = "used_conn_cur",               .desc = "Current number of connections in use"},
-       [ST_F_NEED_CONN_EST]                 = { .name = "need_conn_est",               .desc = "Estimated needed number of connections"},
-       [ST_F_UWEIGHT]                       = { .name = "uweight",                     .desc = "Server's user weight, or sum of active servers' user weights for a backend" },
-       [ST_F_AGG_SRV_CHECK_STATUS]          = { .name = "agg_server_check_status",     .desc = "[DEPRECATED] Backend's aggregated gauge of servers' status" },
-       [ST_F_AGG_SRV_STATUS ]               = { .name = "agg_server_status",           .desc = "Backend's aggregated gauge of servers' status" },
-       [ST_F_AGG_CHECK_STATUS]              = { .name = "agg_check_status",            .desc = "Backend's aggregated gauge of servers' state check status" },
-       [ST_F_SRID]                          = { .name = "srid",                        .desc = "Server id revision, to prevent server id reuse mixups" },
-       [ST_F_SESS_OTHER]                    = { .name = "sess_other",                  .desc = "Total number of sessions other than HTTP since process started" },
-       [ST_F_H1SESS]                        = { .name = "h1sess",                      .desc = "Total number of HTTP/1 sessions since process started" },
-       [ST_F_H2SESS]                        = { .name = "h2sess",                      .desc = "Total number of HTTP/2 sessions since process started" },
-       [ST_F_H3SESS]                        = { .name = "h3sess",                      .desc = "Total number of HTTP/3 sessions since process started" },
-       [ST_F_REQ_OTHER]                     = { .name = "req_other",                   .desc = "Total number of sessions other than HTTP processed by this object since the worker process started" },
-       [ST_F_H1REQ]                         = { .name = "h1req",                       .desc = "Total number of HTTP/1 sessions processed by this object since the worker process started" },
-       [ST_F_H2REQ]                         = { .name = "h2req",                       .desc = "Total number of hTTP/2 sessions processed by this object since the worker process started" },
-       [ST_F_H3REQ]                         = { .name = "h3req",                       .desc = "Total number of HTTP/3 sessions processed by this object since the worker process started" },
-       [ST_F_PROTO]                         = { .name = "proto",                       .desc = "Protocol" },
-};
-
 /* one line of info */
 THREAD_LOCAL struct field info[INF_TOTAL_FIELDS];
 
-/* description of statistics (static and dynamic) */
-struct name_desc *stat_f[STATS_DOMAIN_COUNT];
-static size_t stat_count[STATS_DOMAIN_COUNT];
+const struct name_desc metrics_px[ST_I_PX_MAX] = {
+       [ST_I_PX_PXNAME]                        = { .name = "pxname",                      .desc = "Proxy name" },
+       [ST_I_PX_SVNAME]                        = { .name = "svname",                      .desc = "Server name" },
+       [ST_I_PX_QCUR]                          = { .name = "qcur",                        .desc = "Number of current queued connections" },
+       [ST_I_PX_QMAX]                          = { .name = "qmax",                        .desc = "Highest value of queued connections encountered since process started" },
+       [ST_I_PX_SCUR]                          = { .name = "scur",                        .desc = "Number of current sessions on the frontend, backend or server" },
+       [ST_I_PX_SMAX]                          = { .name = "smax",                        .desc = "Highest value of current sessions encountered since process started" },
+       [ST_I_PX_SLIM]                          = { .name = "slim",                        .desc = "Frontend/listener/server's maxconn, backend's fullconn" },
+       [ST_I_PX_STOT]                          = { .name = "stot",                        .desc = "Total number of sessions since process started" },
+       [ST_I_PX_BIN]                           = { .name = "bin",                         .desc = "Total number of request bytes since process started" },
+       [ST_I_PX_BOUT]                          = { .name = "bout",                        .desc = "Total number of response bytes since process started" },
+       [ST_I_PX_DREQ]                          = { .name = "dreq",                        .desc = "Total number of denied requests since process started" },
+       [ST_I_PX_DRESP]                         = { .name = "dresp",                       .desc = "Total number of denied responses since process started" },
+       [ST_I_PX_EREQ]                          = { .name = "ereq",                        .desc = "Total number of invalid requests since process started" },
+       [ST_I_PX_ECON]                          = { .name = "econ",                        .desc = "Total number of failed connections to server since the worker process started" },
+       [ST_I_PX_ERESP]                         = { .name = "eresp",                       .desc = "Total number of invalid responses since the worker process started" },
+       [ST_I_PX_WRETR]                         = { .name = "wretr",                       .desc = "Total number of server connection retries since the worker process started" },
+       [ST_I_PX_WREDIS]                        = { .name = "wredis",                      .desc = "Total number of server redispatches due to connection failures since the worker process started" },
+       [ST_I_PX_STATUS]                        = { .name = "status",                      .desc = "Frontend/listen status: OPEN/WAITING/FULL/STOP; backend: UP/DOWN; server: last check status" },
+       [ST_I_PX_WEIGHT]                        = { .name = "weight",                      .desc = "Server's effective weight, or sum of active servers' effective weights for a backend" },
+       [ST_I_PX_ACT]                           = { .name = "act",                         .desc = "Total number of active UP servers with a non-zero weight" },
+       [ST_I_PX_BCK]                           = { .name = "bck",                         .desc = "Total number of backup UP servers with a non-zero weight" },
+       [ST_I_PX_CHKFAIL]                       = { .name = "chkfail",                     .desc = "Total number of failed individual health checks per server/backend, since the worker process started" },
+       [ST_I_PX_CHKDOWN]                       = { .name = "chkdown",                     .desc = "Total number of failed checks causing UP to DOWN server transitions, per server/backend, since the worker process started" },
+       [ST_I_PX_LASTCHG]                       = { .name = "lastchg",                     .desc = "How long ago the last server state changed, in seconds" },
+       [ST_I_PX_DOWNTIME]                      = { .name = "downtime",                    .desc = "Total time spent in DOWN state, for server or backend" },
+       [ST_I_PX_QLIMIT]                        = { .name = "qlimit",                      .desc = "Limit on the number of connections in queue, for servers only (maxqueue argument)" },
+       [ST_I_PX_PID]                           = { .name = "pid",                         .desc = "Relative worker process number (1)" },
+       [ST_I_PX_IID]                           = { .name = "iid",                         .desc = "Frontend or Backend numeric identifier ('id' setting)" },
+       [ST_I_PX_SID]                           = { .name = "sid",                         .desc = "Server numeric identifier ('id' setting)" },
+       [ST_I_PX_THROTTLE]                      = { .name = "throttle",                    .desc = "Throttling ratio applied to a server's maxconn and weight during the slowstart period (0 to 100%)" },
+       [ST_I_PX_LBTOT]                         = { .name = "lbtot",                       .desc = "Total number of requests routed by load balancing since the worker process started (ignores queue pop and stickiness)" },
+       [ST_I_PX_TRACKED]                       = { .name = "tracked",                     .desc = "Name of the other server this server tracks for its state" },
+       [ST_I_PX_TYPE]                          = { .name = "type",                        .desc = "Type of the object (Listener, Frontend, Backend, Server)" },
+       [ST_I_PX_RATE]                          = { .name = "rate",                        .desc = "Total number of sessions processed by this object over the last second (sessions for listeners/frontends, requests for backends/servers)" },
+       [ST_I_PX_RATE_LIM]                      = { .name = "rate_lim",                    .desc = "Limit on the number of sessions accepted in a second (frontend only, 'rate-limit sessions' setting)" },
+       [ST_I_PX_RATE_MAX]                      = { .name = "rate_max",                    .desc = "Highest value of sessions per second observed since the worker process started" },
+       [ST_I_PX_CHECK_STATUS]                  = { .name = "check_status",                .desc = "Status report of the server's latest health check, prefixed with '*' if a check is currently in progress" },
+       [ST_I_PX_CHECK_CODE]                    = { .name = "check_code",                  .desc = "HTTP/SMTP/LDAP status code reported by the latest server health check" },
+       [ST_I_PX_CHECK_DURATION]                = { .name = "check_duration",              .desc = "Total duration of the latest server health check, in milliseconds" },
+       [ST_I_PX_HRSP_1XX]                      = { .name = "hrsp_1xx",                    .desc = "Total number of HTTP responses with status 100-199 returned by this object since the worker process started" },
+       [ST_I_PX_HRSP_2XX]                      = { .name = "hrsp_2xx",                    .desc = "Total number of HTTP responses with status 200-299 returned by this object since the worker process started" },
+       [ST_I_PX_HRSP_3XX]                      = { .name = "hrsp_3xx",                    .desc = "Total number of HTTP responses with status 300-399 returned by this object since the worker process started" },
+       [ST_I_PX_HRSP_4XX]                      = { .name = "hrsp_4xx",                    .desc = "Total number of HTTP responses with status 400-499 returned by this object since the worker process started" },
+       [ST_I_PX_HRSP_5XX]                      = { .name = "hrsp_5xx",                    .desc = "Total number of HTTP responses with status 500-599 returned by this object since the worker process started" },
+       [ST_I_PX_HRSP_OTHER]                    = { .name = "hrsp_other",                  .desc = "Total number of HTTP responses with status <100, >599 returned by this object since the worker process started (error -1 included)" },
+       [ST_I_PX_HANAFAIL]                      = { .name = "hanafail",                    .desc = "Total number of failed checks caused by an 'on-error' directive after an 'observe' condition matched" },
+       [ST_I_PX_REQ_RATE]                      = { .name = "req_rate",                    .desc = "Number of HTTP requests processed over the last second on this object" },
+       [ST_I_PX_REQ_RATE_MAX]                  = { .name = "req_rate_max",                .desc = "Highest value of http requests observed since the worker process started" },
+       [ST_I_PX_REQ_TOT]                       = { .name = "req_tot",                     .desc = "Total number of HTTP requests processed by this object since the worker process started" },
+       [ST_I_PX_CLI_ABRT]                      = { .name = "cli_abrt",                    .desc = "Total number of requests or connections aborted by the client since the worker process started" },
+       [ST_I_PX_SRV_ABRT]                      = { .name = "srv_abrt",                    .desc = "Total number of requests or connections aborted by the server since the worker process started" },
+       [ST_I_PX_COMP_IN]                       = { .name = "comp_in",                     .desc = "Total number of bytes submitted to the HTTP compressor for this object since the worker process started" },
+       [ST_I_PX_COMP_OUT]                      = { .name = "comp_out",                    .desc = "Total number of bytes emitted by the HTTP compressor for this object since the worker process started" },
+       [ST_I_PX_COMP_BYP]                      = { .name = "comp_byp",                    .desc = "Total number of bytes that bypassed HTTP compression for this object since the worker process started (CPU/memory/bandwidth limitation)" },
+       [ST_I_PX_COMP_RSP]                      = { .name = "comp_rsp",                    .desc = "Total number of HTTP responses that were compressed for this object since the worker process started" },
+       [ST_I_PX_LASTSESS]                      = { .name = "lastsess",                    .desc = "How long ago some traffic was seen on this object on this worker process, in seconds" },
+       [ST_I_PX_LAST_CHK]                      = { .name = "last_chk",                    .desc = "Short description of the latest health check report for this server (see also check_desc)" },
+       [ST_I_PX_LAST_AGT]                      = { .name = "last_agt",                    .desc = "Short description of the latest agent check report for this server (see also agent_desc)" },
+       [ST_I_PX_QTIME]                         = { .name = "qtime",                       .desc = "Time spent in the queue, in milliseconds, averaged over the 1024 last requests (backend/server)" },
+       [ST_I_PX_CTIME]                         = { .name = "ctime",                       .desc = "Time spent waiting for a connection to complete, in milliseconds, averaged over the 1024 last requests (backend/server)" },
+       [ST_I_PX_RTIME]                         = { .name = "rtime",                       .desc = "Time spent waiting for a server response, in milliseconds, averaged over the 1024 last requests (backend/server)" },
+       [ST_I_PX_TTIME]                         = { .name = "ttime",                       .desc = "Total request+response time (request+queue+connect+response+processing), in milliseconds, averaged over the 1024 last requests (backend/server)" },
+       [ST_I_PX_AGENT_STATUS]                  = { .name = "agent_status",                .desc = "Status report of the server's latest agent check, prefixed with '*' if a check is currently in progress" },
+       [ST_I_PX_AGENT_CODE]                    = { .name = "agent_code",                  .desc = "Status code reported by the latest server agent check" },
+       [ST_I_PX_AGENT_DURATION]                = { .name = "agent_duration",              .desc = "Total duration of the latest server agent check, in milliseconds" },
+       [ST_I_PX_CHECK_DESC]                    = { .name = "check_desc",                  .desc = "Textual description of the latest health check report for this server" },
+       [ST_I_PX_AGENT_DESC]                    = { .name = "agent_desc",                  .desc = "Textual description of the latest agent check report for this server" },
+       [ST_I_PX_CHECK_RISE]                    = { .name = "check_rise",                  .desc = "Number of successful health checks before declaring a server UP (server 'rise' setting)" },
+       [ST_I_PX_CHECK_FALL]                    = { .name = "check_fall",                  .desc = "Number of failed health checks before declaring a server DOWN (server 'fall' setting)" },
+       [ST_I_PX_CHECK_HEALTH]                  = { .name = "check_health",                .desc = "Current server health check level (0..fall-1=DOWN, fall..rise-1=UP)" },
+       [ST_I_PX_AGENT_RISE]                    = { .name = "agent_rise",                  .desc = "Number of successful agent checks before declaring a server UP (server 'rise' setting)" },
+       [ST_I_PX_AGENT_FALL]                    = { .name = "agent_fall",                  .desc = "Number of failed agent checks before declaring a server DOWN (server 'fall' setting)" },
+       [ST_I_PX_AGENT_HEALTH]                  = { .name = "agent_health",                .desc = "Current server agent check level (0..fall-1=DOWN, fall..rise-1=UP)" },
+       [ST_I_PX_ADDR]                          = { .name = "addr",                        .desc = "Server's address:port, shown only if show-legends is set, or at levels oper/admin for the CLI" },
+       [ST_I_PX_COOKIE]                        = { .name = "cookie",                      .desc = "Backend's cookie name or Server's cookie value, shown only if show-legends is set, or at levels oper/admin for the CLI" },
+       [ST_I_PX_MODE]                          = { .name = "mode",                        .desc = "'mode' setting (tcp/http/health/cli)" },
+       [ST_I_PX_ALGO]                          = { .name = "algo",                        .desc = "Backend's load balancing algorithm, shown only if show-legends is set, or at levels oper/admin for the CLI" },
+       [ST_I_PX_CONN_RATE]                     = { .name = "conn_rate",                   .desc = "Number of new connections accepted over the last second on the frontend for this worker process" },
+       [ST_I_PX_CONN_RATE_MAX]                 = { .name = "conn_rate_max",               .desc = "Highest value of connections per second observed since the worker process started" },
+       [ST_I_PX_CONN_TOT]                      = { .name = "conn_tot",                    .desc = "Total number of new connections accepted on this frontend since the worker process started" },
+       [ST_I_PX_INTERCEPTED]                   = { .name = "intercepted",                 .desc = "Total number of HTTP requests intercepted on the frontend (redirects/stats/services) since the worker process started" },
+       [ST_I_PX_DCON]                          = { .name = "dcon",                        .desc = "Total number of incoming connections blocked on a listener/frontend by a tcp-request connection rule since the worker process started" },
+       [ST_I_PX_DSES]                          = { .name = "dses",                        .desc = "Total number of incoming sessions blocked on a listener/frontend by a tcp-request connection rule since the worker process started" },
+       [ST_I_PX_WREW]                          = { .name = "wrew",                        .desc = "Total number of failed HTTP header rewrites since the worker process started" },
+       [ST_I_PX_CONNECT]                       = { .name = "connect",                     .desc = "Total number of outgoing connection attempts on this backend/server since the worker process started" },
+       [ST_I_PX_REUSE]                         = { .name = "reuse",                       .desc = "Total number of reused connection on this backend/server since the worker process started" },
+       [ST_I_PX_CACHE_LOOKUPS]                 = { .name = "cache_lookups",               .desc = "Total number of HTTP requests looked up in the cache on this frontend/backend since the worker process started" },
+       [ST_I_PX_CACHE_HITS]                    = { .name = "cache_hits",                  .desc = "Total number of HTTP requests not found in the cache on this frontend/backend since the worker process started" },
+       [ST_I_PX_SRV_ICUR]                      = { .name = "srv_icur",                    .desc = "Current number of idle connections available for reuse on this server" },
+       [ST_I_PX_SRV_ILIM]                      = { .name = "src_ilim",                    .desc = "Limit on the number of available idle connections on this server (server 'pool_max_conn' directive)" },
+       [ST_I_PX_QT_MAX]                        = { .name = "qtime_max",                   .desc = "Maximum observed time spent in the queue, in milliseconds (backend/server)" },
+       [ST_I_PX_CT_MAX]                        = { .name = "ctime_max",                   .desc = "Maximum observed time spent waiting for a connection to complete, in milliseconds (backend/server)" },
+       [ST_I_PX_RT_MAX]                        = { .name = "rtime_max",                   .desc = "Maximum observed time spent waiting for a server response, in milliseconds (backend/server)" },
+       [ST_I_PX_TT_MAX]                        = { .name = "ttime_max",                   .desc = "Maximum observed total request+response time (request+queue+connect+response+processing), in milliseconds (backend/server)" },
+       [ST_I_PX_EINT]                          = { .name = "eint",                        .desc = "Total number of internal errors since process started"},
+       [ST_I_PX_IDLE_CONN_CUR]                 = { .name = "idle_conn_cur",               .desc = "Current number of unsafe idle connections"},
+       [ST_I_PX_SAFE_CONN_CUR]                 = { .name = "safe_conn_cur",               .desc = "Current number of safe idle connections"},
+       [ST_I_PX_USED_CONN_CUR]                 = { .name = "used_conn_cur",               .desc = "Current number of connections in use"},
+       [ST_I_PX_NEED_CONN_EST]                 = { .name = "need_conn_est",               .desc = "Estimated needed number of connections"},
+       [ST_I_PX_UWEIGHT]                       = { .name = "uweight",                     .desc = "Server's user weight, or sum of active servers' user weights for a backend" },
+       [ST_I_PX_AGG_SRV_CHECK_STATUS]          = { .name = "agg_server_check_status",     .desc = "[DEPRECATED] Backend's aggregated gauge of servers' status" },
+       [ST_I_PX_AGG_SRV_STATUS ]               = { .name = "agg_server_status",           .desc = "Backend's aggregated gauge of servers' status" },
+       [ST_I_PX_AGG_CHECK_STATUS]              = { .name = "agg_check_status",            .desc = "Backend's aggregated gauge of servers' state check status" },
+       [ST_I_PX_SRID]                          = { .name = "srid",                        .desc = "Server id revision, to prevent server id reuse mixups" },
+       [ST_I_PX_SESS_OTHER]                    = { .name = "sess_other",                  .desc = "Total number of sessions other than HTTP since process started" },
+       [ST_I_PX_H1SESS]                        = { .name = "h1sess",                      .desc = "Total number of HTTP/1 sessions since process started" },
+       [ST_I_PX_H2SESS]                        = { .name = "h2sess",                      .desc = "Total number of HTTP/2 sessions since process started" },
+       [ST_I_PX_H3SESS]                        = { .name = "h3sess",                      .desc = "Total number of HTTP/3 sessions since process started" },
+       [ST_I_PX_REQ_OTHER]                     = { .name = "req_other",                   .desc = "Total number of sessions other than HTTP processed by this object since the worker process started" },
+       [ST_I_PX_H1REQ]                         = { .name = "h1req",                       .desc = "Total number of HTTP/1 sessions processed by this object since the worker process started" },
+       [ST_I_PX_H2REQ]                         = { .name = "h2req",                       .desc = "Total number of hTTP/2 sessions processed by this object since the worker process started" },
+       [ST_I_PX_H3REQ]                         = { .name = "h3req",                       .desc = "Total number of HTTP/3 sessions processed by this object since the worker process started" },
+       [ST_I_PX_PROTO]                         = { .name = "proto",                       .desc = "Protocol" },
+};
 
 /* one line for stats */
 THREAD_LOCAL struct field *stat_l[STATS_DOMAIN_COUNT];
 
+/* description of statistics (static and dynamic) */
+struct name_desc *stat_f[STATS_DOMAIN_COUNT];
+static size_t stat_count[STATS_DOMAIN_COUNT];
+
 /* list of all registered stats module */
 struct list stats_module_list[STATS_DOMAIN_COUNT] = {
        LIST_HEAD_INIT(stats_module_list[STATS_DOMAIN_PROXY]),
@@ -406,7 +406,7 @@ static void stats_dump_csv_header(enum stats_domain domain, struct buffer *out)
 
                        /* print special delimiter on proxy stats to mark end of
                           static fields */
-                       if (domain == STATS_DOMAIN_PROXY && field + 1 == ST_F_TOTAL_FIELDS)
+                       if (domain == STATS_DOMAIN_PROXY && field + 1 == ST_I_PX_MAX)
                                chunk_appendf(out, "-,");
                }
        }
@@ -517,7 +517,7 @@ static int stats_dump_fields_csv(struct buffer *out,
 
                /* print special delimiter on proxy stats to mark end of
                   static fields */
-               if (domain == STATS_DOMAIN_PROXY && field + 1 == ST_F_TOTAL_FIELDS) {
+               if (domain == STATS_DOMAIN_PROXY && field + 1 == ST_I_PX_MAX) {
                        if (!chunk_strcat(out, "-,"))
                                return 0;
                }
@@ -544,15 +544,15 @@ static int stats_dump_fields_typed(struct buffer *out,
                switch (domain) {
                case STATS_DOMAIN_PROXY:
                        chunk_appendf(out, "%c.%u.%u.%d.%s.%u:",
-                                     stats[ST_F_TYPE].u.u32 == STATS_TYPE_FE ? 'F' :
-                                     stats[ST_F_TYPE].u.u32 == STATS_TYPE_BE ? 'B' :
-                                     stats[ST_F_TYPE].u.u32 == STATS_TYPE_SO ? 'L' :
-                                     stats[ST_F_TYPE].u.u32 == STATS_TYPE_SV ? 'S' :
+                                     stats[ST_I_PX_TYPE].u.u32 == STATS_TYPE_FE ? 'F' :
+                                     stats[ST_I_PX_TYPE].u.u32 == STATS_TYPE_BE ? 'B' :
+                                     stats[ST_I_PX_TYPE].u.u32 == STATS_TYPE_SO ? 'L' :
+                                     stats[ST_I_PX_TYPE].u.u32 == STATS_TYPE_SV ? 'S' :
                                      '?',
-                                     stats[ST_F_IID].u.u32, stats[ST_F_SID].u.u32,
+                                     stats[ST_I_PX_IID].u.u32, stats[ST_I_PX_SID].u.u32,
                                      field,
                                      stat_f[domain][field].name,
-                                     stats[ST_F_PID].u.u32);
+                                     stats[ST_I_PX_PID].u.u32);
                        break;
 
                case STATS_DOMAIN_RESOLVERS:
@@ -602,7 +602,7 @@ int stats_dump_one_line(const struct field *stats, size_t stats_count,
 
 /* Fill <stats> with the frontend statistics. <stats> is preallocated array of
  * length <len>. If <selected_field> is != NULL, only fill this one. The length
- * of the array must be at least ST_F_TOTAL_FIELDS. If this length is less than
+ * of the array must be at least ST_I_PX_MAX. If this length is less than
  * this value, or if the selected field is not implemented for frontends, the
  * function returns 0, otherwise, it returns 1.
  */
@@ -611,56 +611,56 @@ int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len,
 {
        enum stat_field current_field = (selected_field != NULL ? *selected_field : 0);
 
-       if (len < ST_F_TOTAL_FIELDS)
+       if (len < ST_I_PX_MAX)
                return 0;
 
-       for (; current_field < ST_F_TOTAL_FIELDS; current_field++) {
+       for (; current_field < ST_I_PX_MAX; current_field++) {
                struct field metric = { 0 };
 
                switch (current_field) {
-                       case ST_F_PXNAME:
+                       case ST_I_PX_PXNAME:
                                metric = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, px->id);
                                break;
-                       case ST_F_SVNAME:
+                       case ST_I_PX_SVNAME:
                                metric = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, "FRONTEND");
                                break;
-                       case ST_F_MODE:
+                       case ST_I_PX_MODE:
                                metric = mkf_str(FO_CONFIG|FS_SERVICE, proxy_mode_str(px->mode));
                                break;
-                       case ST_F_SCUR:
+                       case ST_I_PX_SCUR:
                                metric = mkf_u32(0, px->feconn);
                                break;
-                       case ST_F_SMAX:
+                       case ST_I_PX_SMAX:
                                metric = mkf_u32(FN_MAX, px->fe_counters.conn_max);
                                break;
-                       case ST_F_SLIM:
+                       case ST_I_PX_SLIM:
                                metric = mkf_u32(FO_CONFIG|FN_LIMIT, px->maxconn);
                                break;
-                       case ST_F_STOT:
+                       case ST_I_PX_STOT:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.cum_sess);
                                break;
-                       case ST_F_BIN:
+                       case ST_I_PX_BIN:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.bytes_in);
                                break;
-                       case ST_F_BOUT:
+                       case ST_I_PX_BOUT:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.bytes_out);
                                break;
-                       case ST_F_DREQ:
+                       case ST_I_PX_DREQ:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.denied_req);
                                break;
-                       case ST_F_DRESP:
+                       case ST_I_PX_DRESP:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.denied_resp);
                                break;
-                       case ST_F_EREQ:
+                       case ST_I_PX_EREQ:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.failed_req);
                                break;
-                       case ST_F_DCON:
+                       case ST_I_PX_DCON:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.denied_conn);
                                break;
-                       case ST_F_DSES:
+                       case ST_I_PX_DSES:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.denied_sess);
                                break;
-                       case ST_F_STATUS: {
+                       case ST_I_PX_STATUS: {
                                const char *state;
 
                                if (px->flags & (PR_FL_DISABLED|PR_FL_STOPPED))
@@ -672,76 +672,76 @@ int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len,
                                metric = mkf_str(FO_STATUS, state);
                                break;
                        }
-                       case ST_F_PID:
+                       case ST_I_PX_PID:
                                metric = mkf_u32(FO_KEY, 1);
                                break;
-                       case ST_F_IID:
+                       case ST_I_PX_IID:
                                metric = mkf_u32(FO_KEY|FS_SERVICE, px->uuid);
                                break;
-                       case ST_F_SID:
+                       case ST_I_PX_SID:
                                metric = mkf_u32(FO_KEY|FS_SERVICE, 0);
                                break;
-                       case ST_F_TYPE:
+                       case ST_I_PX_TYPE:
                                metric = mkf_u32(FO_CONFIG|FS_SERVICE, STATS_TYPE_FE);
                                break;
-                       case ST_F_RATE:
+                       case ST_I_PX_RATE:
                                metric = mkf_u32(FN_RATE, read_freq_ctr(&px->fe_sess_per_sec));
                                break;
-                       case ST_F_RATE_LIM:
+                       case ST_I_PX_RATE_LIM:
                                metric = mkf_u32(FO_CONFIG|FN_LIMIT, px->fe_sps_lim);
                                break;
-                       case ST_F_RATE_MAX:
+                       case ST_I_PX_RATE_MAX:
                                metric = mkf_u32(FN_MAX, px->fe_counters.sps_max);
                                break;
-                       case ST_F_WREW:
+                       case ST_I_PX_WREW:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.failed_rewrites);
                                break;
-                       case ST_F_EINT:
+                       case ST_I_PX_EINT:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.internal_errors);
                                break;
-                       case ST_F_HRSP_1XX:
+                       case ST_I_PX_HRSP_1XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[1]);
                                break;
-                       case ST_F_HRSP_2XX:
+                       case ST_I_PX_HRSP_2XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[2]);
                                break;
-                       case ST_F_HRSP_3XX:
+                       case ST_I_PX_HRSP_3XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[3]);
                                break;
-                       case ST_F_HRSP_4XX:
+                       case ST_I_PX_HRSP_4XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[4]);
                                break;
-                       case ST_F_HRSP_5XX:
+                       case ST_I_PX_HRSP_5XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[5]);
                                break;
-                       case ST_F_HRSP_OTHER:
+                       case ST_I_PX_HRSP_OTHER:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[0]);
                                break;
-                       case ST_F_INTERCEPTED:
+                       case ST_I_PX_INTERCEPTED:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->fe_counters.intercepted_req);
                                break;
-                       case ST_F_CACHE_LOOKUPS:
+                       case ST_I_PX_CACHE_LOOKUPS:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cache_lookups);
                                break;
-                       case ST_F_CACHE_HITS:
+                       case ST_I_PX_CACHE_HITS:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cache_hits);
                                break;
-                       case ST_F_REQ_RATE:
+                       case ST_I_PX_REQ_RATE:
                                metric = mkf_u32(FN_RATE, read_freq_ctr(&px->fe_req_per_sec));
                                break;
-                       case ST_F_REQ_RATE_MAX:
+                       case ST_I_PX_REQ_RATE_MAX:
                                metric = mkf_u32(FN_MAX, px->fe_counters.p.http.rps_max);
                                break;
-                       case ST_F_REQ_TOT: {
+                       case ST_I_PX_REQ_TOT: {
                                int i;
                                uint64_t total_req;
                                size_t nb_reqs =
@@ -753,28 +753,28 @@ int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len,
                                metric = mkf_u64(FN_COUNTER, total_req);
                                break;
                        }
-                       case ST_F_COMP_IN:
+                       case ST_I_PX_COMP_IN:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.comp_in[COMP_DIR_RES]);
                                break;
-                       case ST_F_COMP_OUT:
+                       case ST_I_PX_COMP_OUT:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.comp_out[COMP_DIR_RES]);
                                break;
-                       case ST_F_COMP_BYP:
+                       case ST_I_PX_COMP_BYP:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.comp_byp[COMP_DIR_RES]);
                                break;
-                       case ST_F_COMP_RSP:
+                       case ST_I_PX_COMP_RSP:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.comp_rsp);
                                break;
-                       case ST_F_CONN_RATE:
+                       case ST_I_PX_CONN_RATE:
                                metric = mkf_u32(FN_RATE, read_freq_ctr(&px->fe_conn_per_sec));
                                break;
-                       case ST_F_CONN_RATE_MAX:
+                       case ST_I_PX_CONN_RATE_MAX:
                                metric = mkf_u32(FN_MAX, px->fe_counters.cps_max);
                                break;
-                       case ST_F_CONN_TOT:
+                       case ST_I_PX_CONN_TOT:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.cum_conn);
                                break;
-                       case ST_F_SESS_OTHER: {
+                       case ST_I_PX_SESS_OTHER: {
                                int i;
                                uint64_t total_sess;
                                size_t nb_sess =
@@ -787,25 +787,25 @@ int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len,
                                metric = mkf_u64(FN_COUNTER, total_sess);
                                break;
                        }
-                       case ST_F_H1SESS:
+                       case ST_I_PX_H1SESS:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.cum_sess_ver[0]);
                                break;
-                       case ST_F_H2SESS:
+                       case ST_I_PX_H2SESS:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.cum_sess_ver[1]);
                                break;
-                       case ST_F_H3SESS:
+                       case ST_I_PX_H3SESS:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.cum_sess_ver[2]);
                                break;
-                       case ST_F_REQ_OTHER:
+                       case ST_I_PX_REQ_OTHER:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cum_req[0]);
                                break;
-                       case ST_F_H1REQ:
+                       case ST_I_PX_H1REQ:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cum_req[1]);
                                break;
-                       case ST_F_H2REQ:
+                       case ST_I_PX_H2REQ:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cum_req[2]);
                                break;
-                       case ST_F_H3REQ:
+                       case ST_I_PX_H3REQ:
                                metric = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cum_req[3]);
                                break;
                        default:
@@ -834,7 +834,7 @@ static int stats_dump_fe_stats(struct stconn *sc, struct proxy *px)
        struct show_stat_ctx *ctx = appctx->svcctx;
        struct field *stats = stat_l[STATS_DOMAIN_PROXY];
        struct stats_module *mod;
-       size_t stats_count = ST_F_TOTAL_FIELDS;
+       size_t stats_count = ST_I_PX_MAX;
 
        if (!(px->cap & PR_CAP_FE))
                return 0;
@@ -844,7 +844,7 @@ static int stats_dump_fe_stats(struct stconn *sc, struct proxy *px)
 
        memset(stats, 0, sizeof(struct field) * stat_count[STATS_DOMAIN_PROXY]);
 
-       if (!stats_fill_fe_stats(px, stats, ST_F_TOTAL_FIELDS, NULL))
+       if (!stats_fill_fe_stats(px, stats, ST_I_PX_MAX, NULL))
                return 0;
 
        list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
@@ -865,7 +865,7 @@ static int stats_dump_fe_stats(struct stconn *sc, struct proxy *px)
 }
 
 /* Fill <stats> with the listener statistics. <stats> is preallocated array of
- * length <len>. The length of the array must be at least ST_F_TOTAL_FIELDS. If
+ * length <len>. The length of the array must be at least ST_I_PX_MAX. If
  * this length is less then this value, the function returns 0, otherwise, it
  * returns 1.  If selected_field is != NULL, only fill this one. <flags> can
  * take the value STAT_SHLGNDS.
@@ -876,7 +876,7 @@ int stats_fill_li_stats(struct proxy *px, struct listener *l, int flags,
        enum stat_field current_field = (selected_field != NULL ? *selected_field : 0);
        struct buffer *out = get_trash_chunk();
 
-       if (len < ST_F_TOTAL_FIELDS)
+       if (len < ST_I_PX_MAX)
                return 0;
 
        if (!l->counters)
@@ -884,77 +884,77 @@ int stats_fill_li_stats(struct proxy *px, struct listener *l, int flags,
 
        chunk_reset(out);
 
-       for (; current_field < ST_F_TOTAL_FIELDS; current_field++) {
+       for (; current_field < ST_I_PX_MAX; current_field++) {
                struct field metric = { 0 };
 
                switch (current_field) {
-                       case ST_F_PXNAME:
+                       case ST_I_PX_PXNAME:
                                metric = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, px->id);
                                break;
-                       case ST_F_SVNAME:
+                       case ST_I_PX_SVNAME:
                                metric = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, l->name);
                                break;
-                       case ST_F_MODE:
+                       case ST_I_PX_MODE:
                                metric = mkf_str(FO_CONFIG|FS_SERVICE, proxy_mode_str(px->mode));
                                break;
-                       case ST_F_SCUR:
+                       case ST_I_PX_SCUR:
                                metric = mkf_u32(0, l->nbconn);
                                break;
-                       case ST_F_SMAX:
+                       case ST_I_PX_SMAX:
                                metric = mkf_u32(FN_MAX, l->counters->conn_max);
                                break;
-                       case ST_F_SLIM:
+                       case ST_I_PX_SLIM:
                                metric = mkf_u32(FO_CONFIG|FN_LIMIT, l->bind_conf->maxconn);
                                break;
-                       case ST_F_STOT:
+                       case ST_I_PX_STOT:
                                metric = mkf_u64(FN_COUNTER, l->counters->cum_sess);
                                break;
-                       case ST_F_BIN:
+                       case ST_I_PX_BIN:
                                metric = mkf_u64(FN_COUNTER, l->counters->bytes_in);
                                break;
-                       case ST_F_BOUT:
+                       case ST_I_PX_BOUT:
                                metric = mkf_u64(FN_COUNTER, l->counters->bytes_out);
                                break;
-                       case ST_F_DREQ:
+                       case ST_I_PX_DREQ:
                                metric = mkf_u64(FN_COUNTER, l->counters->denied_req);
                                break;
-                       case ST_F_DRESP:
+                       case ST_I_PX_DRESP:
                                metric = mkf_u64(FN_COUNTER, l->counters->denied_resp);
                                break;
-                       case ST_F_EREQ:
+                       case ST_I_PX_EREQ:
                                metric = mkf_u64(FN_COUNTER, l->counters->failed_req);
                                break;
-                       case ST_F_DCON:
+                       case ST_I_PX_DCON:
                                metric = mkf_u64(FN_COUNTER, l->counters->denied_conn);
                                break;
-                       case ST_F_DSES:
+                       case ST_I_PX_DSES:
                                metric = mkf_u64(FN_COUNTER, l->counters->denied_sess);
                                break;
-                       case ST_F_STATUS:
+                       case ST_I_PX_STATUS:
                                metric = mkf_str(FO_STATUS, li_status_st[get_li_status(l)]);
                                break;
-                       case ST_F_PID:
+                       case ST_I_PX_PID:
                                metric = mkf_u32(FO_KEY, 1);
                                break;
-                       case ST_F_IID:
+                       case ST_I_PX_IID:
                                metric = mkf_u32(FO_KEY|FS_SERVICE, px->uuid);
                                break;
-                       case ST_F_SID:
+                       case ST_I_PX_SID:
                                metric = mkf_u32(FO_KEY|FS_SERVICE, l->luid);
                                break;
-                       case ST_F_TYPE:
+                       case ST_I_PX_TYPE:
                                metric = mkf_u32(FO_CONFIG|FS_SERVICE, STATS_TYPE_SO);
                                break;
-                       case ST_F_CONN_TOT:
+                       case ST_I_PX_CONN_TOT:
                                metric = mkf_u64(FN_COUNTER, l->counters->cum_conn);
                                break;
-                       case ST_F_WREW:
+                       case ST_I_PX_WREW:
                                metric = mkf_u64(FN_COUNTER, l->counters->failed_rewrites);
                                break;
-                       case ST_F_EINT:
+                       case ST_I_PX_EINT:
                                metric = mkf_u64(FN_COUNTER, l->counters->internal_errors);
                                break;
-                       case ST_F_ADDR:
+                       case ST_I_PX_ADDR:
                                if (flags & STAT_SHLGNDS) {
                                        char str[INET6_ADDRSTRLEN];
                                        int port;
@@ -981,7 +981,7 @@ int stats_fill_li_stats(struct proxy *px, struct listener *l, int flags,
                                        }
                                }
                                break;
-                       case ST_F_PROTO:
+                       case ST_I_PX_PROTO:
                                metric = mkf_str(FO_STATUS, l->rx.proto->name);
                                break;
                        default:
@@ -1010,12 +1010,12 @@ static int stats_dump_li_stats(struct stconn *sc, struct proxy *px, struct liste
        struct show_stat_ctx *ctx = appctx->svcctx;
        struct field *stats = stat_l[STATS_DOMAIN_PROXY];
        struct stats_module *mod;
-       size_t stats_count = ST_F_TOTAL_FIELDS;
+       size_t stats_count = ST_I_PX_MAX;
 
        memset(stats, 0, sizeof(struct field) * stat_count[STATS_DOMAIN_PROXY]);
 
        if (!stats_fill_li_stats(px, l, ctx->flags, stats,
-                                ST_F_TOTAL_FIELDS, NULL))
+                                ST_I_PX_MAX, NULL))
                return 0;
 
        list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
@@ -1114,7 +1114,7 @@ static void stats_fill_sv_stats_computestate(struct server *sv, struct server *r
 
 /* Fill <stats> with the backend statistics. <stats> is preallocated array of
  * length <len>. If <selected_field> is != NULL, only fill this one. The length
- * of the array must be at least ST_F_TOTAL_FIELDS. If this length is less than
+ * of the array must be at least ST_I_PX_MAX. If this length is less than
  * this value, or if the selected field is not implemented for servers, the
  * function returns 0, otherwise, it returns 1. <flags> can take the value
  * STAT_SHLGNDS.
@@ -1133,15 +1133,15 @@ int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags,
        long long srv_samples_counter;
        unsigned int srv_samples_window = TIME_STATS_SAMPLES;
 
-       if (len < ST_F_TOTAL_FIELDS)
+       if (len < ST_I_PX_MAX)
                return 0;
 
        chunk_reset(out);
 
        /* compute state for later use */
-       if (selected_field == NULL || *selected_field == ST_F_STATUS ||
-           *selected_field == ST_F_CHECK_RISE || *selected_field == ST_F_CHECK_FALL ||
-           *selected_field == ST_F_CHECK_HEALTH || *selected_field == ST_F_HANAFAIL) {
+       if (selected_field == NULL || *selected_field == ST_I_PX_STATUS ||
+           *selected_field == ST_I_PX_CHECK_RISE || *selected_field == ST_I_PX_CHECK_FALL ||
+           *selected_field == ST_I_PX_CHECK_HEALTH || *selected_field == ST_I_PX_HANAFAIL) {
                /* we have "via" which is the tracked server as described in the configuration,
                 * and "ref" which is the checked server and the end of the chain.
                 */
@@ -1151,99 +1151,99 @@ int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags,
        }
 
        /* compue time values for later use */
-       if (selected_field == NULL || *selected_field == ST_F_QTIME ||
-           *selected_field == ST_F_CTIME || *selected_field == ST_F_RTIME ||
-           *selected_field == ST_F_TTIME) {
+       if (selected_field == NULL || *selected_field == ST_I_PX_QTIME ||
+           *selected_field == ST_I_PX_CTIME || *selected_field == ST_I_PX_RTIME ||
+           *selected_field == ST_I_PX_TTIME) {
                srv_samples_counter = (px->mode == PR_MODE_HTTP) ? sv->counters.p.http.cum_req : sv->counters.cum_lbconn;
                if (srv_samples_counter < TIME_STATS_SAMPLES && srv_samples_counter > 0)
                        srv_samples_window = srv_samples_counter;
        }
 
-       for (; current_field < ST_F_TOTAL_FIELDS; current_field++) {
+       for (; current_field < ST_I_PX_MAX; current_field++) {
                struct field metric = { 0 };
 
                switch (current_field) {
-                       case ST_F_PXNAME:
+                       case ST_I_PX_PXNAME:
                                metric = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, px->id);
                                break;
-                       case ST_F_SVNAME:
+                       case ST_I_PX_SVNAME:
                                metric = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, sv->id);
                                break;
-                       case ST_F_MODE:
+                       case ST_I_PX_MODE:
                                metric = mkf_str(FO_CONFIG|FS_SERVICE, proxy_mode_str(px->mode));
                                break;
-                       case ST_F_QCUR:
+                       case ST_I_PX_QCUR:
                                metric = mkf_u32(0, sv->queue.length);
                                break;
-                       case ST_F_QMAX:
+                       case ST_I_PX_QMAX:
                                metric = mkf_u32(FN_MAX, sv->counters.nbpend_max);
                                break;
-                       case ST_F_SCUR:
+                       case ST_I_PX_SCUR:
                                metric = mkf_u32(0, sv->cur_sess);
                                break;
-                       case ST_F_SMAX:
+                       case ST_I_PX_SMAX:
                                metric = mkf_u32(FN_MAX, sv->counters.cur_sess_max);
                                break;
-                       case ST_F_SLIM:
+                       case ST_I_PX_SLIM:
                                if (sv->maxconn)
                                        metric = mkf_u32(FO_CONFIG|FN_LIMIT, sv->maxconn);
                                break;
-                       case ST_F_SRV_ICUR:
+                       case ST_I_PX_SRV_ICUR:
                                metric = mkf_u32(0, sv->curr_idle_conns);
                                break;
-                       case ST_F_SRV_ILIM:
+                       case ST_I_PX_SRV_ILIM:
                                if (sv->max_idle_conns != -1)
                                        metric = mkf_u32(FO_CONFIG|FN_LIMIT, sv->max_idle_conns);
                                break;
-                       case ST_F_STOT:
+                       case ST_I_PX_STOT:
                                metric = mkf_u64(FN_COUNTER, sv->counters.cum_sess);
                                break;
-                       case ST_F_BIN:
+                       case ST_I_PX_BIN:
                                metric = mkf_u64(FN_COUNTER, sv->counters.bytes_in);
                                break;
-                       case ST_F_BOUT:
+                       case ST_I_PX_BOUT:
                                metric = mkf_u64(FN_COUNTER, sv->counters.bytes_out);
                                break;
-                       case ST_F_DRESP:
+                       case ST_I_PX_DRESP:
                                metric = mkf_u64(FN_COUNTER, sv->counters.denied_resp);
                                break;
-                       case ST_F_ECON:
+                       case ST_I_PX_ECON:
                                metric = mkf_u64(FN_COUNTER, sv->counters.failed_conns);
                                break;
-                       case ST_F_ERESP:
+                       case ST_I_PX_ERESP:
                                metric = mkf_u64(FN_COUNTER, sv->counters.failed_resp);
                                break;
-                       case ST_F_WRETR:
+                       case ST_I_PX_WRETR:
                                metric = mkf_u64(FN_COUNTER, sv->counters.retries);
                                break;
-                       case ST_F_WREDIS:
+                       case ST_I_PX_WREDIS:
                                metric = mkf_u64(FN_COUNTER, sv->counters.redispatches);
                                break;
-                       case ST_F_WREW:
+                       case ST_I_PX_WREW:
                                metric = mkf_u64(FN_COUNTER, sv->counters.failed_rewrites);
                                break;
-                       case ST_F_EINT:
+                       case ST_I_PX_EINT:
                                metric = mkf_u64(FN_COUNTER, sv->counters.internal_errors);
                                break;
-                       case ST_F_CONNECT:
+                       case ST_I_PX_CONNECT:
                                metric = mkf_u64(FN_COUNTER, sv->counters.connect);
                                break;
-                       case ST_F_REUSE:
+                       case ST_I_PX_REUSE:
                                metric = mkf_u64(FN_COUNTER, sv->counters.reuse);
                                break;
-                       case ST_F_IDLE_CONN_CUR:
+                       case ST_I_PX_IDLE_CONN_CUR:
                                metric = mkf_u32(0, sv->curr_idle_nb);
                                break;
-                       case ST_F_SAFE_CONN_CUR:
+                       case ST_I_PX_SAFE_CONN_CUR:
                                metric = mkf_u32(0, sv->curr_safe_nb);
                                break;
-                       case ST_F_USED_CONN_CUR:
+                       case ST_I_PX_USED_CONN_CUR:
                                metric = mkf_u32(0, sv->curr_used_conns);
                                break;
-                       case ST_F_NEED_CONN_EST:
+                       case ST_I_PX_NEED_CONN_EST:
                                metric = mkf_u32(0, sv->est_need_conns);
                                break;
-                       case ST_F_STATUS:
+                       case ST_I_PX_STATUS:
                                fld_status = chunk_newstr(out);
                                if (sv->cur_admin & SRV_ADMF_RMAINT)
                                        chunk_appendf(out, "MAINT (resolution)");
@@ -1259,73 +1259,73 @@ int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags,
 
                                metric = mkf_str(FO_STATUS, fld_status);
                                break;
-                       case ST_F_LASTCHG:
+                       case ST_I_PX_LASTCHG:
                                metric = mkf_u32(FN_AGE, ns_to_sec(now_ns) - sv->last_change);
                                break;
-                       case ST_F_WEIGHT:
+                       case ST_I_PX_WEIGHT:
                                metric = mkf_u32(FN_AVG, (sv->cur_eweight * px->lbprm.wmult + px->lbprm.wdiv - 1) / px->lbprm.wdiv);
                                break;
-                       case ST_F_UWEIGHT:
+                       case ST_I_PX_UWEIGHT:
                                metric = mkf_u32(FN_AVG, sv->uweight);
                                break;
-                       case ST_F_ACT:
+                       case ST_I_PX_ACT:
                                metric = mkf_u32(FO_STATUS, (sv->flags & SRV_F_BACKUP) ? 0 : 1);
                                break;
-                       case ST_F_BCK:
+                       case ST_I_PX_BCK:
                                metric = mkf_u32(FO_STATUS, (sv->flags & SRV_F_BACKUP) ? 1 : 0);
                                break;
-                       case ST_F_CHKFAIL:
+                       case ST_I_PX_CHKFAIL:
                                if (sv->check.state & CHK_ST_ENABLED)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.failed_checks);
                                break;
-                       case ST_F_CHKDOWN:
+                       case ST_I_PX_CHKDOWN:
                                if (sv->check.state & CHK_ST_ENABLED)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.down_trans);
                                break;
-                       case ST_F_DOWNTIME:
+                       case ST_I_PX_DOWNTIME:
                                if (sv->check.state & CHK_ST_ENABLED)
                                        metric = mkf_u32(FN_COUNTER, srv_downtime(sv));
                                break;
-                       case ST_F_QLIMIT:
+                       case ST_I_PX_QLIMIT:
                                if (sv->maxqueue)
                                        metric = mkf_u32(FO_CONFIG|FS_SERVICE, sv->maxqueue);
                                break;
-                       case ST_F_PID:
+                       case ST_I_PX_PID:
                                metric = mkf_u32(FO_KEY, 1);
                                break;
-                       case ST_F_IID:
+                       case ST_I_PX_IID:
                                metric = mkf_u32(FO_KEY|FS_SERVICE, px->uuid);
                                break;
-                       case ST_F_SID:
+                       case ST_I_PX_SID:
                                metric = mkf_u32(FO_KEY|FS_SERVICE, sv->puid);
                                break;
-                       case ST_F_SRID:
+                       case ST_I_PX_SRID:
                                metric = mkf_u32(FN_COUNTER, sv->rid);
                                break;
-                       case ST_F_THROTTLE:
+                       case ST_I_PX_THROTTLE:
                                if (sv->cur_state == SRV_ST_STARTING && !server_is_draining(sv))
                                        metric = mkf_u32(FN_AVG, server_throttle_rate(sv));
                                break;
-                       case ST_F_LBTOT:
+                       case ST_I_PX_LBTOT:
                                metric = mkf_u64(FN_COUNTER, sv->counters.cum_lbconn);
                                break;
-                       case ST_F_TRACKED:
+                       case ST_I_PX_TRACKED:
                                if (sv->track) {
                                        char *fld_track = chunk_newstr(out);
                                        chunk_appendf(out, "%s/%s", sv->track->proxy->id, sv->track->id);
                                        metric = mkf_str(FO_CONFIG|FN_NAME|FS_SERVICE, fld_track);
                                }
                                break;
-                       case ST_F_TYPE:
+                       case ST_I_PX_TYPE:
                                metric = mkf_u32(FO_CONFIG|FS_SERVICE, STATS_TYPE_SV);
                                break;
-                       case ST_F_RATE:
+                       case ST_I_PX_RATE:
                                metric = mkf_u32(FN_RATE, read_freq_ctr(&sv->sess_per_sec));
                                break;
-                       case ST_F_RATE_MAX:
+                       case ST_I_PX_RATE_MAX:
                                metric = mkf_u32(FN_MAX, sv->counters.sps_max);
                                break;
-                       case ST_F_CHECK_STATUS:
+                       case ST_I_PX_CHECK_STATUS:
                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED) {
                                        const char *fld_chksts;
 
@@ -1337,37 +1337,37 @@ int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags,
                                        metric = mkf_str(FN_OUTPUT, fld_chksts);
                                }
                                break;
-                       case ST_F_CHECK_CODE:
+                       case ST_I_PX_CHECK_CODE:
                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED &&
                                        sv->check.status >= HCHK_STATUS_L57DATA)
                                        metric = mkf_u32(FN_OUTPUT, sv->check.code);
                                break;
-                       case ST_F_CHECK_DURATION:
+                       case ST_I_PX_CHECK_DURATION:
                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED &&
                                        sv->check.status >= HCHK_STATUS_CHECKED)
                                        metric = mkf_u64(FN_DURATION, MAX(sv->check.duration, 0));
                                break;
-                       case ST_F_CHECK_DESC:
+                       case ST_I_PX_CHECK_DESC:
                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_str(FN_OUTPUT, get_check_status_description(sv->check.status));
                                break;
-                       case ST_F_LAST_CHK:
+                       case ST_I_PX_LAST_CHK:
                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_str(FN_OUTPUT, sv->check.desc);
                                break;
-                       case ST_F_CHECK_RISE:
+                       case ST_I_PX_CHECK_RISE:
                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_u32(FO_CONFIG|FS_SERVICE, ref->check.rise);
                                break;
-                       case ST_F_CHECK_FALL:
+                       case ST_I_PX_CHECK_FALL:
                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_u32(FO_CONFIG|FS_SERVICE, ref->check.fall);
                                break;
-                       case ST_F_CHECK_HEALTH:
+                       case ST_I_PX_CHECK_HEALTH:
                                if ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_u32(FO_CONFIG|FS_SERVICE, ref->check.health);
                                break;
-                       case ST_F_AGENT_STATUS:
+                       case ST_I_PX_AGENT_STATUS:
                                if  ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED) {
                                        const char *fld_chksts;
 
@@ -1379,101 +1379,101 @@ int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags,
                                        metric = mkf_str(FN_OUTPUT, fld_chksts);
                                }
                                break;
-                       case ST_F_AGENT_CODE:
+                       case ST_I_PX_AGENT_CODE:
                                if  ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED &&
                                     (sv->agent.status >= HCHK_STATUS_L57DATA))
                                        metric = mkf_u32(FN_OUTPUT, sv->agent.code);
                                break;
-                       case ST_F_AGENT_DURATION:
+                       case ST_I_PX_AGENT_DURATION:
                                if ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_u64(FN_DURATION, sv->agent.duration);
                                break;
-                       case ST_F_AGENT_DESC:
+                       case ST_I_PX_AGENT_DESC:
                                if ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_str(FN_OUTPUT, get_check_status_description(sv->agent.status));
                                break;
-                       case ST_F_LAST_AGT:
+                       case ST_I_PX_LAST_AGT:
                                if ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_str(FN_OUTPUT, sv->agent.desc);
                                break;
-                       case ST_F_AGENT_RISE:
+                       case ST_I_PX_AGENT_RISE:
                                if ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_u32(FO_CONFIG|FS_SERVICE, sv->agent.rise);
                                break;
-                       case ST_F_AGENT_FALL:
+                       case ST_I_PX_AGENT_FALL:
                                if ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_u32(FO_CONFIG|FS_SERVICE, sv->agent.fall);
                                break;
-                       case ST_F_AGENT_HEALTH:
+                       case ST_I_PX_AGENT_HEALTH:
                                if ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED)
                                        metric = mkf_u32(FO_CONFIG|FS_SERVICE, sv->agent.health);
                                break;
-                       case ST_F_REQ_TOT:
+                       case ST_I_PX_REQ_TOT:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.p.http.cum_req);
                                break;
-                       case ST_F_HRSP_1XX:
+                       case ST_I_PX_HRSP_1XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[1]);
                                break;
-                       case ST_F_HRSP_2XX:
+                       case ST_I_PX_HRSP_2XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[2]);
                                break;
-                       case ST_F_HRSP_3XX:
+                       case ST_I_PX_HRSP_3XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[3]);
                                break;
-                       case ST_F_HRSP_4XX:
+                       case ST_I_PX_HRSP_4XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[4]);
                                break;
-                       case ST_F_HRSP_5XX:
+                       case ST_I_PX_HRSP_5XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[5]);
                                break;
-                       case ST_F_HRSP_OTHER:
+                       case ST_I_PX_HRSP_OTHER:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[0]);
                                break;
-                       case ST_F_HANAFAIL:
+                       case ST_I_PX_HANAFAIL:
                                if (ref->observe)
                                        metric = mkf_u64(FN_COUNTER, sv->counters.failed_hana);
                                break;
-                       case ST_F_CLI_ABRT:
+                       case ST_I_PX_CLI_ABRT:
                                metric = mkf_u64(FN_COUNTER, sv->counters.cli_aborts);
                                break;
-                       case ST_F_SRV_ABRT:
+                       case ST_I_PX_SRV_ABRT:
                                metric = mkf_u64(FN_COUNTER, sv->counters.srv_aborts);
                                break;
-                       case ST_F_LASTSESS:
+                       case ST_I_PX_LASTSESS:
                                metric = mkf_s32(FN_AGE, srv_lastsession(sv));
                                break;
-                       case ST_F_QTIME:
+                       case ST_I_PX_QTIME:
                                metric = mkf_u32(FN_AVG, swrate_avg(sv->counters.q_time, srv_samples_window));
                                break;
-                       case ST_F_CTIME:
+                       case ST_I_PX_CTIME:
                                metric = mkf_u32(FN_AVG, swrate_avg(sv->counters.c_time, srv_samples_window));
                                break;
-                       case ST_F_RTIME:
+                       case ST_I_PX_RTIME:
                                metric = mkf_u32(FN_AVG, swrate_avg(sv->counters.d_time, srv_samples_window));
                                break;
-                       case ST_F_TTIME:
+                       case ST_I_PX_TTIME:
                                metric = mkf_u32(FN_AVG, swrate_avg(sv->counters.t_time, srv_samples_window));
                                break;
-                       case ST_F_QT_MAX:
+                       case ST_I_PX_QT_MAX:
                                metric = mkf_u32(FN_MAX, sv->counters.qtime_max);
                                break;
-                       case ST_F_CT_MAX:
+                       case ST_I_PX_CT_MAX:
                                metric = mkf_u32(FN_MAX, sv->counters.ctime_max);
                                break;
-                       case ST_F_RT_MAX:
+                       case ST_I_PX_RT_MAX:
                                metric = mkf_u32(FN_MAX, sv->counters.dtime_max);
                                break;
-                       case ST_F_TT_MAX:
+                       case ST_I_PX_TT_MAX:
                                metric = mkf_u32(FN_MAX, sv->counters.ttime_max);
                                break;
-                       case ST_F_ADDR:
+                       case ST_I_PX_ADDR:
                                if (flags & STAT_SHLGNDS) {
                                        switch (addr_to_str(&sv->addr, str, sizeof(str))) {
                                                case AF_INET:
@@ -1496,7 +1496,7 @@ int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags,
                                        }
                                }
                                break;
-                       case ST_F_COOKIE:
+                       case ST_I_PX_COOKIE:
                                if (flags & STAT_SHLGNDS && sv->cookie)
                                        metric = mkf_str(FO_CONFIG|FN_NAME|FS_SERVICE, sv->cookie);
                                break;
@@ -1526,12 +1526,12 @@ static int stats_dump_sv_stats(struct stconn *sc, struct proxy *px, struct serve
        struct show_stat_ctx *ctx = appctx->svcctx;
        struct stats_module *mod;
        struct field *stats = stat_l[STATS_DOMAIN_PROXY];
-       size_t stats_count = ST_F_TOTAL_FIELDS;
+       size_t stats_count = ST_I_PX_MAX;
 
        memset(stats, 0, sizeof(struct field) * stat_count[STATS_DOMAIN_PROXY]);
 
        if (!stats_fill_sv_stats(px, sv, ctx->flags, stats,
-                                ST_F_TOTAL_FIELDS, NULL))
+                                ST_I_PX_MAX, NULL))
                return 0;
 
        list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
@@ -1585,7 +1585,7 @@ static void stats_fill_be_stats_computesrv(struct proxy *px, int *nbup, int *nbs
 
 /* Fill <stats> with the backend statistics. <stats> is preallocated array of
  * length <len>. If <selected_field> is != NULL, only fill this one. The length
- * of the array must be at least ST_F_TOTAL_FIELDS. If this length is less than
+ * of the array must be at least ST_I_PX_MAX. If this length is less than
  * this value, or if the selected field is not implemented for backends, the
  * function returns 0, otherwise, it returns 1. <flags> can take the value
  * STAT_SHLGNDS.
@@ -1600,236 +1600,236 @@ int stats_fill_be_stats(struct proxy *px, int flags, struct field *stats, int le
        int nbup, nbsrv, totuw;
        char *fld;
 
-       if (len < ST_F_TOTAL_FIELDS)
+       if (len < ST_I_PX_MAX)
                return 0;
 
        nbup = nbsrv = totuw = 0;
        /* some srv values compute for later if we either select all fields or
         * need them for one of the mentioned ones */
-       if (selected_field == NULL || *selected_field == ST_F_STATUS ||
-           *selected_field == ST_F_UWEIGHT)
+       if (selected_field == NULL || *selected_field == ST_I_PX_STATUS ||
+           *selected_field == ST_I_PX_UWEIGHT)
                stats_fill_be_stats_computesrv(px, &nbup, &nbsrv, &totuw);
 
        /* same here but specific to time fields */
-       if (selected_field == NULL || *selected_field == ST_F_QTIME ||
-           *selected_field == ST_F_CTIME || *selected_field == ST_F_RTIME ||
-           *selected_field == ST_F_TTIME) {
+       if (selected_field == NULL || *selected_field == ST_I_PX_QTIME ||
+           *selected_field == ST_I_PX_CTIME || *selected_field == ST_I_PX_RTIME ||
+           *selected_field == ST_I_PX_TTIME) {
                be_samples_counter = (px->mode == PR_MODE_HTTP) ? px->be_counters.p.http.cum_req : px->be_counters.cum_lbconn;
                if (be_samples_counter < TIME_STATS_SAMPLES && be_samples_counter > 0)
                        be_samples_window = be_samples_counter;
        }
 
-       for (; current_field < ST_F_TOTAL_FIELDS; current_field++) {
+       for (; current_field < ST_I_PX_MAX; current_field++) {
                struct field metric = { 0 };
 
                switch (current_field) {
-                       case ST_F_PXNAME:
+                       case ST_I_PX_PXNAME:
                                metric = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, px->id);
                                break;
-                       case ST_F_SVNAME:
+                       case ST_I_PX_SVNAME:
                                metric = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, "BACKEND");
                                break;
-                       case ST_F_MODE:
+                       case ST_I_PX_MODE:
                                metric = mkf_str(FO_CONFIG|FS_SERVICE, proxy_mode_str(px->mode));
                                break;
-                       case ST_F_QCUR:
+                       case ST_I_PX_QCUR:
                                metric = mkf_u32(0, px->queue.length);
                                break;
-                       case ST_F_QMAX:
+                       case ST_I_PX_QMAX:
                                metric = mkf_u32(FN_MAX, px->be_counters.nbpend_max);
                                break;
-                       case ST_F_SCUR:
+                       case ST_I_PX_SCUR:
                                metric = mkf_u32(0, px->beconn);
                                break;
-                       case ST_F_SMAX:
+                       case ST_I_PX_SMAX:
                                metric = mkf_u32(FN_MAX, px->be_counters.conn_max);
                                break;
-                       case ST_F_SLIM:
+                       case ST_I_PX_SLIM:
                                metric = mkf_u32(FO_CONFIG|FN_LIMIT, px->fullconn);
                                break;
-                       case ST_F_STOT:
+                       case ST_I_PX_STOT:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.cum_sess);
                                break;
-                       case ST_F_BIN:
+                       case ST_I_PX_BIN:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.bytes_in);
                                break;
-                       case ST_F_BOUT:
+                       case ST_I_PX_BOUT:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.bytes_out);
                                break;
-                       case ST_F_DREQ:
+                       case ST_I_PX_DREQ:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.denied_req);
                                break;
-                       case ST_F_DRESP:
+                       case ST_I_PX_DRESP:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.denied_resp);
                                break;
-                       case ST_F_ECON:
+                       case ST_I_PX_ECON:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.failed_conns);
                                break;
-                       case ST_F_ERESP:
+                       case ST_I_PX_ERESP:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.failed_resp);
                                break;
-                       case ST_F_WRETR:
+                       case ST_I_PX_WRETR:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.retries);
                                break;
-                       case ST_F_WREDIS:
+                       case ST_I_PX_WREDIS:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.redispatches);
                                break;
-                       case ST_F_WREW:
+                       case ST_I_PX_WREW:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.failed_rewrites);
                                break;
-                       case ST_F_EINT:
+                       case ST_I_PX_EINT:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.internal_errors);
                                break;
-                       case ST_F_CONNECT:
+                       case ST_I_PX_CONNECT:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.connect);
                                break;
-                       case ST_F_REUSE:
+                       case ST_I_PX_REUSE:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.reuse);
                                break;
-                       case ST_F_STATUS:
+                       case ST_I_PX_STATUS:
                                fld = chunk_newstr(out);
                                chunk_appendf(out, "%s", (px->lbprm.tot_weight > 0 || !px->srv) ? "UP" : "DOWN");
                                if (flags & (STAT_HIDE_MAINT|STAT_HIDE_DOWN))
                                        chunk_appendf(out, " (%d/%d)", nbup, nbsrv);
                                metric = mkf_str(FO_STATUS, fld);
                                break;
-                       case ST_F_AGG_SRV_CHECK_STATUS:   // DEPRECATED
-                       case ST_F_AGG_SRV_STATUS:
+                       case ST_I_PX_AGG_SRV_CHECK_STATUS:   // DEPRECATED
+                       case ST_I_PX_AGG_SRV_STATUS:
                                metric = mkf_u32(FN_GAUGE, 0);
                                break;
-                       case ST_F_AGG_CHECK_STATUS:
+                       case ST_I_PX_AGG_CHECK_STATUS:
                                metric = mkf_u32(FN_GAUGE, 0);
                                break;
-                       case ST_F_WEIGHT:
+                       case ST_I_PX_WEIGHT:
                                metric = mkf_u32(FN_AVG, (px->lbprm.tot_weight * px->lbprm.wmult + px->lbprm.wdiv - 1) / px->lbprm.wdiv);
                                break;
-                       case ST_F_UWEIGHT:
+                       case ST_I_PX_UWEIGHT:
                                metric = mkf_u32(FN_AVG, totuw);
                                break;
-                       case ST_F_ACT:
+                       case ST_I_PX_ACT:
                                metric = mkf_u32(0, px->srv_act);
                                break;
-                       case ST_F_BCK:
+                       case ST_I_PX_BCK:
                                metric = mkf_u32(0, px->srv_bck);
                                break;
-                       case ST_F_CHKDOWN:
+                       case ST_I_PX_CHKDOWN:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.down_trans);
                                break;
-                       case ST_F_LASTCHG:
+                       case ST_I_PX_LASTCHG:
                                metric = mkf_u32(FN_AGE, ns_to_sec(now_ns) - px->last_change);
                                break;
-                       case ST_F_DOWNTIME:
+                       case ST_I_PX_DOWNTIME:
                                if (px->srv)
                                        metric = mkf_u32(FN_COUNTER, be_downtime(px));
                                break;
-                       case ST_F_PID:
+                       case ST_I_PX_PID:
                                metric = mkf_u32(FO_KEY, 1);
                                break;
-                       case ST_F_IID:
+                       case ST_I_PX_IID:
                                metric = mkf_u32(FO_KEY|FS_SERVICE, px->uuid);
                                break;
-                       case ST_F_SID:
+                       case ST_I_PX_SID:
                                metric = mkf_u32(FO_KEY|FS_SERVICE, 0);
                                break;
-                       case ST_F_LBTOT:
+                       case ST_I_PX_LBTOT:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.cum_lbconn);
                                break;
-                       case ST_F_TYPE:
+                       case ST_I_PX_TYPE:
                                metric = mkf_u32(FO_CONFIG|FS_SERVICE, STATS_TYPE_BE);
                                break;
-                       case ST_F_RATE:
+                       case ST_I_PX_RATE:
                                metric = mkf_u32(0, read_freq_ctr(&px->be_sess_per_sec));
                                break;
-                       case ST_F_RATE_MAX:
+                       case ST_I_PX_RATE_MAX:
                                metric = mkf_u32(0, px->be_counters.sps_max);
                                break;
-                       case ST_F_COOKIE:
+                       case ST_I_PX_COOKIE:
                                if (flags & STAT_SHLGNDS && px->cookie_name)
                                        metric = mkf_str(FO_CONFIG|FN_NAME|FS_SERVICE, px->cookie_name);
                                break;
-                       case ST_F_ALGO:
+                       case ST_I_PX_ALGO:
                                if (flags & STAT_SHLGNDS)
                                        metric = mkf_str(FO_CONFIG|FS_SERVICE, backend_lb_algo_str(px->lbprm.algo & BE_LB_ALGO));
                                break;
-                       case ST_F_REQ_TOT:
+                       case ST_I_PX_REQ_TOT:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.cum_req);
                                break;
-                       case ST_F_HRSP_1XX:
+                       case ST_I_PX_HRSP_1XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[1]);
                                break;
-                       case ST_F_HRSP_2XX:
+                       case ST_I_PX_HRSP_2XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[2]);
                                break;
-                       case ST_F_HRSP_3XX:
+                       case ST_I_PX_HRSP_3XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[3]);
                                break;
-                       case ST_F_HRSP_4XX:
+                       case ST_I_PX_HRSP_4XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[4]);
                                break;
-                       case ST_F_HRSP_5XX:
+                       case ST_I_PX_HRSP_5XX:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[5]);
                                break;
-                       case ST_F_HRSP_OTHER:
+                       case ST_I_PX_HRSP_OTHER:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[0]);
                                break;
-                       case ST_F_CACHE_LOOKUPS:
+                       case ST_I_PX_CACHE_LOOKUPS:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.cache_lookups);
                                break;
-                       case ST_F_CACHE_HITS:
+                       case ST_I_PX_CACHE_HITS:
                                if (px->mode == PR_MODE_HTTP)
                                        metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.cache_hits);
                                break;
-                       case ST_F_CLI_ABRT:
+                       case ST_I_PX_CLI_ABRT:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.cli_aborts);
                                break;
-                       case ST_F_SRV_ABRT:
+                       case ST_I_PX_SRV_ABRT:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.srv_aborts);
                                break;
-                       case ST_F_COMP_IN:
+                       case ST_I_PX_COMP_IN:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.comp_in[COMP_DIR_RES]);
                                break;
-                       case ST_F_COMP_OUT:
+                       case ST_I_PX_COMP_OUT:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.comp_out[COMP_DIR_RES]);
                                break;
-                       case ST_F_COMP_BYP:
+                       case ST_I_PX_COMP_BYP:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.comp_byp[COMP_DIR_RES]);
                                break;
-                       case ST_F_COMP_RSP:
+                       case ST_I_PX_COMP_RSP:
                                metric = mkf_u64(FN_COUNTER, px->be_counters.p.http.comp_rsp);
                                break;
-                       case ST_F_LASTSESS:
+                       case ST_I_PX_LASTSESS:
                                metric = mkf_s32(FN_AGE, be_lastsession(px));
                                break;
-                       case ST_F_QTIME:
+                       case ST_I_PX_QTIME:
                                metric = mkf_u32(FN_AVG, swrate_avg(px->be_counters.q_time, be_samples_window));
                                break;
-                       case ST_F_CTIME:
+                       case ST_I_PX_CTIME:
                                metric = mkf_u32(FN_AVG, swrate_avg(px->be_counters.c_time, be_samples_window));
                                break;
-                       case ST_F_RTIME:
+                       case ST_I_PX_RTIME:
                                metric = mkf_u32(FN_AVG, swrate_avg(px->be_counters.d_time, be_samples_window));
                                break;
-                       case ST_F_TTIME:
+                       case ST_I_PX_TTIME:
                                metric = mkf_u32(FN_AVG, swrate_avg(px->be_counters.t_time, be_samples_window));
                                break;
-                       case ST_F_QT_MAX:
+                       case ST_I_PX_QT_MAX:
                                metric = mkf_u32(FN_MAX, px->be_counters.qtime_max);
                                break;
-                       case ST_F_CT_MAX:
+                       case ST_I_PX_CT_MAX:
                                metric = mkf_u32(FN_MAX, px->be_counters.ctime_max);
                                break;
-                       case ST_F_RT_MAX:
+                       case ST_I_PX_RT_MAX:
                                metric = mkf_u32(FN_MAX, px->be_counters.dtime_max);
                                break;
-                       case ST_F_TT_MAX:
+                       case ST_I_PX_TT_MAX:
                                metric = mkf_u32(FN_MAX, px->be_counters.ttime_max);
                                break;
                        default:
@@ -1857,7 +1857,7 @@ static int stats_dump_be_stats(struct stconn *sc, struct proxy *px)
        struct show_stat_ctx *ctx = appctx->svcctx;
        struct field *stats = stat_l[STATS_DOMAIN_PROXY];
        struct stats_module *mod;
-       size_t stats_count = ST_F_TOTAL_FIELDS;
+       size_t stats_count = ST_I_PX_MAX;
 
        if (!(px->cap & PR_CAP_BE))
                return 0;
@@ -1867,7 +1867,7 @@ static int stats_dump_be_stats(struct stconn *sc, struct proxy *px)
 
        memset(stats, 0, sizeof(struct field) * stat_count[STATS_DOMAIN_PROXY]);
 
-       if (!stats_fill_be_stats(px, ctx->flags, stats, ST_F_TOTAL_FIELDS, NULL))
+       if (!stats_fill_be_stats(px, ctx->flags, stats, ST_I_PX_MAX, NULL))
                return 0;
 
        list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
@@ -2819,11 +2819,11 @@ void stats_register_module(struct stats_module *m)
 static int allocate_stats_px_postcheck(void)
 {
        struct stats_module *mod;
-       size_t i = ST_F_TOTAL_FIELDS;
+       size_t i = ST_I_PX_MAX;
        int err_code = 0;
        struct proxy *px;
 
-       stat_count[STATS_DOMAIN_PROXY] += ST_F_TOTAL_FIELDS;
+       stat_count[STATS_DOMAIN_PROXY] += ST_I_PX_MAX;
 
        stat_f[STATS_DOMAIN_PROXY] = malloc(stat_count[STATS_DOMAIN_PROXY] * sizeof(struct name_desc));
        if (!stat_f[STATS_DOMAIN_PROXY]) {
@@ -2832,8 +2832,8 @@ static int allocate_stats_px_postcheck(void)
                return err_code;
        }
 
-       memcpy(stat_f[STATS_DOMAIN_PROXY], stat_fields,
-              ST_F_TOTAL_FIELDS * sizeof(struct name_desc));
+       memcpy(stat_f[STATS_DOMAIN_PROXY], metrics_px,
+              ST_I_PX_MAX * sizeof(struct name_desc));
 
        list_for_each_entry(mod, &stats_module_list[STATS_DOMAIN_PROXY], list) {
                memcpy(stat_f[STATS_DOMAIN_PROXY] + i,