diff --git a/doc/configuration.txt b/doc/configuration.txt index 7e578c141..ec412d4c9 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -10538,6 +10538,11 @@ fe_sess_rate([]) : integer tcp-request content accept if ! too_fast tcp-request content accept if WAIT_END +nbproc : integer + Returns an integer value corresponding to the number of processes that were + started (it equals the global "nbproc" setting). This is useful for logging + and debugging purposes. + nbsrv([]) : integer Returns an integer value corresponding to the number of usable servers of either the current backend or the named backend. This is mostly used with @@ -10546,6 +10551,11 @@ nbsrv([]) : integer to handle some load. It is useful to report a failure when combined with "monitor fail". +proc : integer + Returns an integer value corresponding to the position of the process calling + the function, between 1 and global.nbproc. This is useful for logging and + debugging purposes. + queue([]) : integer Returns the total number of queued connections of the designated backend, including all the connections in server queues. If no backend name is @@ -10596,6 +10606,11 @@ srv_sess_rate([/]) : integer acl srv2_full srv_sess_rate(be1/srv2) gt 50 use_backend be2 if srv1_full or srv2_full +stopping : boolean + Returns TRUE if the process calling the function is currently stopping. This + can be useful for logging, or for relaxing certain checks or helping close + certain connections upon graceful shutdown. + table_avl([]) : integer Returns the total number of available entries in the current proxy's stick-table or in the designated stick-table. See also table_cnt. diff --git a/src/sample.c b/src/sample.c index 7db506d0a..be00c3c18 100644 --- a/src/sample.c +++ b/src/sample.c @@ -1625,6 +1625,26 @@ smp_fetch_date(struct proxy *px, struct session *s, void *l7, unsigned int opt, return 1; } +/* returns the number of processes */ +static int +smp_fetch_nbproc(struct proxy *px, struct session *s, void *l7, unsigned int opt, + const struct arg *args, struct sample *smp, const char *kw) +{ + smp->type = SMP_T_UINT; + smp->data.uint = global.nbproc; + return 1; +} + +/* returns the number of the current process (between 1 and nbproc */ +static int +smp_fetch_proc(struct proxy *px, struct session *s, void *l7, unsigned int opt, + const struct arg *args, struct sample *smp, const char *kw) +{ + smp->type = SMP_T_UINT; + smp->data.uint = relative_pid; + return 1; +} + /* generate a random 32-bit integer for whatever purpose, with an optional * range specified in argument. */ @@ -1643,6 +1663,16 @@ smp_fetch_rand(struct proxy *px, struct session *s, void *l7, unsigned int opt, return 1; } +/* returns true if the current process is stopping */ +static int +smp_fetch_stopping(struct proxy *px, struct session *s, void *l7, unsigned int opt, + const struct arg *args, struct sample *smp, const char *kw) +{ + smp->type = SMP_T_BOOL; + smp->data.uint = stopping; + return 1; +} + /* Note: must not be declared as its list will be overwritten. * Note: fetches that may return multiple types must be declared as the lowest * common denominator, the type that can be casted into all other ones. For @@ -1653,7 +1683,10 @@ static struct sample_fetch_kw_list smp_kws = {ILH, { { "always_true", smp_fetch_true, 0, NULL, SMP_T_BOOL, SMP_USE_INTRN }, { "env", smp_fetch_env, ARG1(1,STR), NULL, SMP_T_STR, SMP_USE_INTRN }, { "date", smp_fetch_date, ARG1(0,SINT), NULL, SMP_T_UINT, SMP_USE_INTRN }, + { "nbproc", smp_fetch_nbproc,0, NULL, SMP_T_UINT, SMP_USE_INTRN }, + { "proc", smp_fetch_proc, 0, NULL, SMP_T_UINT, SMP_USE_INTRN }, { "rand", smp_fetch_rand, ARG1(0,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN }, + { "stopping", smp_fetch_stopping, 0, NULL, SMP_T_BOOL, SMP_USE_INTRN }, { /* END */ }, }};