]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: stats: add helper to get status string
authorWilliam Dauchy <wdauchy@gmail.com>
Sun, 14 Feb 2021 22:22:55 +0000 (23:22 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 15 Feb 2021 13:13:32 +0000 (14:13 +0100)
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>
include/haproxy/listener-t.h
include/haproxy/listener.h
src/listener.c
src/stats.c

index ce5ed408feeeb36fc7522f08c6020e6d3898705b..7d3998eceb1317e24448d7a02754ce70bb150e80 100644 (file)
@@ -84,6 +84,15 @@ enum li_state {
  * 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 */
index 1be8551c3a8509fa7e0505048736da1ba1c33c99..f229efae43fbf3f0011c5c75e6c92bdab72e282b 100644 (file)
@@ -218,6 +218,9 @@ struct task *manage_global_listener_queue(struct task *t, void *context, unsigne
 
 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 */
 
 /*
index 0b929b906f2347d7833d404fdc7f0e123f4b6a77..9ca910b37656fe7bd593290039e6d981b3000b53 100644 (file)
@@ -46,6 +46,12 @@ static struct bind_kw_list bind_keywords = {
 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 @@ REGISTER_CONFIG_POSTPARSER("multi-threaded accept queue", accept_queue_init);
 
 #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.
index 1e0db0b24267ce12c517a3ed36ede6b996493057..a63178d5a7364fe8920a5b4d240c82fbad3a9780 100644 (file)
@@ -1898,7 +1898,7 @@ int stats_fill_li_stats(struct proxy *px, struct listener *l, int flags,
                                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);