MINOR: stats: add helper to get status string
move listen status to a helper, defining both status enum and string
definition.
this will be helpful to be reused in prometheus code. It also removes
this hard-to-read nested ternary.
Signed-off-by: William Dauchy <wdauchy@gmail.com>
diff --git a/include/haproxy/listener-t.h b/include/haproxy/listener-t.h
index ce5ed40..7d3998e 100644
--- a/include/haproxy/listener-t.h
+++ b/include/haproxy/listener-t.h
@@ -84,6 +84,15 @@
* not rely on this state.
*/
+/* listener status for stats */
+enum li_status {
+ LI_STATUS_WAITING = 0,
+ LI_STATUS_OPEN,
+ LI_STATUS_FULL,
+
+ LI_STATE_COUNT /* must be last */
+};
+
/* listener socket options */
#define LI_O_NONE 0x0000
#define LI_O_NOLINGER 0x0001 /* disable linger on this socket */
diff --git a/include/haproxy/listener.h b/include/haproxy/listener.h
index 1be8551..f229efa 100644
--- a/include/haproxy/listener.h
+++ b/include/haproxy/listener.h
@@ -218,6 +218,9 @@
extern struct accept_queue_ring accept_queue_rings[MAX_THREADS] __attribute__((aligned(64)));
+extern const char* li_status_st[LI_STATE_COUNT];
+enum li_status get_li_status(struct listener *l);
+
#endif /* _HAPROXY_LISTENER_H */
/*
diff --git a/src/listener.c b/src/listener.c
index 0b929b9..9ca910b 100644
--- a/src/listener.c
+++ b/src/listener.c
@@ -46,6 +46,12 @@
static struct mt_list global_listener_queue = MT_LIST_HEAD_INIT(global_listener_queue);
static struct task *global_listener_queue_task;
+/* listener status for stats */
+const char* li_status_st[LI_STATE_COUNT] = {
+ [LI_STATUS_WAITING] = "WAITING",
+ [LI_STATUS_OPEN] = "OPEN",
+ [LI_STATUS_FULL] = "FULL",
+};
#if defined(USE_THREAD)
@@ -183,6 +189,18 @@
#endif // USE_THREAD
+/* helper to get listener status for stats */
+enum li_status get_li_status(struct listener *l)
+{
+ if (!l->maxconn || l->nbconn < l->maxconn) {
+ if (l->state == LI_LIMITED)
+ return LI_STATUS_WAITING;
+ else
+ return LI_STATUS_OPEN;
+ }
+ return LI_STATUS_FULL;
+}
+
/* adjust the listener's state and its proxy's listener counters if needed.
* It must be called under the listener's lock, but uses atomic ops to change
* the proxy's counters so that the proxy lock is not needed.
diff --git a/src/stats.c b/src/stats.c
index 1e0db0b..a63178d 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -1898,7 +1898,7 @@
metric = mkf_u64(FN_COUNTER, l->counters->denied_sess);
break;
case ST_F_STATUS:
- metric = mkf_str(FO_STATUS, (!l->maxconn || l->nbconn < l->maxconn) ? (l->state == LI_LIMITED) ? "WAITING" : "OPEN" : "FULL");
+ metric = mkf_str(FO_STATUS, li_status_st[get_li_status(l)]);
break;
case ST_F_PID:
metric = mkf_u32(FO_KEY, relative_pid);