mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 23:56:57 +02:00
MINOR: frontend: rename sample fetch functions and declare the sample keywords
The following sample fetch functions were only usable by ACLs but are now usable by sample fetches too : fe_conn, fe_id, fe_sess_rate The fetch functions have been renamed "smp_fetch_*".
This commit is contained in:
parent
1a7eca19b8
commit
d6896bc72a
@ -9636,6 +9636,27 @@ The list of currently supported pattern fetch functions is the following :
|
|||||||
ports to some clients for a whole application session. It is of
|
ports to some clients for a whole application session. It is of
|
||||||
type integer and only works with such tables.
|
type integer and only works with such tables.
|
||||||
|
|
||||||
|
fe_conn([<frontend>])
|
||||||
|
Returns the number of currently established connections on the
|
||||||
|
the frontend, possibly including the connection being evaluated.
|
||||||
|
If no frontend name is specified, the current one is used. But
|
||||||
|
it is also possible to check another frontend. It can be used to
|
||||||
|
return a sorry page before hard-blocking, or to use a specific
|
||||||
|
backend to drain new requests when the farm is considered full.
|
||||||
|
This is mostly used with ACLs but can also be used to pass some
|
||||||
|
statistics to servers in HTTP headers. See also the "dst_conn",
|
||||||
|
"be_conn", "fe_sess_rate" criteria.
|
||||||
|
|
||||||
|
fe_id Returns an integer containing the current frontend's id.
|
||||||
|
|
||||||
|
fe_sess_rate([<frontend>])
|
||||||
|
Returns an integer value corresponding to the sessions creation
|
||||||
|
rate on the frontend, in number of new sessions per second. This
|
||||||
|
is used with ACLs to limit the incoming session rate to an
|
||||||
|
acceptable range in order to prevent abuse of service at the
|
||||||
|
earliest moment. It can also be useful to add this element to
|
||||||
|
logs using a log-format directive.
|
||||||
|
|
||||||
hdr(<name>[,<occ>])
|
hdr(<name>[,<occ>])
|
||||||
This extracts the last occurrence of header <name> in an HTTP
|
This extracts the last occurrence of header <name> in an HTTP
|
||||||
request. Optionally, a specific occurrence might be specified as
|
request. Optionally, a specific occurrence might be specified as
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Frontend variables and functions.
|
* Frontend variables and functions.
|
||||||
*
|
*
|
||||||
* Copyright 2000-2011 Willy Tarreau <w@1wt.eu>
|
* Copyright 2000-2013 Willy Tarreau <w@1wt.eu>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@ -41,6 +41,7 @@
|
|||||||
#include <proto/proto_tcp.h>
|
#include <proto/proto_tcp.h>
|
||||||
#include <proto/proto_http.h>
|
#include <proto/proto_http.h>
|
||||||
#include <proto/proxy.h>
|
#include <proto/proxy.h>
|
||||||
|
#include <proto/sample.h>
|
||||||
#include <proto/session.h>
|
#include <proto/session.h>
|
||||||
#include <proto/stream_interface.h>
|
#include <proto/stream_interface.h>
|
||||||
#include <proto/task.h>
|
#include <proto/task.h>
|
||||||
@ -208,9 +209,13 @@ int frontend_accept(struct session *s)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/************************************************************************/
|
||||||
|
/* All supported sample and ACL keywords must be declared here. */
|
||||||
|
/************************************************************************/
|
||||||
|
|
||||||
/* set temp integer to the id of the frontend */
|
/* set temp integer to the id of the frontend */
|
||||||
static int
|
static int
|
||||||
acl_fetch_fe_id(struct proxy *px, struct session *l4, void *l7, unsigned int opt,
|
smp_fetch_fe_id(struct proxy *px, struct session *l4, void *l7, unsigned int opt,
|
||||||
const struct arg *args, struct sample *smp)
|
const struct arg *args, struct sample *smp)
|
||||||
{
|
{
|
||||||
smp->flags = SMP_F_VOL_SESS;
|
smp->flags = SMP_F_VOL_SESS;
|
||||||
@ -224,7 +229,7 @@ acl_fetch_fe_id(struct proxy *px, struct session *l4, void *l7, unsigned int opt
|
|||||||
* an undefined behaviour.
|
* an undefined behaviour.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
acl_fetch_fe_sess_rate(struct proxy *px, struct session *l4, void *l7, unsigned int opt,
|
smp_fetch_fe_sess_rate(struct proxy *px, struct session *l4, void *l7, unsigned int opt,
|
||||||
const struct arg *args, struct sample *smp)
|
const struct arg *args, struct sample *smp)
|
||||||
{
|
{
|
||||||
smp->flags = SMP_F_VOL_TEST;
|
smp->flags = SMP_F_VOL_TEST;
|
||||||
@ -238,7 +243,7 @@ acl_fetch_fe_sess_rate(struct proxy *px, struct session *l4, void *l7, unsigned
|
|||||||
* an undefined behaviour.
|
* an undefined behaviour.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
acl_fetch_fe_conn(struct proxy *px, struct session *l4, void *l7, unsigned int opt,
|
smp_fetch_fe_conn(struct proxy *px, struct session *l4, void *l7, unsigned int opt,
|
||||||
const struct arg *args, struct sample *smp)
|
const struct arg *args, struct sample *smp)
|
||||||
{
|
{
|
||||||
smp->flags = SMP_F_VOL_TEST;
|
smp->flags = SMP_F_VOL_TEST;
|
||||||
@ -248,20 +253,32 @@ acl_fetch_fe_conn(struct proxy *px, struct session *l4, void *l7, unsigned int o
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Note: must not be declared <const> as its list will be overwritten.
|
||||||
|
* Please take care of keeping this list alphabetically sorted.
|
||||||
|
*/
|
||||||
|
static struct sample_fetch_kw_list smp_kws = {{ },{
|
||||||
|
{ "fe_conn", smp_fetch_fe_conn, ARG1(1,FE), NULL, SMP_T_UINT, SMP_USE_INTRN, },
|
||||||
|
{ "fe_id", smp_fetch_fe_id, 0, NULL, SMP_T_UINT, SMP_USE_FTEND, },
|
||||||
|
{ "fe_sess_rate", smp_fetch_fe_sess_rate, ARG1(1,FE), NULL, SMP_T_UINT, SMP_USE_INTRN, },
|
||||||
|
{ /* END */ },
|
||||||
|
}};
|
||||||
|
|
||||||
|
|
||||||
/* Note: must not be declared <const> as its list will be overwritten.
|
/* Note: must not be declared <const> as its list will be overwritten.
|
||||||
* Please take care of keeping this list alphabetically sorted.
|
* Please take care of keeping this list alphabetically sorted.
|
||||||
*/
|
*/
|
||||||
static struct acl_kw_list acl_kws = {{ },{
|
static struct acl_kw_list acl_kws = {{ },{
|
||||||
{ "fe_conn", acl_parse_int, acl_fetch_fe_conn, acl_match_int, ACL_USE_NOTHING, ARG1(1,FE) },
|
{ "fe_conn", acl_parse_int, smp_fetch_fe_conn, acl_match_int, ACL_USE_NOTHING, ARG1(1,FE) },
|
||||||
{ "fe_id", acl_parse_int, acl_fetch_fe_id, acl_match_int, ACL_USE_NOTHING, 0 },
|
{ "fe_id", acl_parse_int, smp_fetch_fe_id, acl_match_int, ACL_USE_NOTHING, 0 },
|
||||||
{ "fe_sess_rate", acl_parse_int, acl_fetch_fe_sess_rate, acl_match_int, ACL_USE_NOTHING, ARG1(1,FE) },
|
{ "fe_sess_rate", acl_parse_int, smp_fetch_fe_sess_rate, acl_match_int, ACL_USE_NOTHING, ARG1(1,FE) },
|
||||||
{ NULL, NULL, NULL, NULL },
|
{ /* END */ },
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|
||||||
__attribute__((constructor))
|
__attribute__((constructor))
|
||||||
static void __frontend_init(void)
|
static void __frontend_init(void)
|
||||||
{
|
{
|
||||||
|
sample_register_fetches(&smp_kws);
|
||||||
acl_register_keywords(&acl_kws);
|
acl_register_keywords(&acl_kws);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user