mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-21 13:16:57 +00:00
MEDIUM: check: include server address and port in the send-state header
This fixes an issue that occurs when backend servers run on different addresses or ports and you wish to healthcheck them via a consistent port. For example, if you allocate backends dynamically as containers that expose different ports and you use an inetd based healthchecking component that runs on a dedicated port. By adding the server address and port to the send-state header, the healthcheck component can deduce which address and port to check by reading the X-Haproxy-Server-State header out of the healthcheck and parsing out the address and port.
This commit is contained in:
parent
32f61e288d
commit
514061c414
@ -3109,6 +3109,14 @@ http-check send-state
|
||||
checks on the total number before transition, just as appears in the stats
|
||||
interface. Next headers are in the form "<variable>=<value>", indicating in
|
||||
no specific order some values available in the stats interface :
|
||||
- a variable "address", containing the address of the backend server.
|
||||
This corresponds to the <address> field in the server declaration. For
|
||||
unix domain sockets, it will read "unix".
|
||||
|
||||
- a variable "port", containing the port of the backend server. This
|
||||
corresponds to the <port> field in the server declaration. For unix
|
||||
domain sockets, it will read "unix".
|
||||
|
||||
- a variable "name", containing the name of the backend followed by a slash
|
||||
("/") then the name of the server. This can be used when a server is
|
||||
checked in multiple backends.
|
||||
|
@ -494,6 +494,8 @@ static int httpchk_build_status_header(struct server *s, char *buffer, int size)
|
||||
int sv_state;
|
||||
int ratio;
|
||||
int hlen = 0;
|
||||
char addr[46];
|
||||
char port[6];
|
||||
const char *srv_hlt_st[7] = { "DOWN", "DOWN %d/%d",
|
||||
"UP %d/%d", "UP",
|
||||
"NOLB %d/%d", "NOLB",
|
||||
@ -524,8 +526,11 @@ static int httpchk_build_status_header(struct server *s, char *buffer, int size)
|
||||
(s->state != SRV_ST_STOPPED) ? (s->check.health - s->check.rise + 1) : (s->check.health),
|
||||
(s->state != SRV_ST_STOPPED) ? (s->check.fall) : (s->check.rise));
|
||||
|
||||
hlen += snprintf(buffer + hlen, size - hlen, "; name=%s/%s; node=%s; weight=%d/%d; scur=%d/%d; qcur=%d",
|
||||
s->proxy->id, s->id,
|
||||
addr_to_str(&s->addr, addr, sizeof(addr));
|
||||
port_to_str(&s->addr, port, sizeof(port));
|
||||
|
||||
hlen += snprintf(buffer + hlen, size - hlen, "; address=%s; port=%s; name=%s/%s; node=%s; weight=%d/%d; scur=%d/%d; qcur=%d",
|
||||
addr, port, s->proxy->id, s->id,
|
||||
global.node,
|
||||
(s->eweight * s->proxy->lbprm.wmult + s->proxy->lbprm.wdiv - 1) / s->proxy->lbprm.wdiv,
|
||||
(s->proxy->lbprm.tot_weight * s->proxy->lbprm.wmult + s->proxy->lbprm.wdiv - 1) / s->proxy->lbprm.wdiv,
|
||||
|
Loading…
Reference in New Issue
Block a user