in order to prepare a possible merge of fields between haproxy stats and
prometheus, duplicate 3 fields:
  INF_MEMMAX
  INF_POOL_ALLOC
  INF_POOL_USED
Those were specifically named in MB unit which is not what prometheus
recommends. We therefore used them but changed the unit while doing the
calculation. It created a specific case for that, up to the description.
This patch:
- removes some possible confusion, i.e. using MB field for bytes
- will permit an easier merge of fields such as description

First consequence for now, is that we can remove the calculation on
prometheus side and move it on `fill_info`.

Signed-off-by: William Dauchy <wdau...@gmail.com>
---
 .../prometheus-exporter/service-prometheus.c  | 41 ++++++++-----------
 include/haproxy/stats-t.h                     |  3 ++
 src/stats.c                                   |  6 +++
 3 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/contrib/prometheus-exporter/service-prometheus.c 
b/contrib/prometheus-exporter/service-prometheus.c
index 790b2f88e..f636777bc 100644
--- a/contrib/prometheus-exporter/service-prometheus.c
+++ b/contrib/prometheus-exporter/service-prometheus.c
@@ -99,10 +99,10 @@ const int promex_global_metrics[INF_TOTAL_FIELDS] = {
        [INF_PROCESS_NUM]                    = INF_UPTIME_SEC,
        [INF_PID]                            = 0,
        [INF_UPTIME]                         = 0,
-       [INF_UPTIME_SEC]                     = INF_MEMMAX_MB,
-       [INF_MEMMAX_MB]                      = INF_POOL_ALLOC_MB,
-       [INF_POOL_ALLOC_MB]                  = INF_POOL_USED_MB,
-       [INF_POOL_USED_MB]                   = INF_POOL_FAILED,
+       [INF_UPTIME_SEC]                     = INF_MEMMAX_BYTES,
+       [INF_MEMMAX_BYTES]                   = INF_POOL_ALLOC_BYTES,
+       [INF_POOL_ALLOC_BYTES]               = INF_POOL_USED_BYTES,
+       [INF_POOL_USED_BYTES]                = INF_POOL_FAILED,
        [INF_POOL_FAILED]                    = INF_ULIMIT_N,
        [INF_ULIMIT_N]                       = INF_MAXSOCK,
        [INF_MAXSOCK]                        = INF_MAXCONN,
@@ -482,9 +482,9 @@ const struct ist promex_inf_metric_names[INF_TOTAL_FIELDS] 
= {
        [INF_PID]                            = IST("pid"),
        [INF_UPTIME]                         = IST("uptime"),
        [INF_UPTIME_SEC]                     = IST("start_time_seconds"),
-       [INF_MEMMAX_MB]                      = IST("max_memory_bytes"),
-       [INF_POOL_ALLOC_MB]                  = IST("pool_allocated_bytes"),
-       [INF_POOL_USED_MB]                   = IST("pool_used_bytes"),
+       [INF_MEMMAX_BYTES]                   = IST("max_memory_bytes"),
+       [INF_POOL_ALLOC_BYTES]               = IST("pool_allocated_bytes"),
+       [INF_POOL_USED_BYTES]                = IST("pool_used_bytes"),
        [INF_POOL_FAILED]                    = IST("pool_failures_total"),
        [INF_ULIMIT_N]                       = IST("max_fds"),
        [INF_MAXSOCK]                        = IST("max_sockets"),
@@ -655,9 +655,9 @@ const struct ist promex_inf_metric_desc[INF_TOTAL_FIELDS] = 
{
        [INF_PID]                            = IST("HAProxy PID."),
        [INF_UPTIME]                         = IST("Uptime in a human readable 
format."),
        [INF_UPTIME_SEC]                     = IST("Start time in seconds."),
-       [INF_MEMMAX_MB]                      = IST("Per-process memory limit 
(in bytes); 0=unset."),
-       [INF_POOL_ALLOC_MB]                  = IST("Total amount of memory 
allocated in pools (in bytes)."),
-       [INF_POOL_USED_MB]                   = IST("Total amount of memory used 
in pools (in bytes)."),
+       [INF_MEMMAX_BYTES]                   = IST("Per-process memory limit 
(in bytes); 0=unset."),
+       [INF_POOL_ALLOC_BYTES]               = IST("Total amount of memory 
allocated in pools (in bytes)."),
+       [INF_POOL_USED_BYTES]                = IST("Total amount of memory used 
in pools (in bytes)."),
        [INF_POOL_FAILED]                    = IST("Total number of failed pool 
allocations."),
        [INF_ULIMIT_N]                       = IST("Maximum number of open file 
descriptors; 0=unset."),
        [INF_MAXSOCK]                        = IST("Maximum number of open 
sockets."),
@@ -828,9 +828,9 @@ const struct ist promex_inf_metric_labels[INF_TOTAL_FIELDS] 
= {
        [INF_PID]                            = IST(""),
        [INF_UPTIME]                         = IST(""),
        [INF_UPTIME_SEC]                     = IST(""),
-       [INF_MEMMAX_MB]                      = IST(""),
-       [INF_POOL_ALLOC_MB]                  = IST(""),
-       [INF_POOL_USED_MB]                   = IST(""),
+       [INF_MEMMAX_BYTES]                   = IST(""),
+       [INF_POOL_ALLOC_BYTES]               = IST(""),
+       [INF_POOL_USED_BYTES]                = IST(""),
        [INF_POOL_FAILED]                    = IST(""),
        [INF_ULIMIT_N]                       = IST(""),
        [INF_MAXSOCK]                        = IST(""),
@@ -994,9 +994,9 @@ const struct ist promex_inf_metric_types[INF_TOTAL_FIELDS] 
= {
        [INF_PID]                            = IST("untyped"),
        [INF_UPTIME]                         = IST("untyped"),
        [INF_UPTIME_SEC]                     = IST("gauge"),
-       [INF_MEMMAX_MB]                      = IST("gauge"),
-       [INF_POOL_ALLOC_MB]                  = IST("gauge"),
-       [INF_POOL_USED_MB]                   = IST("gauge"),
+       [INF_MEMMAX_BYTES]                   = IST("gauge"),
+       [INF_POOL_ALLOC_BYTES]               = IST("gauge"),
+       [INF_POOL_USED_BYTES]                = IST("gauge"),
        [INF_POOL_FAILED]                    = IST("counter"),
        [INF_ULIMIT_N]                       = IST("gauge"),
        [INF_MAXSOCK]                        = IST("gauge"),
@@ -1336,15 +1336,6 @@ static int promex_dump_global_metrics(struct appctx 
*appctx, struct htx *htx)
                        case INF_UPTIME_SEC:
                                metric = mkf_u32(FN_DURATION, 
start_date.tv_sec);
                                break;
-                       case INF_MEMMAX_MB:
-                               metric = mkf_u64(FO_CONFIG|FN_LIMIT, 
global.rlimit_memmax * 1048576L);
-                               break;
-                       case INF_POOL_ALLOC_MB:
-                               metric = mkf_u64(0, pool_total_allocated());
-                               break;
-                       case INF_POOL_USED_MB:
-                               metric = mkf_u64(0, pool_total_used());
-                               break;
 
                        default:
                                metric = info[appctx->st2];
diff --git a/include/haproxy/stats-t.h b/include/haproxy/stats-t.h
index f37c5419c..d396ac24a 100644
--- a/include/haproxy/stats-t.h
+++ b/include/haproxy/stats-t.h
@@ -324,6 +324,9 @@ enum info_field {
        INF_DEBUG_COMMANDS_ISSUED,
        INF_CUM_LOG_MSGS,
        INF_BUILD_INFO,
+       INF_MEMMAX_BYTES,
+       INF_POOL_ALLOC_BYTES,
+       INF_POOL_USED_BYTES,
 
        /* must always be the last one */
        INF_TOTAL_FIELDS
diff --git a/src/stats.c b/src/stats.c
index 38c4ff904..73bd68a7b 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -92,8 +92,11 @@ const struct name_desc info_fields[INF_TOTAL_FIELDS] = {
        [INF_UPTIME]                         = { .name = "Uptime",              
        .desc = "How long ago this worker process was started 
(days+hours+minutes+seconds)" },
        [INF_UPTIME_SEC]                     = { .name = "Uptime_sec",          
        .desc = "How long ago this worker process was started (seconds)" },
        [INF_MEMMAX_MB]                      = { .name = "Memmax_MB",           
        .desc = "Worker process's hard limit on memory usage in MB (-m on 
command line)" },
+       [INF_MEMMAX_BYTES]                   = { .name = "Memmax_bytes",        
        .desc = "Worker process's hard limit on memory usage in byes (-m on 
command line)" },
        [INF_POOL_ALLOC_MB]                  = { .name = "PoolAlloc_MB",        
        .desc = "Amount of memory allocated in pools (in MB)" },
+       [INF_POOL_ALLOC_BYTES]               = { .name = "PoolAlloc_bytes",     
        .desc = "Amount of memory allocated in pools (in bytes)" },
        [INF_POOL_USED_MB]                   = { .name = "PoolUsed_MB",         
        .desc = "Amount of pool memory currently used (in MB)" },
+       [INF_POOL_USED_BYTES]                = { .name = "PoolUsed_bytes",      
        .desc = "Amount of pool memory currently used (in bytes)" },
        [INF_POOL_FAILED]                    = { .name = "PoolFailed",          
        .desc = "Number of failed pool allocations since this worker was 
started" },
        [INF_ULIMIT_N]                       = { .name = "Ulimit-n",            
        .desc = "Hard limit on the number of per-process file descriptors" },
        [INF_MAXSOCK]                        = { .name = "Maxsock",             
        .desc = "Hard limit on the number of per-process sockets" },
@@ -3849,8 +3852,11 @@ int stats_fill_info(struct field *info, int len)
 
        info[INF_UPTIME_SEC]                     = mkf_u32(FN_DURATION, up);
        info[INF_MEMMAX_MB]                      = mkf_u32(FO_CONFIG|FN_LIMIT, 
global.rlimit_memmax);
+       info[INF_MEMMAX_BYTES]                   = mkf_u32(FO_CONFIG|FN_LIMIT, 
global.rlimit_memmax * 1048576L);
        info[INF_POOL_ALLOC_MB]                  = mkf_u32(0, 
(unsigned)(pool_total_allocated() / 1048576L));
+       info[INF_POOL_ALLOC_BYTES]               = mkf_u32(0, 
pool_total_allocated());
        info[INF_POOL_USED_MB]                   = mkf_u32(0, 
(unsigned)(pool_total_used() / 1048576L));
+       info[INF_POOL_USED_BYTES]                = mkf_u32(0, 
pool_total_used());
        info[INF_POOL_FAILED]                    = mkf_u32(FN_COUNTER, 
pool_total_failures());
        info[INF_ULIMIT_N]                       = mkf_u32(FO_CONFIG|FN_LIMIT, 
global.rlimit_nofile);
        info[INF_MAXSOCK]                        = mkf_u32(FO_CONFIG|FN_LIMIT, 
global.maxsock);
-- 
2.29.2


Reply via email to