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>
This commit is contained in:
William Dauchy 2021-02-14 23:22:55 +01:00 committed by Christopher Faulet
parent 655e14ef17
commit 3679d0c794
4 changed files with 31 additions and 1 deletions

View 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 */

View 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 */
/*

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

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