]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: stats: convert counters to new column definition
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 3 Apr 2024 15:20:50 +0000 (17:20 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 26 Apr 2024 08:20:57 +0000 (10:20 +0200)
Convert most of proxy counters statistics to new "struct stat_col"
definition. Remove their corresponding switch..case entries in
stats_fill_*_line() functions. Their value are automatically calculate
via me_generate_field() invocation.

Along with this, also complete stcol_hide() when some stats should be
hidden.

Only a few counters where not converted. This is because they rely on
values stored outside of fe/be_counters structure, which
me_generate_field() cannot use for now.

include/haproxy/stats-t.h
src/stats.c

index bfd98cf202c2dcbc1db4a1cf011ebdb8d4d5a052..61ac86d4c89cc378655ec24607bf6c15ac1f03cd 100644 (file)
@@ -543,6 +543,16 @@ enum stats_domain_px_cap {
        STATS_PX_CAP_MASK = 0xff
 };
 
+/* Shorcut names for enum stats_domain_px_cap only for declaration convenience */
+#define STATS_PX_CAP_LFBS (STATS_PX_CAP_MASK)
+#define STATS_PX_CAP_LFB_ (STATS_PX_CAP_FE|STATS_PX_CAP_BE|STATS_PX_CAP_LI)
+#define STATS_PX_CAP_LF__ (STATS_PX_CAP_FE|STATS_PX_CAP_LI)
+#define STATS_PX_CAP__FBS (STATS_PX_CAP_FE|STATS_PX_CAP_BE|STATS_PX_CAP_SRV)
+#define STATS_PX_CAP__FB_ (STATS_PX_CAP_FE|STATS_PX_CAP_BE)
+#define STATS_PX_CAP__F__ (STATS_PX_CAP_FE)
+#define STATS_PX_CAP___BS (STATS_PX_CAP_BE|STATS_PX_CAP_SRV)
+#define STATS_PX_CAP____S (STATS_PX_CAP_SRV)
+
 /* the context of a "show stat" command in progress on the CLI or the stats applet */
 struct show_stat_ctx {
        struct proxy *http_px;  /* parent proxy of the current applet (only relevant for HTTP applet) */
index 48efc934cbb7e6d7140dbc1107556ad4456c2ff0..755b956221dd750926e9da3369646395208965c9 100644 (file)
@@ -210,22 +210,22 @@ const struct stat_col stat_cols_px[ST_I_PX_MAX] = {
        [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_STOT]          = ME_NEW_PX("stot",          FN_COUNTER, FF_U64, cum_sess,               STATS_PX_CAP_LFBS, "Total number of sessions since process started"),
+       [ST_I_PX_BIN]           = ME_NEW_PX("bin",           FN_COUNTER, FF_U64, bytes_in,               STATS_PX_CAP_LFBS, "Total number of request bytes since process started"),
+       [ST_I_PX_BOUT]          = ME_NEW_PX("bout",          FN_COUNTER, FF_U64, bytes_out,              STATS_PX_CAP_LFBS, "Total number of response bytes since process started"),
+       [ST_I_PX_DREQ]          = ME_NEW_PX("dreq",          FN_COUNTER, FF_U64, denied_req,             STATS_PX_CAP_LFB_, "Total number of denied requests since process started"),
+       [ST_I_PX_DRESP]         = ME_NEW_PX("dresp",         FN_COUNTER, FF_U64, denied_resp,            STATS_PX_CAP_LFBS, "Total number of denied responses since process started"),
+       [ST_I_PX_EREQ]          = ME_NEW_FE("ereq",          FN_COUNTER, FF_U64, failed_req,             STATS_PX_CAP_LF__, "Total number of invalid requests since process started"),
+       [ST_I_PX_ECON]          = ME_NEW_BE("econ",          FN_COUNTER, FF_U64, failed_conns,           STATS_PX_CAP___BS, "Total number of failed connections to server since the worker process started"),
+       [ST_I_PX_ERESP]         = ME_NEW_BE("eresp",         FN_COUNTER, FF_U64, failed_resp,            STATS_PX_CAP___BS, "Total number of invalid responses since the worker process started"),
+       [ST_I_PX_WRETR]         = ME_NEW_BE("wretr",         FN_COUNTER, FF_U64, retries,                STATS_PX_CAP___BS, "Total number of server connection retries since the worker process started"),
+       [ST_I_PX_WREDIS]        = ME_NEW_BE("wredis",        FN_COUNTER, FF_U64, redispatches,           STATS_PX_CAP___BS, "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_CHKFAIL]       = ME_NEW_BE("chkfail",       FN_COUNTER, FF_U64, failed_checks,          STATS_PX_CAP____S, "Total number of failed individual health checks per server/backend, since the worker process started"),
+       [ST_I_PX_CHKDOWN]       = ME_NEW_BE("chkdown",       FN_COUNTER, FF_U64, down_trans,             STATS_PX_CAP___BS, "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)" },
@@ -233,7 +233,7 @@ const struct stat_col stat_cols_px[ST_I_PX_MAX] = {
        [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_LBTOT]         = ME_NEW_BE("lbtot",         FN_COUNTER, FF_U64, cum_lbconn,             STATS_PX_CAP_LFBS, "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)" },
@@ -242,22 +242,22 @@ const struct stat_col stat_cols_px[ST_I_PX_MAX] = {
        [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_HRSP_1XX]      = ME_NEW_PX("hrsp_1xx",      FN_COUNTER, FF_U64, p.http.rsp[1],          STATS_PX_CAP__FBS, "Total number of HTTP responses with status 100-199 returned by this object since the worker process started"),
+       [ST_I_PX_HRSP_2XX]      = ME_NEW_PX("hrsp_2xx",      FN_COUNTER, FF_U64, p.http.rsp[2],          STATS_PX_CAP__FBS, "Total number of HTTP responses with status 200-299 returned by this object since the worker process started"),
+       [ST_I_PX_HRSP_3XX]      = ME_NEW_PX("hrsp_3xx",      FN_COUNTER, FF_U64, p.http.rsp[3],          STATS_PX_CAP__FBS, "Total number of HTTP responses with status 300-399 returned by this object since the worker process started"),
+       [ST_I_PX_HRSP_4XX]      = ME_NEW_PX("hrsp_4xx",      FN_COUNTER, FF_U64, p.http.rsp[4],          STATS_PX_CAP__FBS, "Total number of HTTP responses with status 400-499 returned by this object since the worker process started"),
+       [ST_I_PX_HRSP_5XX]      = ME_NEW_PX("hrsp_5xx",      FN_COUNTER, FF_U64, p.http.rsp[5],          STATS_PX_CAP__FBS, "Total number of HTTP responses with status 500-599 returned by this object since the worker process started"),
+       [ST_I_PX_HRSP_OTHER]    = ME_NEW_PX("hrsp_other",    FN_COUNTER, FF_U64, p.http.rsp[0],          STATS_PX_CAP__FBS, "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]      = ME_NEW_BE("hanafail",      FN_COUNTER, FF_U64, failed_hana,            STATS_PX_CAP_SRV, "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_CLI_ABRT]      = ME_NEW_BE("cli_abrt",      FN_COUNTER, FF_U64, cli_aborts,             STATS_PX_CAP_LFBS, "Total number of requests or connections aborted by the client since the worker process started"),
+       [ST_I_PX_SRV_ABRT]      = ME_NEW_BE("srv_abrt",      FN_COUNTER, FF_U64, srv_aborts,             STATS_PX_CAP_LFBS, "Total number of requests or connections aborted by the server since the worker process started"),
+       [ST_I_PX_COMP_IN]       = ME_NEW_PX("comp_in",       FN_COUNTER, FF_U64, comp_in[COMP_DIR_RES],  STATS_PX_CAP__FB_, "Total number of bytes submitted to the HTTP compressor for this object since the worker process started"),
+       [ST_I_PX_COMP_OUT]      = ME_NEW_PX("comp_out",      FN_COUNTER, FF_U64, comp_out[COMP_DIR_RES], STATS_PX_CAP__FB_, "Total number of bytes emitted by the HTTP compressor for this object since the worker process started"),
+       [ST_I_PX_COMP_BYP]      = ME_NEW_PX("comp_byp",      FN_COUNTER, FF_U64, comp_byp[COMP_DIR_RES], STATS_PX_CAP__FB_, "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]      = ME_NEW_PX("comp_rsp",      FN_COUNTER, FF_U64, p.http.comp_rsp,        STATS_PX_CAP__FB_, "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)" },
@@ -282,22 +282,22 @@ const struct stat_col stat_cols_px[ST_I_PX_MAX] = {
        [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_CONN_TOT]      = ME_NEW_FE("conn_tot",      FN_COUNTER, FF_U64, cum_conn,               STATS_PX_CAP_LF__, "Total number of new connections accepted on this frontend since the worker process started"),
+       [ST_I_PX_INTERCEPTED]   = ME_NEW_FE("intercepted",   FN_COUNTER, FF_U64, intercepted_req,        STATS_PX_CAP__F__, "Total number of HTTP requests intercepted on the frontend (redirects/stats/services) since the worker process started"),
+       [ST_I_PX_DCON]          = ME_NEW_FE("dcon",          FN_COUNTER, FF_U64, denied_conn,            STATS_PX_CAP_LF__, "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]          = ME_NEW_FE("dses",          FN_COUNTER, FF_U64, denied_sess,            STATS_PX_CAP_LF__, "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]          = ME_NEW_PX("wrew",          FN_COUNTER, FF_U64, failed_rewrites,        STATS_PX_CAP_LFBS, "Total number of failed HTTP header rewrites since the worker process started"),
+       [ST_I_PX_CONNECT]       = ME_NEW_BE("connect",       FN_COUNTER, FF_U64, connect,                STATS_PX_CAP___BS, "Total number of outgoing connection attempts on this backend/server since the worker process started"),
+       [ST_I_PX_REUSE]         = ME_NEW_BE("reuse",         FN_COUNTER, FF_U64, reuse,                  STATS_PX_CAP___BS, "Total number of reused connection on this backend/server since the worker process started"),
+       [ST_I_PX_CACHE_LOOKUPS] = ME_NEW_PX("cache_lookups", FN_COUNTER, FF_U64, p.http.cache_lookups,   STATS_PX_CAP__FB_, "Total number of HTTP requests looked up in the cache on this frontend/backend since the worker process started"),
+       [ST_I_PX_CACHE_HITS]    = ME_NEW_PX("cache_hits",    FN_COUNTER, FF_U64, p.http.cache_hits,      STATS_PX_CAP__FB_, "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_EINT]          = ME_NEW_PX("eint",          FN_COUNTER, FF_U64, internal_errors,        STATS_PX_CAP_LFBS, "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"},
@@ -308,13 +308,13 @@ const struct stat_col stat_cols_px[ST_I_PX_MAX] = {
        [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_H1SESS]        = ME_NEW_FE("h1sess",        FN_COUNTER, FF_U64, cum_sess_ver[0],        STATS_PX_CAP__F__, "Total number of HTTP/1 sessions since process started"),
+       [ST_I_PX_H2SESS]        = ME_NEW_FE("h2sess",        FN_COUNTER, FF_U64, cum_sess_ver[1],        STATS_PX_CAP__F__, "Total number of HTTP/2 sessions since process started"),
+       [ST_I_PX_H3SESS]        = ME_NEW_FE("h3sess",        FN_COUNTER, FF_U64, cum_sess_ver[2],        STATS_PX_CAP__F__, "Total number of HTTP/3 sessions since process started"),
+       [ST_I_PX_REQ_OTHER]     = ME_NEW_FE("req_other",     FN_COUNTER, FF_U64, p.http.cum_req[0],      STATS_PX_CAP__F__, "Total number of sessions other than HTTP processed by this object since the worker process started"),
+       [ST_I_PX_H1REQ]         = ME_NEW_FE("h1req",         FN_COUNTER, FF_U64, p.http.cum_req[1],      STATS_PX_CAP__F__, "Total number of HTTP/1 sessions processed by this object since the worker process started"),
+       [ST_I_PX_H2REQ]         = ME_NEW_FE("h2req",         FN_COUNTER, FF_U64, p.http.cum_req[2],      STATS_PX_CAP__F__, "Total number of hTTP/2 sessions processed by this object since the worker process started"),
+       [ST_I_PX_H3REQ]         = ME_NEW_FE("h3req",         FN_COUNTER, FF_U64, p.http.cum_req[3],      STATS_PX_CAP__F__, "Total number of HTTP/3 sessions processed by this object since the worker process started"),
        [ST_I_PX_PROTO]                         = { .name = "proto",                       .desc = "Protocol" },
 };
 
@@ -642,8 +642,8 @@ int stats_dump_one_line(const struct field *line, size_t stats_count,
  */
 static int stcol_hide(enum stat_idx_px idx, enum obj_type *objt)
 {
-       struct proxy *px __maybe_unused;
-       struct server *srv = NULL;
+       struct proxy *px;
+       struct server *srv = NULL, *ref;
        struct listener *li = NULL;
 
        switch (obj_type(objt)) {
@@ -664,6 +664,28 @@ static int stcol_hide(enum stat_idx_px idx, enum obj_type *objt)
        }
 
        switch (idx) {
+       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_INTERCEPTED:
+       case ST_I_PX_CACHE_LOOKUPS:
+       case ST_I_PX_CACHE_HITS:
+               return px->mode != PR_MODE_HTTP;
+
+       case ST_I_PX_CHKFAIL:
+       case ST_I_PX_CHKDOWN:
+               return srv && !(srv->check.state & CHK_ST_ENABLED);
+
+       case ST_I_PX_HANAFAIL:
+               BUG_ON(!srv); /* HANAFAIL is only defined for server scope */
+
+               ref = srv->track ? srv->track : srv;
+               while (ref->track)
+                       ref = ref->track;
+               return !ref->observe;
+
        default:
                return 0;
        }
@@ -760,30 +782,6 @@ int stats_fill_fe_line(struct proxy *px, struct field *line, int len,
                        case ST_I_PX_SLIM:
                                field = mkf_u32(FO_CONFIG|FN_LIMIT, px->maxconn);
                                break;
-                       case ST_I_PX_STOT:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.cum_sess);
-                               break;
-                       case ST_I_PX_BIN:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.bytes_in);
-                               break;
-                       case ST_I_PX_BOUT:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.bytes_out);
-                               break;
-                       case ST_I_PX_DREQ:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.denied_req);
-                               break;
-                       case ST_I_PX_DRESP:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.denied_resp);
-                               break;
-                       case ST_I_PX_EREQ:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.failed_req);
-                               break;
-                       case ST_I_PX_DCON:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.denied_conn);
-                               break;
-                       case ST_I_PX_DSES:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.denied_sess);
-                               break;
                        case ST_I_PX_STATUS: {
                                const char *state;
 
@@ -817,48 +815,6 @@ int stats_fill_fe_line(struct proxy *px, struct field *line, int len,
                        case ST_I_PX_RATE_MAX:
                                field = mkf_u32(FN_MAX, px->fe_counters.sps_max);
                                break;
-                       case ST_I_PX_WREW:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.failed_rewrites);
-                               break;
-                       case ST_I_PX_EINT:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.internal_errors);
-                               break;
-                       case ST_I_PX_HRSP_1XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[1]);
-                               break;
-                       case ST_I_PX_HRSP_2XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[2]);
-                               break;
-                       case ST_I_PX_HRSP_3XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[3]);
-                               break;
-                       case ST_I_PX_HRSP_4XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[4]);
-                               break;
-                       case ST_I_PX_HRSP_5XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[5]);
-                               break;
-                       case ST_I_PX_HRSP_OTHER:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[0]);
-                               break;
-                       case ST_I_PX_INTERCEPTED:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->fe_counters.intercepted_req);
-                               break;
-                       case ST_I_PX_CACHE_LOOKUPS:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cache_lookups);
-                               break;
-                       case ST_I_PX_CACHE_HITS:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cache_hits);
-                               break;
                        case ST_I_PX_REQ_RATE:
                                field = mkf_u32(FN_RATE, read_freq_ctr(&px->fe_req_per_sec));
                                break;
