mirror of
https://github.com/haproxy/haproxy.git
synced 2026-04-21 06:06:59 -04:00
MINOR: check: add agent-send server parameter
Causes HAProxy to emit a static string to the agent on every check, so that you can independently control multiple services running behind a single agent port.
This commit is contained in:
parent
c4eebc8157
commit
55f9ff11b5
5 changed files with 25 additions and 0 deletions
|
|
@ -10058,6 +10058,13 @@ agent-check
|
|||
|
||||
Supported in default-server: No
|
||||
|
||||
agent-send <string>
|
||||
If this option is specified, haproxy will send the given string (verbatim)
|
||||
to the agent server upon connection. You could, for example, encode
|
||||
the backend name into this string, which would enable your agent to send
|
||||
different responses based on the backend. Make sure to include a '\n' if
|
||||
you want to terminate your request with a newline.
|
||||
|
||||
agent-inter <delay>
|
||||
The "agent-inter" parameter sets the interval between two agent checks
|
||||
to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
|
||||
|
|
|
|||
|
|
@ -176,6 +176,8 @@ struct check {
|
|||
* rise to rise+fall-1 = good */
|
||||
int rise, fall; /* time in iterations */
|
||||
int type; /* Check type, one of PR_O2_*_CHK */
|
||||
char *send_string; /* optionally send a string when connecting to the agent */
|
||||
int send_string_len; /* length of agent command string */
|
||||
struct server *server; /* back-pointer to server */
|
||||
char **argv; /* the arguments to use if running a process-based check */
|
||||
char **envp; /* the environment to use if running a process-based check */
|
||||
|
|
|
|||
|
|
@ -1459,6 +1459,10 @@ static int connect_conn_chk(struct task *t)
|
|||
}
|
||||
}
|
||||
|
||||
if ((check->type & PR_O2_LB_AGENT_CHK) && check->send_string_len) {
|
||||
bo_putblk(check->bo, check->send_string, check->send_string_len);
|
||||
}
|
||||
|
||||
/* prepare a new connection */
|
||||
conn_init(conn);
|
||||
|
||||
|
|
|
|||
|
|
@ -1412,6 +1412,7 @@ void deinit(void)
|
|||
free(s->check.bo);
|
||||
free(s->agent.bi);
|
||||
free(s->agent.bo);
|
||||
free(s->agent.send_string);
|
||||
free((char*)s->conf.file);
|
||||
#ifdef USE_OPENSSL
|
||||
if (s->use_ssl || s->check.use_ssl)
|
||||
|
|
|
|||
11
src/server.c
11
src/server.c
|
|
@ -984,6 +984,9 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
|
|||
newsrv->check.downinter = curproxy->defsrv.check.downinter;
|
||||
newsrv->agent.use_ssl = curproxy->defsrv.agent.use_ssl;
|
||||
newsrv->agent.port = curproxy->defsrv.agent.port;
|
||||
if (curproxy->defsrv.agent.send_string != NULL)
|
||||
newsrv->agent.send_string = strdup(curproxy->defsrv.agent.send_string);
|
||||
newsrv->agent.send_string_len = curproxy->defsrv.agent.send_string_len;
|
||||
newsrv->agent.inter = curproxy->defsrv.agent.inter;
|
||||
newsrv->agent.fastinter = curproxy->defsrv.agent.fastinter;
|
||||
newsrv->agent.downinter = curproxy->defsrv.agent.downinter;
|
||||
|
|
@ -1052,6 +1055,14 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
|
|||
newsrv->agent.port = atol(args[cur_arg + 1]);
|
||||
cur_arg += 2;
|
||||
}
|
||||
else if (!strcmp(args[cur_arg], "agent-send")) {
|
||||
global.maxsock++;
|
||||
free(newsrv->agent.send_string);
|
||||
newsrv->agent.send_string_len = strlen(args[cur_arg + 1]);
|
||||
newsrv->agent.send_string = calloc(1, newsrv->agent.send_string_len + 1);
|
||||
memcpy(newsrv->agent.send_string, args[cur_arg + 1], newsrv->agent.send_string_len);
|
||||
cur_arg += 2;
|
||||
}
|
||||
else if (!defsrv && !strcmp(args[cur_arg], "cookie")) {
|
||||
newsrv->cookie = strdup(args[cur_arg + 1]);
|
||||
newsrv->cklen = strlen(args[cur_arg + 1]);
|
||||
|
|
|
|||
Loading…
Reference in a new issue