MINOR: backend: Add sample fetches to get the server's weight

The following sample fetches have been added :

 * srv_iweight : returns the initial server's weight
 * srv_uweight : returns the user-visible server's weight
 * srv_weight  : returns the current (or effetctive) server's weight

The requested server must be passed as argument, evnetually preceded by the
backend name. For instance :

  srv_weight(back-http/www1)
This commit is contained in:
Christopher Faulet 2020-07-10 16:03:45 +02:00
parent c55a626217
commit 1bea865811
2 changed files with 60 additions and 0 deletions

View File

@ -16160,6 +16160,21 @@ srv_sess_rate([<backend>/]<server>) : integer
acl srv2_full srv_sess_rate(be1/srv2) gt 50 acl srv2_full srv_sess_rate(be1/srv2) gt 50
use_backend be2 if srv1_full or srv2_full use_backend be2 if srv1_full or srv2_full
srv_iweight([<backend>/]<server>): integer
Returns an integer corresponding to the server's initial weight. If <backend>
is omitted, then the server is looked up in the current backend. See also
"srv_weight" and "srv_uweight".
srv_uweight([<backend>/]<server>): integer
Returns an integer corresponding to the user visible server's weight. If
<backend> is omitted, then the server is looked up in the current
backend. See also "srv_weight" and "srv_iweight".
srv_weight([<backend>/]<server>): integer
Returns an integer corresponding to the current (or effective) server's
weight. If <backend> is omitted, then the server is looked up in the current
backend. See also "srv_iweight" and "srv_uweight".
stopping : boolean stopping : boolean
Returns TRUE if the process calling the function is currently stopping. This 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 can be useful for logging, or for relaxing certain checks or helping close

View File

@ -2810,6 +2810,48 @@ smp_fetch_srv_sess_rate(const struct arg *args, struct sample *smp, const char *
return 1; return 1;
} }
/* set temp integer to the server weight.
* Accepts exactly 1 argument. Argument is a server, other types will lead to
* undefined behaviour.
*/
static int
smp_fetch_srv_weight(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct server *srv = args->data.srv;
struct proxy *px = srv->proxy;
smp->flags = SMP_F_VOL_TEST;
smp->data.type = SMP_T_SINT;
smp->data.u.sint = (srv->cur_eweight * px->lbprm.wmult + px->lbprm.wdiv - 1) / px->lbprm.wdiv;
return 1;
}
/* set temp integer to the server initial weight.
* Accepts exactly 1 argument. Argument is a server, other types will lead to
* undefined behaviour.
*/
static int
smp_fetch_srv_iweight(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
smp->flags = SMP_F_VOL_TEST;
smp->data.type = SMP_T_SINT;
smp->data.u.sint = args->data.srv->iweight;
return 1;
}
/* set temp integer to the server user-specified weight.
* Accepts exactly 1 argument. Argument is a server, other types will lead to
* undefined behaviour.
*/
static int
smp_fetch_srv_uweight(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
smp->flags = SMP_F_VOL_TEST;
smp->data.type = SMP_T_SINT;
smp->data.u.sint = args->data.srv->uweight;
return 1;
}
static int sample_conv_nbsrv(const struct arg *args, struct sample *smp, void *private) static int sample_conv_nbsrv(const struct arg *args, struct sample *smp, void *private)
{ {
@ -2881,6 +2923,9 @@ static struct sample_fetch_kw_list smp_kws = {ILH, {
{ "srv_name", smp_fetch_srv_name, 0, NULL, SMP_T_STR, SMP_USE_SERVR, }, { "srv_name", smp_fetch_srv_name, 0, NULL, SMP_T_STR, SMP_USE_SERVR, },
{ "srv_queue", smp_fetch_srv_queue, ARG1(1,SRV), NULL, SMP_T_SINT, SMP_USE_INTRN, }, { "srv_queue", smp_fetch_srv_queue, ARG1(1,SRV), NULL, SMP_T_SINT, SMP_USE_INTRN, },
{ "srv_sess_rate", smp_fetch_srv_sess_rate, ARG1(1,SRV), NULL, SMP_T_SINT, SMP_USE_INTRN, }, { "srv_sess_rate", smp_fetch_srv_sess_rate, ARG1(1,SRV), NULL, SMP_T_SINT, SMP_USE_INTRN, },
{ "srv_weight", smp_fetch_srv_weight, ARG1(1,SRV), NULL, SMP_T_SINT, SMP_USE_INTRN, },
{ "srv_iweight", smp_fetch_srv_iweight, ARG1(1,SRV), NULL, SMP_T_SINT, SMP_USE_INTRN, },
{ "srv_uweight", smp_fetch_srv_uweight, ARG1(1,SRV), NULL, SMP_T_SINT, SMP_USE_INTRN, },
{ /* END */ }, { /* END */ },
}}; }};