@@ -877,27 +833,12 @@ int stats_fill_fe_line(struct proxy *px, struct field *line, int len,
                                field = mkf_u64(FN_COUNTER, total_req);
                                break;
                        }
-                       case ST_I_PX_COMP_IN:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.comp_in[COMP_DIR_RES]);
-                               break;
-                       case ST_I_PX_COMP_OUT:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.comp_out[COMP_DIR_RES]);
-                               break;
-                       case ST_I_PX_COMP_BYP:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.comp_byp[COMP_DIR_RES]);
-                               break;
-                       case ST_I_PX_COMP_RSP:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.comp_rsp);
-                               break;
                        case ST_I_PX_CONN_RATE:
                                field = mkf_u32(FN_RATE, read_freq_ctr(&px->fe_conn_per_sec));
                                break;
                        case ST_I_PX_CONN_RATE_MAX:
                                field = mkf_u32(FN_MAX, px->fe_counters.cps_max);
                                break;
-                       case ST_I_PX_CONN_TOT:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.cum_conn);
-                               break;
                        case ST_I_PX_SESS_OTHER: {
                                int i;
                                uint64_t total_sess;
@@ -911,27 +852,6 @@ int stats_fill_fe_line(struct proxy *px, struct field *line, int len,
                                field = mkf_u64(FN_COUNTER, total_sess);
                                break;
                        }
-                       case ST_I_PX_H1SESS:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.cum_sess_ver[0]);
-                               break;
-                       case ST_I_PX_H2SESS:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.cum_sess_ver[1]);
-                               break;
-                       case ST_I_PX_H3SESS:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.cum_sess_ver[2]);
-                               break;
-                       case ST_I_PX_REQ_OTHER:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cum_req[0]);
-                               break;
-                       case ST_I_PX_H1REQ:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cum_req[1]);
-                               break;
-                       case ST_I_PX_H2REQ:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cum_req[2]);
-                               break;
-                       case ST_I_PX_H3REQ:
-                               field = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cum_req[3]);
-                               break;
                        default:
                                /* not used for frontends. If a specific field
                                 * is requested, return an error. Otherwise continue.
@@ -1037,30 +957,6 @@ int stats_fill_li_line(struct proxy *px, struct listener *l, int flags,
                        case ST_I_PX_SLIM:
                                field = mkf_u32(FO_CONFIG|FN_LIMIT, l->bind_conf->maxconn);
                                break;
-                       case ST_I_PX_STOT:
-                               field = mkf_u64(FN_COUNTER, l->counters->cum_sess);
-                               break;
-                       case ST_I_PX_BIN:
-                               field = mkf_u64(FN_COUNTER, l->counters->bytes_in);
-                               break;
-                       case ST_I_PX_BOUT:
-                               field = mkf_u64(FN_COUNTER, l->counters->bytes_out);
-                               break;
-                       case ST_I_PX_DREQ:
-                               field = mkf_u64(FN_COUNTER, l->counters->denied_req);
-                               break;
-                       case ST_I_PX_DRESP:
-                               field = mkf_u64(FN_COUNTER, l->counters->denied_resp);
-                               break;
-                       case ST_I_PX_EREQ:
-                               field = mkf_u64(FN_COUNTER, l->counters->failed_req);
-                               break;
-                       case ST_I_PX_DCON:
-                               field = mkf_u64(FN_COUNTER, l->counters->denied_conn);
-                               break;
-                       case ST_I_PX_DSES:
-                               field = mkf_u64(FN_COUNTER, l->counters->denied_sess);
-                               break;
                        case ST_I_PX_STATUS:
                                field = mkf_str(FO_STATUS, li_status_st[get_li_status(l)]);
                                break;
@@ -1076,15 +972,6 @@ int stats_fill_li_line(struct proxy *px, struct listener *l, int flags,
                        case ST_I_PX_TYPE:
                                field = mkf_u32(FO_CONFIG|FS_SERVICE, STATS_TYPE_SO);
                                break;
-                       case ST_I_PX_CONN_TOT:
-                               field = mkf_u64(FN_COUNTER, l->counters->cum_conn);
-                               break;
-                       case ST_I_PX_WREW:
-                               field = mkf_u64(FN_COUNTER, l->counters->failed_rewrites);
-                               break;
-                       case ST_I_PX_EINT:
-                               field = mkf_u64(FN_COUNTER, l->counters->internal_errors);
-                               break;
                        case ST_I_PX_ADDR:
                                if (flags & STAT_F_SHLGNDS) {
                                        char str[INET6_ADDRSTRLEN];
@@ -1333,42 +1220,6 @@ int stats_fill_sv_line(struct proxy *px, struct server *sv, int flags,
                                if (sv->max_idle_conns != -1)
                                        field = mkf_u32(FO_CONFIG|FN_LIMIT, sv->max_idle_conns);
                                break;
-                       case ST_I_PX_STOT:
-                               field = mkf_u64(FN_COUNTER, sv->counters.cum_sess);
-                               break;
-                       case ST_I_PX_BIN:
-                               field = mkf_u64(FN_COUNTER, sv->counters.bytes_in);
-                               break;
-                       case ST_I_PX_BOUT:
-                               field = mkf_u64(FN_COUNTER, sv->counters.bytes_out);
-                               break;
-                       case ST_I_PX_DRESP:
-                               field = mkf_u64(FN_COUNTER, sv->counters.denied_resp);
-                               break;
-                       case ST_I_PX_ECON:
-                               field = mkf_u64(FN_COUNTER, sv->counters.failed_conns);
-                               break;
-                       case ST_I_PX_ERESP:
-                               field = mkf_u64(FN_COUNTER, sv->counters.failed_resp);
-                               break;
-                       case ST_I_PX_WRETR:
-                               field = mkf_u64(FN_COUNTER, sv->counters.retries);
-                               break;
-                       case ST_I_PX_WREDIS:
-                               field = mkf_u64(FN_COUNTER, sv->counters.redispatches);
-                               break;
-                       case ST_I_PX_WREW:
-                               field = mkf_u64(FN_COUNTER, sv->counters.failed_rewrites);
-                               break;
-                       case ST_I_PX_EINT:
-                               field = mkf_u64(FN_COUNTER, sv->counters.internal_errors);
-                               break;
-                       case ST_I_PX_CONNECT:
-                               field = mkf_u64(FN_COUNTER, sv->counters.connect);
-                               break;
-                       case ST_I_PX_REUSE:
-                               field = mkf_u64(FN_COUNTER, sv->counters.reuse);
-                               break;
                        case ST_I_PX_IDLE_CONN_CUR:
                                field = mkf_u32(0, sv->curr_idle_nb);
                                break;
@@ -1412,14 +1263,6 @@ int stats_fill_sv_line(struct proxy *px, struct server *sv, int flags,
                        case ST_I_PX_BCK:
                                field = mkf_u32(FO_STATUS, (sv->flags & SRV_F_BACKUP) ? 1 : 0);
                                break;
-                       case ST_I_PX_CHKFAIL:
-                               if (sv->check.state & CHK_ST_ENABLED)
-                                       field = mkf_u64(FN_COUNTER, sv->counters.failed_checks);
-                               break;
-                       case ST_I_PX_CHKDOWN:
-                               if (sv->check.state & CHK_ST_ENABLED)
-                                       field = mkf_u64(FN_COUNTER, sv->counters.down_trans);
-                               break;
                        case ST_I_PX_DOWNTIME:
                                if (sv->check.state & CHK_ST_ENABLED)
                                        field = mkf_u32(FN_COUNTER, srv_downtime(sv));
@@ -1444,9 +1287,6 @@ int stats_fill_sv_line(struct proxy *px, struct server *sv, int flags,
                                if (sv->cur_state == SRV_ST_STARTING && !server_is_draining(sv))
                                        field = mkf_u32(FN_AVG, server_throttle_rate(sv));
                                break;
-                       case ST_I_PX_LBTOT:
-                               field = mkf_u64(FN_COUNTER, sv->counters.cum_lbconn);
-                               break;
                        case ST_I_PX_TRACKED:
                                if (sv->track) {
                                        char *fld_track = chunk_newstr(out);
@@ -1550,40 +1390,6 @@ int stats_fill_sv_line(struct proxy *px, struct server *sv, int flags,
                                if (px->mode == PR_MODE_HTTP)
                                        field = mkf_u64(FN_COUNTER, sv->counters.p.http.cum_req);
                                break;
-                       case ST_I_PX_HRSP_1XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[1]);
-                               break;
-                       case ST_I_PX_HRSP_2XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[2]);
-                               break;
-                       case ST_I_PX_HRSP_3XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[3]);
-                               break;
-                       case ST_I_PX_HRSP_4XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[4]);
-                               break;
-                       case ST_I_PX_HRSP_5XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[5]);
-                               break;
-                       case ST_I_PX_HRSP_OTHER:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, sv->counters.p.http.rsp[0]);
-                               break;
-                       case ST_I_PX_HANAFAIL:
-                               if (ref->observe)
-                                       field = mkf_u64(FN_COUNTER, sv->counters.failed_hana);
-                               break;
-                       case ST_I_PX_CLI_ABRT:
-                               field = mkf_u64(FN_COUNTER, sv->counters.cli_aborts);
-                               break;
-                       case ST_I_PX_SRV_ABRT:
-                               field = mkf_u64(FN_COUNTER, sv->counters.srv_aborts);
-                               break;
                        case ST_I_PX_LASTSESS:
                                field = mkf_s32(FN_AGE, srv_lastsession(sv));
                                break;
@@ -1792,45 +1598,6 @@ int stats_fill_be_line(struct proxy *px, int flags, struct field *line, int len,
                        case ST_I_PX_SLIM:
                                field = mkf_u32(FO_CONFIG|FN_LIMIT, px->fullconn);
                                break;
-                       case ST_I_PX_STOT:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.cum_sess);
-                               break;
-                       case ST_I_PX_BIN:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.bytes_in);
-                               break;
-                       case ST_I_PX_BOUT:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.bytes_out);
-                               break;
-                       case ST_I_PX_DREQ:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.denied_req);
-                               break;
-                       case ST_I_PX_DRESP:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.denied_resp);
-                               break;
-                       case ST_I_PX_ECON:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.failed_conns);
-                               break;
-                       case ST_I_PX_ERESP:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.failed_resp);
-                               break;
-                       case ST_I_PX_WRETR:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.retries);
-                               break;
-                       case ST_I_PX_WREDIS:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.redispatches);
-                               break;
-                       case ST_I_PX_WREW:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.failed_rewrites);
-                               break;
-                       case ST_I_PX_EINT:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.internal_errors);
-                               break;
-                       case ST_I_PX_CONNECT:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.connect);
-                               break;
-                       case ST_I_PX_REUSE:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.reuse);
-                               break;
                        case ST_I_PX_STATUS:
                                fld = chunk_newstr(out);
                                chunk_appendf(out, "%s", (px->lbprm.tot_weight > 0 || !px->srv) ? "UP" : "DOWN");
@@ -1857,9 +1624,6 @@ int stats_fill_be_line(struct proxy *px, int flags, struct field *line, int len,
                        case ST_I_PX_BCK:
                                field = mkf_u32(0, px->srv_bck);
                                break;
-                       case ST_I_PX_CHKDOWN:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.down_trans);
-                               break;
                        case ST_I_PX_LASTCHG:
                                field = mkf_u32(FN_AGE, ns_to_sec(now_ns) - px->last_change);
                                break;
@@ -1876,9 +1640,6 @@ int stats_fill_be_line(struct proxy *px, int flags, struct field *line, int len,
                        case ST_I_PX_SID:
                                field = mkf_u32(FO_KEY|FS_SERVICE, 0);
                                break;
-                       case ST_I_PX_LBTOT:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.cum_lbconn);
-                               break;
                        case ST_I_PX_TYPE:
                                field = mkf_u32(FO_CONFIG|FS_SERVICE, STATS_TYPE_BE);
                                break;
@@ -1900,56 +1661,6 @@ int stats_fill_be_line(struct proxy *px, int flags, struct field *line, int len,
                                if (px->mode == PR_MODE_HTTP)
                                        field = mkf_u64(FN_COUNTER, px->be_counters.p.http.cum_req);
                                break;
-                       case ST_I_PX_HRSP_1XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[1]);
-                               break;
-                       case ST_I_PX_HRSP_2XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[2]);
-                               break;
-                       case ST_I_PX_HRSP_3XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[3]);
-                               break;
-                       case ST_I_PX_HRSP_4XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[4]);
-                               break;
-                       case ST_I_PX_HRSP_5XX:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[5]);
-                               break;
-                       case ST_I_PX_HRSP_OTHER:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[0]);
-                               break;
-                       case ST_I_PX_CACHE_LOOKUPS:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->be_counters.p.http.cache_lookups);
-                               break;
-                       case ST_I_PX_CACHE_HITS:
-                               if (px->mode == PR_MODE_HTTP)
-                                       field = mkf_u64(FN_COUNTER, px->be_counters.p.http.cache_hits);
-                               break;
-                       case ST_I_PX_CLI_ABRT:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.cli_aborts);
-                               break;
-                       case ST_I_PX_SRV_ABRT:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.srv_aborts);
-                               break;
-                       case ST_I_PX_COMP_IN:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.comp_in[COMP_DIR_RES]);
-                               break;
-                       case ST_I_PX_COMP_OUT:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.comp_out[COMP_DIR_RES]);
-                               break;
-                       case ST_I_PX_COMP_BYP:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.comp_byp[COMP_DIR_RES]);
-                               break;
-                       case ST_I_PX_COMP_RSP:
-                               field = mkf_u64(FN_COUNTER, px->be_counters.p.http.comp_rsp);
-                               break;
                        case ST_I_PX_LASTSESS:
                                field = mkf_s32(FN_AGE, be_lastsession(px));
                                break;