diff --git a/contrib/prometheus-exporter/service-prometheus.c b/contrib/prometheus-exporter/service-prometheus.c index 63ccdd155..790b2f88e 100644 --- a/contrib/prometheus-exporter/service-prometheus.c +++ b/contrib/prometheus-exporter/service-prometheus.c @@ -1325,30 +1325,14 @@ static int promex_dump_global_metrics(struct appctx *appctx, struct htx *htx) size_t max = htx_get_max_blksz(htx, channel_htx_recv_max(chn, htx)); int ret = 1; -#ifdef USE_OPENSSL - int ssl_sess_rate = read_freq_ctr(&global.ssl_per_sec); - int ssl_key_rate = read_freq_ctr(&global.ssl_fe_keys_per_sec); - int ssl_reuse = 0; + if (!stats_fill_info(info, INF_TOTAL_FIELDS)) + return -1; - if (ssl_key_rate < ssl_sess_rate) { - /* count the ssl reuse ratio and avoid overflows in both directions */ - ssl_reuse = 100 - (100 * ssl_key_rate + (ssl_sess_rate - 1) / 2) / ssl_sess_rate; - } -#endif while (appctx->st2 && appctx->st2 < INF_TOTAL_FIELDS) { switch (appctx->st2) { case INF_BUILD_INFO: metric = mkf_u32(FN_GAUGE, 1); break; - case INF_NBTHREAD: - metric = mkf_u32(FO_CONFIG|FS_SERVICE, global.nbthread); - break; - case INF_NBPROC: - metric = mkf_u32(FO_CONFIG|FS_SERVICE, global.nbproc); - break; - case INF_PROCESS_NUM: - metric = mkf_u32(FO_KEY, relative_pid); - break; case INF_UPTIME_SEC: metric = mkf_u32(FN_DURATION, start_date.tv_sec); break; @@ -1361,171 +1345,14 @@ static int promex_dump_global_metrics(struct appctx *appctx, struct htx *htx) case INF_POOL_USED_MB: metric = mkf_u64(0, pool_total_used()); break; - case INF_POOL_FAILED: - metric = mkf_u32(FN_COUNTER, pool_total_failures()); - break; - case INF_ULIMIT_N: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.rlimit_nofile); - break; - case INF_MAXSOCK: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.maxsock); - break; - case INF_MAXCONN: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.maxconn); - break; - case INF_HARD_MAXCONN: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.hardmaxconn); - break; - case INF_CURR_CONN: - metric = mkf_u32(0, actconn); - break; - case INF_CUM_CONN: - metric = mkf_u32(FN_COUNTER, totalconn); - break; - case INF_CUM_REQ: - metric = mkf_u32(FN_COUNTER, global.req_count); - break; -#ifdef USE_OPENSSL - case INF_MAX_SSL_CONNS: - metric = mkf_u32(FN_MAX, global.maxsslconn); - break; - case INF_CURR_SSL_CONNS: - metric = mkf_u32(0, sslconns); - break; - case INF_CUM_SSL_CONNS: - metric = mkf_u32(FN_COUNTER, totalsslconns); - break; -#endif - case INF_MAXPIPES: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.maxpipes); - break; - case INF_PIPES_USED: - metric = mkf_u32(0, pipes_used); - break; - case INF_PIPES_FREE: - metric = mkf_u32(0, pipes_free); - break; - case INF_CONN_RATE: - metric = mkf_u32(FN_RATE, read_freq_ctr(&global.conn_per_sec)); - break; - case INF_CONN_RATE_LIMIT: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.cps_lim); - break; - case INF_MAX_CONN_RATE: - metric = mkf_u32(FN_MAX, global.cps_max); - break; - case INF_SESS_RATE: - metric = mkf_u32(FN_RATE, read_freq_ctr(&global.sess_per_sec)); - break; - case INF_SESS_RATE_LIMIT: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.sps_lim); - break; - case INF_MAX_SESS_RATE: - metric = mkf_u32(FN_RATE, global.sps_max); - break; -#ifdef USE_OPENSSL - case INF_SSL_RATE: - metric = mkf_u32(FN_RATE, ssl_sess_rate); - break; - case INF_SSL_RATE_LIMIT: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.ssl_lim); - break; - case INF_MAX_SSL_RATE: - metric = mkf_u32(FN_MAX, global.ssl_max); - break; - case INF_SSL_FRONTEND_KEY_RATE: - metric = mkf_u32(0, ssl_key_rate); - break; - case INF_SSL_FRONTEND_MAX_KEY_RATE: - metric = mkf_u32(FN_MAX, global.ssl_fe_keys_max); - break; - case INF_SSL_FRONTEND_SESSION_REUSE_PCT: - metric = mkf_u32(0, ssl_reuse); - break; - case INF_SSL_BACKEND_KEY_RATE: - metric = mkf_u32(FN_RATE, read_freq_ctr(&global.ssl_be_keys_per_sec)); - break; - case INF_SSL_BACKEND_MAX_KEY_RATE: - metric = mkf_u32(FN_MAX, global.ssl_be_keys_max); - break; - case INF_SSL_CACHE_LOOKUPS: - metric = mkf_u32(FN_COUNTER, global.shctx_lookups); - break; - case INF_SSL_CACHE_MISSES: - metric = mkf_u32(FN_COUNTER, global.shctx_misses); - break; -#endif - case INF_COMPRESS_BPS_IN: - metric = mkf_u32(FN_RATE, read_freq_ctr(&global.comp_bps_in)); - break; - case INF_COMPRESS_BPS_OUT: - metric = mkf_u32(FN_RATE, read_freq_ctr(&global.comp_bps_out)); - break; - case INF_COMPRESS_BPS_RATE_LIM: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.comp_rate_lim); - break; -#ifdef USE_ZLIB - case INF_ZLIB_MEM_USAGE: - metric = mkf_u32(0, zlib_used_memory); - break; - case INF_MAX_ZLIB_MEM_USAGE: - metric = mkf_u32(FO_CONFIG|FN_LIMIT, global.maxzlibmem); - break; -#endif - case INF_TASKS: - metric = mkf_u32(0, nb_tasks_cur); - break; - case INF_RUN_QUEUE: - metric = mkf_u32(0, tasks_run_queue_cur); - break; - case INF_IDLE_PCT: - metric = mkf_u32(FN_AVG, ti->idle_pct); - break; - case INF_STOPPING: - metric = mkf_u32(0, stopping); - break; - case INF_JOBS: - metric = mkf_u32(0, jobs); - break; - case INF_UNSTOPPABLE_JOBS: - metric = mkf_u32(0, unstoppable_jobs); - break; - case INF_LISTENERS: - metric = mkf_u32(0, listeners); - break; - case INF_ACTIVE_PEERS: - metric = mkf_u32(0, active_peers); - break; - case INF_CONNECTED_PEERS: - metric = mkf_u32(0, connected_peers); - break; - case INF_DROPPED_LOGS: - metric = mkf_u32(0, dropped_logs); - break; - case INF_BUSY_POLLING: - metric = mkf_u32(0, !!(global.tune.options & GTUNE_BUSY_POLLING)); - break; - case INF_FAILED_RESOLUTIONS: - metric = mkf_u32(0, dns_failed_resolutions); - break; - case INF_TOTAL_BYTES_OUT: - metric = mkf_u64(0, global.out_bytes); - break; - case INF_TOTAL_SPLICED_BYTES_OUT: - metric = mkf_u64(0, global.spliced_out_bytes); - break; - case INF_BYTES_OUT_RATE: - metric = mkf_u64(FN_RATE, (unsigned long long)read_freq_ctr(&global.out_32bps) * 32); - break; default: - goto next_metric; + metric = info[appctx->st2]; } if (!promex_dump_metric(appctx, htx, prefix, &metric, &out, max)) goto full; - next_metric: appctx->ctx.stats.flags |= PROMEX_FL_METRIC_HDR; appctx->st2 = promex_global_metrics[appctx->st2]; } diff --git a/include/haproxy/stats.h b/include/haproxy/stats.h index 6246b0405..136e7a416 100644 --- a/include/haproxy/stats.h +++ b/include/haproxy/stats.h @@ -37,7 +37,7 @@ extern const struct name_desc stat_fields[]; extern const struct name_desc info_fields[]; extern const char *stat_status_codes[]; extern struct applet http_stats_applet; - +extern THREAD_LOCAL struct field info[]; struct htx; int stats_putchk(struct channel *chn, struct htx *htx, struct buffer *chk); diff --git a/src/stats.c b/src/stats.c index 36e5c077a..4ddcd7e41 100644 --- a/src/stats.c +++ b/src/stats.c @@ -254,7 +254,7 @@ const struct name_desc stat_fields[ST_F_TOTAL_FIELDS] = { }; /* one line of info */ -static THREAD_LOCAL struct field info[INF_TOTAL_FIELDS]; +THREAD_LOCAL struct field info[INF_TOTAL_FIELDS]; /* description of statistics (static and dynamic) */ static struct name_desc *stat_f[STATS_DOMAIN_COUNT];