MINOR: stats: rename proxy stats

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.
This commit is contained in:
Amaury Denoyelle 2024-04-19 18:03:45 +02:00
parent 378d500caf
commit 8fc0b18087
8 changed files with 985 additions and 985 deletions

View 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;

View 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_*(),

View 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;

View 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

View 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);
}

View 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),
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_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));
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>");

View 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,

File diff suppressed because it is too large Load Diff