You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2006/12/06 16:36:48 UTC
svn commit: r483115 [2/2] -
/tomcat/connectors/trunk/jk/native/common/jk_status.c
Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_status.c?view=diff&rev=483115&r1=483114&r2=483115
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_status.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_status.c Wed Dec 6 07:36:46 2006
@@ -1,3 +1,4 @@
+// & encoding+// versions with show (hide?), hr
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -54,13 +55,21 @@
* opt=option (changes meaning of edit and list/show)
*/
-#define JK_STATUS_ARG_CMD ("cmd")
-#define JK_STATUS_ARG_MIME ("mime")
-#define JK_STATUS_ARG_FROM ("from")
-#define JK_STATUS_ARG_REFRESH ("re")
-#define JK_STATUS_ARG_WORKER ("w")
-#define JK_STATUS_ARG_WORKER_MEMBER ("sw")
-#define JK_STATUS_ARG_OPTION ("opt")
+#define JK_STATUS_ARG_CMD "cmd"
+#define JK_STATUS_ARG_MIME "mime"
+#define JK_STATUS_ARG_FROM "from"
+#define JK_STATUS_ARG_REFRESH "re"
+#define JK_STATUS_ARG_WORKER "w"
+#define JK_STATUS_ARG_SUB_WORKER "sw"
+#define JK_STATUS_ARG_ATTRIBUTE "att"
+#define JK_STATUS_ARG_MULT_VALUE_BASE "val"
+#define JK_STATUS_ARG_OPTIONS "opt"
+
+#define JK_STATUS_ARG_OPTION_NO_MEMBERS 0x0001
+#define JK_STATUS_ARG_OPTION_NO_MAPS 0x0002
+#define JK_STATUS_ARG_OPTION_NO_LEGEND 0x0004
+#define JK_STATUS_ARG_OPTION_NO_LB 0x0008
+#define JK_STATUS_ARG_OPTION_NO_AJP 0x0010
#define JK_STATUS_ARG_LB_RETRIES ("lr")
#define JK_STATUS_ARG_LB_RECOVER_TIME ("lt")
@@ -97,7 +106,7 @@
#define JK_STATUS_CMD_UPDATE (4)
#define JK_STATUS_CMD_RESET (5)
#define JK_STATUS_CMD_VERSION (6)
-#define JK_STATUS_CMD_DEF (JK_STATUS_CMD_UNKNOWN)
+#define JK_STATUS_CMD_DEF (JK_STATUS_CMD_LIST)
#define JK_STATUS_CMD_MAX (JK_STATUS_CMD_VERSION)
#define JK_STATUS_CMD_TEXT_UNKNOWN ("unknown")
#define JK_STATUS_CMD_TEXT_LIST ("list")
@@ -106,23 +115,21 @@
#define JK_STATUS_CMD_TEXT_UPDATE ("update")
#define JK_STATUS_CMD_TEXT_RESET ("reset")
#define JK_STATUS_CMD_TEXT_VERSION ("version")
-#define JK_STATUS_CMD_TEXT_DEF (JK_STATUS_CMD_TEXT_UNKNOWN)
+#define JK_STATUS_CMD_TEXT_DEF (JK_STATUS_CMD_TEXT_LIST)
#define JK_STATUS_MIME_UNKNOWN (0)
#define JK_STATUS_MIME_HTML (1)
#define JK_STATUS_MIME_XML (2)
#define JK_STATUS_MIME_TXT (3)
#define JK_STATUS_MIME_PROP (4)
-#define JK_STATUS_MIME_DEF (JK_STATUS_MIME_UNKNOWN)
+#define JK_STATUS_MIME_DEF (JK_STATUS_MIME_HTML)
#define JK_STATUS_MIME_MAX (JK_STATUS_MIME_PROP)
#define JK_STATUS_MIME_TEXT_UNKNOWN ("unknown")
#define JK_STATUS_MIME_TEXT_HTML ("html")
#define JK_STATUS_MIME_TEXT_XML ("xml")
#define JK_STATUS_MIME_TEXT_TXT ("txt")
#define JK_STATUS_MIME_TEXT_PROP ("prop")
-#define JK_STATUS_MIME_TEXT_DEF (JK_STATUS_MIME_TEXT_UNKNOWN)
-
-#define JK_STATUS_ATT_NO_MEMBERS ("nosw")
+#define JK_STATUS_MIME_TEXT_DEF (JK_STATUS_MIME_TEXT_HTML)
#define JK_STATUS_MASK_ACTIVE 0x000000FF
#define JK_STATUS_MASK_DISABLED 0x0000FF00
@@ -135,7 +142,8 @@
#define JK_STATUS_MASK_GOOD_DEF 0x0000000F
#define JK_STATUS_MASK_BAD_DEF 0x00FF1010
-#define JK_STATUS_REFRESH "3"
+#define JK_STATUS_WAIT_AFTER_UPDATE "3"
+#define JK_STATUS_REFRESH_DEF "10"
#define JK_STATUS_ESC_CHARS ("<>?&")
#define JK_STATUS_HEAD "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
@@ -226,9 +234,13 @@
struct status_endpoint
{
- jk_endpoint_t *e;
- status_worker_t *s_worker;
+ status_worker_t *worker;
+
+ jk_map_t *req_params;
+ char *msg;
+
jk_endpoint_t endpoint;
+
};
typedef struct status_endpoint status_endpoint_t;
@@ -249,7 +261,6 @@
jk_uint32_t good_mask;
jk_uint32_t bad_mask;
jk_worker_t worker;
- status_endpoint_t ep;
jk_worker_env_t *we;
};
@@ -389,23 +400,23 @@
return rc;
}
-static void jk_print_xml_start_elt(jk_ws_service_t *s, status_worker_t *sw,
+static void jk_print_xml_start_elt(jk_ws_service_t *s, status_worker_t *w,
int indentation, int close_tag,
const char *name)
{
if (close_tag) {
- jk_printf(s, "%*s<%s%s>\n", indentation, "", sw->ns, name);
+ jk_printf(s, "%*s<%s%s>\n", indentation, "", w->ns, name);
}
else {
- jk_printf(s, "%*s<%s%s\n", indentation, "", sw->ns, name);
+ jk_printf(s, "%*s<%s%s\n", indentation, "", w->ns, name);
}
}
-static void jk_print_xml_close_elt(jk_ws_service_t *s, status_worker_t *sw,
+static void jk_print_xml_close_elt(jk_ws_service_t *s, status_worker_t *w,
int indentation,
const char *name)
{
- jk_printf(s, "%*s</%s%s>\n", indentation, "", sw->ns, name);
+ jk_printf(s, "%*s</%s%s>\n", indentation, "", w->ns, name);
}
static void jk_print_xml_stop_elt(jk_ws_service_t *s,
@@ -454,75 +465,75 @@
jk_printf(s, "%*s%s=\"%" JK_UINT64_T_FMT "\"\n", indentation, "", key, value);
}
-static void jk_print_prop_att_string(jk_ws_service_t *s, status_worker_t *sw,
+static void jk_print_prop_att_string(jk_ws_service_t *s, status_worker_t *w,
const char *name,
const char *key, const char *value)
{
if (name) {
- jk_printf(s, "%s.%s.%s=%s\n", sw->prefix, name, key, value ? value : "");
+ jk_printf(s, "%s.%s.%s=%s\n", w->prefix, name, key, value ? value : "");
}
else {
- jk_printf(s, "%s.%s=%s\n", sw->prefix, key, value ? value : "");
+ jk_printf(s, "%s.%s=%s\n", w->prefix, key, value ? value : "");
}
}
-static void jk_print_prop_att_int(jk_ws_service_t *s, status_worker_t *sw,
+static void jk_print_prop_att_int(jk_ws_service_t *s, status_worker_t *w,
const char *name,
const char *key, int value)
{
if (name) {
- jk_printf(s, "%s.%s.%s=%d\n", sw->prefix, name, key, value);
+ jk_printf(s, "%s.%s.%s=%d\n", w->prefix, name, key, value);
}
else {
- jk_printf(s, "%s.%s=%d\n", sw->prefix, key, value);
+ jk_printf(s, "%s.%s=%d\n", w->prefix, key, value);
}
}
-static void jk_print_prop_att_uint(jk_ws_service_t *s, status_worker_t *sw,
+static void jk_print_prop_att_uint(jk_ws_service_t *s, status_worker_t *w,
const char *name,
const char *key, unsigned value)
{
if (name) {
- jk_printf(s, "%s.%s.%s=%u\n", sw->prefix, name, key, value);
+ jk_printf(s, "%s.%s.%s=%u\n", w->prefix, name, key, value);
}
else {
- jk_printf(s, "%s.%s=%u\n", sw->prefix, key, value);
+ jk_printf(s, "%s.%s=%u\n", w->prefix, key, value);
}
}
-static void jk_print_prop_att_uint32(jk_ws_service_t *s, status_worker_t *sw,
+static void jk_print_prop_att_uint32(jk_ws_service_t *s, status_worker_t *w,
const char *name,
const char *key, jk_uint32_t value)
{
if (name) {
- jk_printf(s, "%s.%s.%s=%" JK_UINT32_T_FMT "\n", sw->prefix, name, key, value);
+ jk_printf(s, "%s.%s.%s=%" JK_UINT32_T_FMT "\n", w->prefix, name, key, value);
}
else {
- jk_printf(s, "%s.%s=%" JK_UINT32_T_FMT "\n", sw->prefix, key, value);
+ jk_printf(s, "%s.%s=%" JK_UINT32_T_FMT "\n", w->prefix, key, value);
}
}
-static void jk_print_prop_att_uint64(jk_ws_service_t *s, status_worker_t *sw,
+static void jk_print_prop_att_uint64(jk_ws_service_t *s, status_worker_t *w,
const char *name,
const char *key, jk_uint64_t value)
{
if (name) {
- jk_printf(s, "%s.%s.%s=%" JK_UINT64_T_FMT "\n", sw->prefix, name, key, value);
+ jk_printf(s, "%s.%s.%s=%" JK_UINT64_T_FMT "\n", w->prefix, name, key, value);
}
else {
- jk_printf(s, "%s.%s=%" JK_UINT64_T_FMT "\n", sw->prefix, key, value);
+ jk_printf(s, "%s.%s=%" JK_UINT64_T_FMT "\n", w->prefix, key, value);
}
}
-static void jk_print_prop_item_string(jk_ws_service_t *s, status_worker_t *sw,
+static void jk_print_prop_item_string(jk_ws_service_t *s, status_worker_t *w,
const char *name, const char *list, int num,
const char *key, const char *value)
{
if (name) {
- jk_printf(s, "%s.%s.%s.%d.%s=%s\n", sw->prefix, name, list, num, key, value ? value : "");
+ jk_printf(s, "%s.%s.%s.%d.%s=%s\n", w->prefix, name, list, num, key, value ? value : "");
}
else {
- jk_printf(s, "%s.%s.%d.%s=%s\n", sw->prefix, list, num, key, value ? value : "");
+ jk_printf(s, "%s.%s.%d.%s=%s\n", w->prefix, list, num, key, value ? value : "");
}
}
@@ -561,14 +572,14 @@
} while (1);
}
-static int status_rate(worker_record_t *wr, status_worker_t *sw,
+static int status_rate(worker_record_t *wr, status_worker_t *w,
jk_logger_t *l)
{
jk_uint32_t mask = 0;
int activation = wr->s->activation;
int state = wr->s->state;
- jk_uint32_t good = sw->good_mask;
- jk_uint32_t bad = sw->bad_mask;
+ jk_uint32_t good = w->good_mask;
+ jk_uint32_t bad = w->bad_mask;
int rv = 0;
switch (activation)
@@ -706,100 +717,61 @@
return "True";
}
-static int status_get_arg_raw(const char *param,
- const char *req, char *buf, size_t len,
- jk_logger_t *l)
+static int status_get_string(status_endpoint_t *p,
+ const char *param,
+ const char *def,
+ const char **result,
+ jk_logger_t *l)
{
- char ps[32];
- char *p;
- size_t pos = 0;
- int rv = 0;
+ int rv;
- buf[0] = '\0';
- if (!req)
- return JK_FALSE;
- if (!param)
- return JK_FALSE;
- sprintf(ps, "&%s=", param);
- p = strstr(req, ps);
- if (!p) {
- sprintf(ps, "%s=", param);
- if (!strncmp(req, ps, strlen(ps)))
- p = (char *)req;
- }
- if (p) {
- p += strlen(ps);
- while (*p) {
- if (*p != '&')
- buf[pos++] = *p;
- else
- break;
- if (pos >= len-1)
- break;
- p++;
- }
- buf[pos] = '\0';
- if (pos)
- rv = JK_TRUE;
- else
- rv = JK_UNSET;
+ *result = jk_map_get_string(p->req_params,
+ param, NULL);
+ if (*result) {
+ rv = JK_TRUE;
}
- else
+ else {
+ *result = def;
rv = JK_FALSE;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "result for '%s' in '%s' is %d (%s)",
- param, req, rv, buf);
- return rv;
-}
-
-static int status_get_arg(const char *param,
- const char *req, char *buf, size_t len,
- jk_logger_t *l)
-{
- int rv;
-
- rv = status_get_arg_raw(param, req, buf, len, l);
- if (rv == JK_TRUE) {
- char *off = buf;
- while ((off = strpbrk(off, JK_STATUS_ESC_CHARS)))
- off[0] = '@';
}
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
- "result for '%s' in '%s' is %d (%s)",
- param, req, rv, buf);
+ "retrieved string arg '%s' as '%s'%s",
+ param, *result ? *result : "(null)",
+ rv == JK_FALSE ? " (default)" : "");
return rv;
}
-static int status_get_int(const char *param,
- const char *req, int def,
+static int status_get_int(status_endpoint_t *p,
+ const char *param,
+ int def,
jk_logger_t *l)
{
- char buf[32];
+ const char *arg;
int rv = def;
- if (status_get_arg_raw(param, req, buf, sizeof(buf), l) == JK_TRUE) {
- rv = atoi(buf);
+ if (status_get_string(p, param, NULL, &arg, l) == JK_TRUE) {
+ rv = atoi(arg);
}
return rv;
}
-static int status_get_bool(const char *param,
- const char *req, int def,
+static int status_get_bool(status_endpoint_t *p,
+ const char *param,
+ int def,
jk_logger_t *l)
{
- char buf[32];
+ const char *arg;
int rv = def;
- if (status_get_arg_raw(param, req, buf, sizeof(buf), l) == JK_TRUE) {
- if (strcasecmp(buf, "on") == 0 ||
- strcasecmp(buf, "true") == 0 ||
- strcasecmp(buf, "1") == 0)
+ if (status_get_string(p, param, NULL, &arg, l) == JK_TRUE) {
+ if (strcasecmp(arg, "on") == 0 ||
+ strcasecmp(arg, "true") == 0 ||
+ strcasecmp(arg, "1") == 0)
rv = 1;
- else if (strcasecmp(buf, "off") == 0 ||
- strcasecmp(buf, "false") == 0 ||
- strcasecmp(buf, "0") == 0)
+ else if (strcasecmp(arg, "off") == 0 ||
+ strcasecmp(arg, "false") == 0 ||
+ strcasecmp(arg, "0") == 0)
rv = 0;
}
return rv;
@@ -826,7 +798,7 @@
return JK_STATUS_CMD_RESET;
else if (!strcmp(cmd, JK_STATUS_CMD_TEXT_VERSION))
return JK_STATUS_CMD_VERSION;
- return JK_STATUS_CMD_DEF;
+ return JK_STATUS_CMD_UNKNOWN;
}
const char *status_mime_text(int mime)
@@ -846,383 +818,421 @@
return JK_STATUS_MIME_TXT;
else if (!strcmp(mime, JK_STATUS_MIME_TEXT_PROP))
return JK_STATUS_MIME_PROP;
- return JK_STATUS_MIME_DEF;
+ return JK_STATUS_MIME_UNKNOWN;
}
-static void status_start_form(jk_ws_service_t *s, const char *method,
- int cmd, int mime,
- int from, int refresh,
- const char *worker, const char *sub_worker,
- const char *option)
+static void status_start_form(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ const char *method,
+ int cmd,
+ jk_logger_t *l)
{
+
+ int i;
+ int sz;
+ jk_map_t *m = p->req_params;
+
if (method)
jk_printf(s, JK_STATUS_FORM_START, method, s->req_uri);
else
return;
- if (cmd) {
+ if (cmd != JK_STATUS_CMD_UNKNOWN) {
jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING,
JK_STATUS_ARG_CMD, status_cmd_text(cmd));
- if (mime) {
- jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING,
- JK_STATUS_ARG_MIME, status_mime_text(mime));
- }
- if (from) {
- jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING,
- JK_STATUS_ARG_FROM, status_cmd_text(from));
- }
- if (refresh) {
- jk_printf(s, JK_STATUS_FORM_HIDDEN_INT,
- JK_STATUS_ARG_REFRESH, refresh);
- }
- if (worker) {
- jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING,
- JK_STATUS_ARG_WORKER, worker);
- }
- if (sub_worker) {
- jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING,
- JK_STATUS_ARG_WORKER_MEMBER, sub_worker);
- }
- if (option) {
- jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING,
- JK_STATUS_ARG_OPTION, option);
+ }
+
+ sz = jk_map_size(m);
+ for (i = 0; i < sz; i++) {
+ const char *k = jk_map_name_at(m, i);
+ const char *v = jk_map_value_at(m, i);
+ if (strcmp(k, JK_STATUS_ARG_CMD) || cmd == JK_STATUS_CMD_UNKNOWN) {
+ jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING, k, v);
}
}
}
-static void status_write_uri(jk_ws_service_t *s, const char *text,
+static void status_write_uri(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ const char *text,
int cmd, int mime,
- int from, int refresh,
const char *worker, const char *sub_worker,
- const char *option)
+ unsigned int add_options, unsigned int rm_options,
+ const char *attribute,
+ jk_logger_t *l)
{
+ int i;
+ int sz;
+ int started = 0;
+ int from;
+ int prev;
+ unsigned int opt = 0;
+ const char *arg;
+ jk_map_t *m = p->req_params;
+
if (text)
jk_puts(s, "<a href=\"");
- if (cmd) {
- jk_putv(s, s->req_uri, "?", JK_STATUS_ARG_CMD, "=",
- status_cmd_text(cmd), NULL);
- if (mime)
- jk_putv(s, "&", JK_STATUS_ARG_MIME, "=",
- status_mime_text(mime), NULL);
- if (from)
- jk_putv(s, "&", JK_STATUS_ARG_FROM, "=",
- status_cmd_text(from), NULL);
- if (refresh)
- jk_printf(s, "&%s=%d", JK_STATUS_ARG_REFRESH, refresh);
- if (worker)
- jk_putv(s, "&", JK_STATUS_ARG_WORKER, "=",
- worker, NULL);
- if (sub_worker)
- jk_putv(s, "&", JK_STATUS_ARG_WORKER_MEMBER, "=",
- sub_worker, NULL);
- if (option)
- jk_putv(s, "&", JK_STATUS_ARG_OPTION, "=",
- option, NULL);
+ jk_puts(s, s->req_uri);
+ status_get_string(p, JK_STATUS_ARG_FROM, NULL, &arg, l);
+ from = status_cmd_int(arg);
+ status_get_string(p, JK_STATUS_ARG_CMD, NULL, &arg, l);
+ prev = status_cmd_int(arg);
+ if (cmd == JK_STATUS_CMD_UNKNOWN) {
+ if (prev == JK_STATUS_CMD_UPDATE ||
+ prev == JK_STATUS_CMD_RESET) {
+ cmd = from;
+ }
}
+ if (cmd != JK_STATUS_CMD_UNKNOWN) {
+ jk_printf(s, "%s%s=%s", started ? "&" : "?",
+ JK_STATUS_ARG_CMD, status_cmd_text(cmd));
+ if (cmd == JK_STATUS_CMD_EDIT ||
+ cmd == JK_STATUS_CMD_RESET) {
+ jk_printf(s, "%s%s=%s", "&",
+ JK_STATUS_ARG_FROM, status_cmd_text(prev));
+ }
+ started=1;
+ }
+ if (mime != JK_STATUS_MIME_UNKNOWN) {
+ jk_printf(s, "%s%s=%s", started ? "&" : "?",
+ JK_STATUS_ARG_MIME, status_mime_text(mime));
+ started=1;
+ }
+ if (worker && worker[0]) {
+ jk_printf(s, "%s%s=%s", started ? "&" : "?",
+ JK_STATUS_ARG_WORKER, worker);
+ started=1;
+ }
+ if (sub_worker && sub_worker[0]) {
+ jk_printf(s, "%s%s=%s", started ? "&" : "?",
+ JK_STATUS_ARG_SUB_WORKER, sub_worker);
+ started=1;
+ }
+ if (attribute && attribute[0]) {
+ jk_printf(s, "%s%s=%s", started ? "&" : "?",
+ JK_STATUS_ARG_ATTRIBUTE, attribute);
+ started=1;
+ }
+
+ sz = jk_map_size(m);
+ for (i = 0; i < sz; i++) {
+ const char *k = jk_map_name_at(m, i);
+ const char *v = jk_map_value_at(m, i);
+ if (!strcmp(k, JK_STATUS_ARG_CMD) && cmd != JK_STATUS_CMD_UNKNOWN) {
+ continue;
+ }
+ if (!strcmp(k, JK_STATUS_ARG_MIME) && mime != JK_STATUS_MIME_UNKNOWN) {
+ continue;
+ }
+ if (!strcmp(k, JK_STATUS_ARG_FROM)) {
+ continue;
+ }
+ if (!strcmp(k, JK_STATUS_ARG_WORKER) && worker) {
+ continue;
+ }
+ if (!strcmp(k, JK_STATUS_ARG_SUB_WORKER) && sub_worker) {
+ continue;
+ }
+ if (!strcmp(k, JK_STATUS_ARG_ATTRIBUTE) && attribute) {
+ continue;
+ }
+ if (!strcmp(k, JK_STATUS_ARG_ATTRIBUTE) && cmd != JK_STATUS_CMD_UPDATE && cmd != JK_STATUS_CMD_EDIT) {
+ continue;
+ }
+ if (!strncmp(k, JK_STATUS_ARG_MULT_VALUE_BASE, 3) && cmd != JK_STATUS_CMD_UPDATE) {
+ continue;
+ }
+ if (strlen(k) == 2 && (k[0] == 'l' || k[0] == 'w') && cmd != JK_STATUS_CMD_UPDATE) {
+ continue;
+ }
+ if (!strcmp(k, JK_STATUS_ARG_OPTIONS)) {
+ opt = atoi(v);
+ continue;
+ }
+ jk_printf(s, "%s%s=%s", started ? "&" : "?", k, v);
+ started=1;
+ }
+ if (opt | add_options | rm_options)
+ jk_printf(s, "%s%s=%u", started ? "&" : "?",
+ JK_STATUS_ARG_OPTIONS, (opt | add_options) & ~rm_options);
if (text)
jk_putv(s, "\">", text, "</a>", NULL);
}
-static void status_parse_uri(jk_ws_service_t *s,
- int *cmd, int *mime,
- int *from, int *refresh,
- char *worker, char *sub_worker,
- char *option,
- jk_logger_t *l)
-{
- char buf[JK_SHM_STR_SIZ+1];
+static int status_parse_uri(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ jk_logger_t *l)
+{
+ jk_map_t *m;
+#if defined(AS400) || defined(_REENTRANT)
+ char *lasts;
+#endif
+ char *param;
+ char *query;
JK_TRACE_ENTER(l);
- *cmd = JK_STATUS_CMD_LIST;
- *mime = JK_STATUS_MIME_HTML;
- *from = JK_STATUS_CMD_DEF;
- worker[0] = '\0';
- sub_worker[0] = '\0';
- option[0] = '\0';
- *refresh = 0;
- if (!s->query_string)
- return;
- if (status_get_arg_raw(JK_STATUS_ARG_CMD, s->query_string, buf, sizeof(buf), l) == JK_TRUE)
- *cmd = status_cmd_int(buf);
- if (status_get_arg_raw(JK_STATUS_ARG_MIME, s->query_string, buf, sizeof(buf), l) == JK_TRUE)
- *mime = status_mime_int(buf);
- if (status_get_arg_raw(JK_STATUS_ARG_FROM, s->query_string, buf, sizeof(buf), l) == JK_TRUE)
- *from = status_cmd_int(buf);
- *refresh = status_get_int(JK_STATUS_ARG_REFRESH, s->query_string, 0, l);
- if (status_get_arg(JK_STATUS_ARG_WORKER, s->query_string, buf, sizeof(buf), l) == JK_TRUE)
- strncpy(worker, buf, JK_SHM_STR_SIZ);
- if (status_get_arg(JK_STATUS_ARG_WORKER_MEMBER, s->query_string, buf, sizeof(buf), l) == JK_TRUE)
- strncpy(sub_worker, buf, JK_SHM_STR_SIZ);
- if (status_get_arg(JK_STATUS_ARG_OPTION, s->query_string, buf, sizeof(buf), l) == JK_TRUE)
- strncpy(option, buf, JK_SHM_STR_SIZ);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "standard request params cmd='%s' mime='%s' from='%s' refresh=%d "
- "worker='%s' sub worker='%s' option='%s'",
- status_cmd_text(*cmd), status_mime_text(*mime),
- status_cmd_text(*from), *refresh, worker, sub_worker, option);
- JK_TRACE_EXIT(l);
-}
-
-static void display_maps(jk_ws_service_t *s,
- jk_uri_worker_map_t *uwmap,
- const char *worker, jk_logger_t *l)
-{
- char buf[64];
- unsigned int i;
- int count=0;
- JK_TRACE_ENTER(l);
- for (i = 0; i < uwmap->size; i++) {
- uri_worker_record_t *uwr = uwmap->maps[i];
- if (!worker || strcmp(uwr->worker_name, worker)) {
- continue;
- }
- count++;
+ if (!jk_map_alloc(&(p->req_params))) {
+ jk_log(l, JK_LOG_ERROR,
+ "could not alloc map for request parameters");
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ if (!s->query_string) {
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "query string is empty");
+ JK_TRACE_EXIT(l);
+ return JK_TRUE;
}
- if (!count) {
- jk_putv(s, "<hr/><h3>Warning: No URI Mappings defined for ",
- worker, " !</h3>\n", NULL);
+ m = p->req_params;
+ query = jk_pool_strdup(s->pool, s->query_string);
+ if (!query) {
+ jk_log(l, JK_LOG_ERROR,
+ "could not copy string");
JK_TRACE_EXIT(l);
- return;
+ return JK_FALSE;
}
- count = 0;
- jk_putv(s, "<hr/><h3>URI Mappings for ", worker, "</h3>\n", NULL);
- jk_puts(s, "<table>\n");
- jk_printf(s, JK_STATUS_TABLE_HEAD_3_STRING,
- "Match Type", "Uri", "Source");
- for (i = 0; i < uwmap->size; i++) {
- uri_worker_record_t *uwr = uwmap->maps[i];
- if (!worker || strcmp(uwr->worker_name, worker)) {
- continue;
+#if defined(AS400) || defined(_REENTRANT)
+ for (param = strtok_r(query, "&", &lasts);
+ param; param = strtok_r(NULL, "&", &lasts)) {
+#else
+ for (param = strtok(query, "&"); param; param = strtok(NULL, "&")) {
+#endif
+ char *key = jk_pool_strdup(s->pool, param);
+ char *value;
+ if (!key) {
+ jk_log(l, JK_LOG_ERROR,
+ "could not copy string");
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ value = strchr(key, '=');
+ if (value) {
+ char *off;
+ *value = '\0';
+ value++;
+ /* XXX Depending on the params values, we might need to trim and decode */
+ /* XXX For now we simply mask special chars with '@' to prevent cross code injection */
+ off = value;
+ while ((off = strpbrk(off, JK_STATUS_ESC_CHARS)))
+ off[0] = '@';
+ if (strlen(key)) {
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "adding request param '%s' with value '%s'",
+ key, value);
+ jk_map_put(m, key, value, NULL);
+ }
}
- count++;
- jk_printf(s, JK_STATUS_TABLE_ROW_3_STRING,
- uri_worker_map_get_match(uwr, buf, l), uwr->uri,
- uri_worker_map_get_source(uwr, l));
}
- jk_puts(s, "</table>\n");
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "displayed %d maps for worker '%s'",
- count, worker);
+
JK_TRACE_EXIT(l);
+ return JK_TRUE;
}
-static void display_maps_xml(jk_ws_service_t *s,
- jk_uri_worker_map_t *uwmap,
- status_worker_t *sw,
- const char *worker, jk_logger_t *l)
+static void display_maps(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ const char *worker,
+ jk_logger_t *l)
{
char buf[64];
unsigned int i;
+ int mime;
+ unsigned int hide;
int count=0;
+ const char *arg;
+ status_worker_t *w = p->worker;
+ jk_uri_worker_map_t *uw_map = s->uw_map;
JK_TRACE_ENTER(l);
- for (i = 0; i < uwmap->size; i++) {
- uri_worker_record_t *uwr = uwmap->maps[i];
- if (!worker || strcmp(uwr->worker_name, worker)) {
+ status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
+ mime = status_mime_int(arg);
+ hide = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
+ JK_STATUS_ARG_OPTION_NO_MAPS;
+ for (i = 0; i < uw_map->size; i++) {
+ uri_worker_record_t *uwr = uw_map->maps[i];
+ if (strcmp(uwr->worker_name, worker)) {
continue;
}
count++;
}
- if (count) {
- jk_print_xml_start_elt(s, sw, 6, 0, "maps");
- jk_print_xml_att_int(s, 8, "size", count);
- jk_print_xml_stop_elt(s, 6, 0);
- }
- count = 0;
- for (i = 0; i < uwmap->size; i++) {
- uri_worker_record_t *uwr = uwmap->maps[i];
- if (!worker || strcmp(uwr->worker_name, worker)) {
- continue;
- }
- count++;
- jk_print_xml_start_elt(s, sw, 8, 0, "map");
- jk_print_xml_att_int(s, 10, "id", count);
- jk_print_xml_att_string(s, 10, "type", uri_worker_map_get_match(uwr, buf, l));
- jk_print_xml_att_string(s, 10, "uri", uwr->uri);
- jk_print_xml_att_string(s, 10, "source", uri_worker_map_get_source(uwr, l));
- jk_print_xml_stop_elt(s, 8, 1);
- }
- if (count)
- jk_print_xml_close_elt(s, sw, 6, "maps");
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "dumped %d maps for worker '%s'",
- count, worker);
- JK_TRACE_EXIT(l);
-}
-static void display_maps_txt(jk_ws_service_t *s,
- jk_uri_worker_map_t *uwmap,
- status_worker_t *sw,
- const char *worker, jk_logger_t *l)
-{
- char buf[64];
- unsigned int i;
- int count=0;
+ if (count) {
- JK_TRACE_ENTER(l);
- for (i = 0; i < uwmap->size; i++) {
- uri_worker_record_t *uwr = uwmap->maps[i];
- if (!worker || strcmp(uwr->worker_name, worker)) {
- continue;
+ if (hide) {
+ if (mime == JK_STATUS_MIME_HTML) {
+ jk_puts(s, "<p>\n");
+ status_write_uri(s, p, "Show URI Mappings", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_MAPS, NULL, l);
+ jk_puts(s, "</p>\n");
+ }
+ }
+ else {
+ if (mime == JK_STATUS_MIME_HTML) {
+ jk_printf(s, "<hr/><h3>URI Mappings for %s (%d maps) [", worker, count);
+ status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, JK_STATUS_ARG_OPTION_NO_MAPS, 0, NULL, l);
+ jk_puts(s, "]</h3><table>\n");
+ jk_printf(s, JK_STATUS_TABLE_HEAD_3_STRING,
+ "Match Type", "Uri", "Source");
+ }
+ else if (mime == JK_STATUS_MIME_XML) {
+ jk_print_xml_start_elt(s, w, 6, 0, "maps");
+ jk_print_xml_att_int(s, 8, "size", count);
+ jk_print_xml_stop_elt(s, 6, 0);
+ }
+ else if (mime == JK_STATUS_MIME_TXT) {
+ jk_printf(s, "Maps: size=%d\n", count);
+ }
+ else if (mime == JK_STATUS_MIME_PROP) {
+ jk_print_prop_att_int(s, w, worker, "maps.size", count);
+ }
}
- count++;
}
- if (count) {
- jk_printf(s, "Maps: size=%d\n", count);
+
+ if (hide) {
+ return;
+ JK_TRACE_EXIT(l);
}
+
count = 0;
- for (i = 0; i < uwmap->size; i++) {
- uri_worker_record_t *uwr = uwmap->maps[i];
- if (!worker || strcmp(uwr->worker_name, worker)) {
+ for (i = 0; i < uw_map->size; i++) {
+ uri_worker_record_t *uwr = uw_map->maps[i];
+ if (strcmp(uwr->worker_name, worker)) {
continue;
}
count++;
- jk_puts(s, "Map:");
- jk_printf(s, " id=%d", count);
- jk_printf(s, " type=\"%s\"", uri_worker_map_get_match(uwr, buf, l));
- jk_printf(s, " uri=\"%s\"", uwr->uri);
- jk_printf(s, " source=\"%s\"", uri_worker_map_get_source(uwr, l));
- jk_puts(s, "\n");
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "dumped %d maps for worker '%s'",
- count, worker);
- JK_TRACE_EXIT(l);
-}
-static void display_maps_prop(jk_ws_service_t *s,
- jk_uri_worker_map_t *uwmap,
- status_worker_t *sw,
- const char *worker, jk_logger_t *l)
-{
- char buf[64];
- char *mount;
- char *off;
- unsigned int i;
- int count=0;
-
- JK_TRACE_ENTER(l);
- for (i = 0; i < uwmap->size; i++) {
- uri_worker_record_t *uwr = uwmap->maps[i];
- if (!worker || strcmp(uwr->worker_name, worker)) {
- continue;
+ if (mime == JK_STATUS_MIME_HTML) {
+ jk_printf(s, JK_STATUS_TABLE_ROW_3_STRING,
+ uri_worker_map_get_match(uwr, buf, l), uwr->uri,
+ uri_worker_map_get_source(uwr, l));
+ }
+ else if (mime == JK_STATUS_MIME_XML) {
+ jk_print_xml_start_elt(s, w, 8, 0, "map");
+ jk_print_xml_att_int(s, 10, "id", count);
+ jk_print_xml_att_string(s, 10, "type", uri_worker_map_get_match(uwr, buf, l));
+ jk_print_xml_att_string(s, 10, "uri", uwr->uri);
+ jk_print_xml_att_string(s, 10, "source", uri_worker_map_get_source(uwr, l));
+ jk_print_xml_stop_elt(s, 8, 1);
+ }
+ else if (mime == JK_STATUS_MIME_TXT) {
+ jk_puts(s, "Map:");
+ jk_printf(s, " id=%d", count);
+ jk_printf(s, " type=\"%s\"", uri_worker_map_get_match(uwr, buf, l));
+ jk_printf(s, " uri=\"%s\"", uwr->uri);
+ jk_printf(s, " source=\"%s\"", uri_worker_map_get_source(uwr, l));
+ jk_puts(s, "\n");
+ }
+ else if (mime == JK_STATUS_MIME_PROP) {
+ char *mount = jk_pool_alloc(s->pool, sizeof(char *) * (strlen(uwr->uri)+3));
+ char *off = mount;
+ if (uwr->match_type & MATCH_TYPE_DISABLED) {
+ *off = '-';
+ off++;
+ }
+ if (uwr->match_type & MATCH_TYPE_NO_MATCH) {
+ *off = '!';
+ off++;
+ }
+ strcpy(off, uwr->uri);
+ jk_print_prop_att_string(s, w, worker, "mount", mount);
+ jk_print_prop_item_string(s, w, worker, "maps.map", count, "type", uri_worker_map_get_match(uwr, buf, l));
+ jk_print_prop_item_string(s, w, worker, "maps.map", count, "uri", uwr->uri);
+ jk_print_prop_item_string(s, w, worker, "maps.map", count, "source", uri_worker_map_get_source(uwr, l));
}
- count++;
}
if (count) {
- jk_print_prop_att_int(s, sw, worker, "maps.size", count);
+ if (mime == JK_STATUS_MIME_HTML) {
+ jk_puts(s, "</table>\n");
+ }
+ else if (mime == JK_STATUS_MIME_XML) {
+ jk_print_xml_close_elt(s, w, 6, "maps");
+ }
}
- count = 0;
- for (i = 0; i < uwmap->size; i++) {
- uri_worker_record_t *uwr = uwmap->maps[i];
- if (!worker || strcmp(uwr->worker_name, worker)) {
- continue;
+ else {
+ if (mime == JK_STATUS_MIME_HTML) {
+ jk_putv(s, "<hr/><h3>Warning: No URI Mappings defined for ",
+ worker, " !</h3>\n", NULL);
}
- count++;
- mount = jk_pool_alloc(s->pool, sizeof(char *) * (strlen(uwr->uri)+3));
- off = mount;
- if (uwr->match_type & MATCH_TYPE_DISABLED) {
- *off = '-';
- off++;
- }
- if (uwr->match_type & MATCH_TYPE_NO_MATCH) {
- *off = '!';
- off++;
- }
- strcpy(off, uwr->uri);
- jk_print_prop_att_string(s, sw, worker, "mount", mount);
- jk_print_prop_item_string(s, sw, worker, "maps.map", count, "type", uri_worker_map_get_match(uwr, buf, l));
- jk_print_prop_item_string(s, sw, worker, "maps.map", count, "uri", uwr->uri);
- jk_print_prop_item_string(s, sw, worker, "maps.map", count, "source", uri_worker_map_get_source(uwr, l));
}
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
- "dumped %d maps for worker '%s'",
+ "displayed %d maps for worker '%s'",
count, worker);
JK_TRACE_EXIT(l);
}
-static void display_worker(jk_ws_service_t *s, jk_worker_t *w,
- status_worker_t *sw,
- int show_members, int refresh, int single,
- jk_logger_t *l)
+static void display_worker_lb(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ lb_worker_t *lb,
+ jk_logger_t *l)
{
char buf[32];
- const char *name = NULL;
- int from = JK_STATUS_CMD_LIST;
- ajp_worker_t *aw = NULL;
- lb_worker_t *lb = NULL;
+ char buf_rd[32];
+ char buf_wr[32];
+ int cmd;
+ int mime;
+ int single = 0;
+ unsigned int hide_members;
+ const char *arg;
+ time_t now = time(NULL);
+ unsigned int good = 0;
+ unsigned int degraded = 0;
+ unsigned int bad = 0;
+ unsigned int j;
+ const char *name = lb->s->name;
+ status_worker_t *w = p->worker;
JK_TRACE_ENTER(l);
- if (single) {
- from = JK_STATUS_CMD_SHOW;
- }
- if (w->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)w->worker_private;
- name = lb->s->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "%s lb worker '%s'",
- single ? "showing" : "listing", name);
- }
- else if (w->type == JK_AJP13_WORKER_TYPE ||
- w->type == JK_AJP14_WORKER_TYPE) {
- aw = (ajp_worker_t *)w->worker_private;
- name = aw->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "%s ajp worker '%s'",
- single ? "showing" : "listing", name);
+ status_get_string(p, JK_STATUS_ARG_CMD, NULL, &arg, l);
+ cmd = status_cmd_int(arg);
+ status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
+ mime = status_mime_int(arg);
+ hide_members = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
+ JK_STATUS_ARG_OPTION_NO_MEMBERS;
+ if (cmd == JK_STATUS_CMD_SHOW) {
+ single = 1;
}
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker type not implemented");
- JK_TRACE_EXIT(l);
- return;
+
+ jk_shm_lock();
+ if (lb->sequence != lb->s->sequence)
+ jk_lb_pull(lb, l);
+ jk_shm_unlock();
+
+ for (j = 0; j < lb->num_of_workers; j++) {
+ worker_record_t *wr = &(lb->lb_workers[j]);
+ int rate;
+ rate = status_rate(wr, w, l);
+ if (rate > 0 )
+ good++;
+ else if (rate < 0 )
+ bad++;
+ else
+ degraded++;
}
- if (lb) {
- time_t now = time(NULL);
- unsigned int good = 0;
- unsigned int degraded = 0;
- unsigned int bad = 0;
- unsigned int j;
-
- jk_shm_lock();
- if (lb->sequence != lb->s->sequence)
- jk_lb_pull(lb, l);
- jk_shm_unlock();
+ if (mime == JK_STATUS_MIME_HTML) {
jk_puts(s, "<hr/><h3>[");
if (single) {
jk_puts(s, "S");
}
else {
- if (show_members) {
- status_write_uri(s, "S", JK_STATUS_CMD_SHOW,
- 0, 0, refresh, name, NULL, NULL);
- }
- else {
- status_write_uri(s, "S", JK_STATUS_CMD_SHOW,
- 0, 0, refresh, name, NULL, JK_STATUS_ATT_NO_MEMBERS);
- }
+ status_write_uri(s, p, "S", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, "", l);
}
jk_puts(s, "|");
- status_write_uri(s, "E", JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL, NULL);
+ status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, "", l);
jk_puts(s, "|");
- status_write_uri(s, "R", JK_STATUS_CMD_RESET,
- 0, from, refresh, name, NULL, NULL);
+ status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, "", l);
jk_puts(s, "] ");
jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL);
jk_puts(s, "<table>" JK_STATUS_SHOW_LB_HEAD);
jk_printf(s, JK_STATUS_SHOW_LB_ROW,
- status_worker_type(w->type),
+ status_worker_type(JK_LB_WORKER_TYPE),
status_val_bool(lb->sticky_session),
status_val_bool(lb->sticky_session_force),
lb->retries,
@@ -1231,18 +1241,6 @@
lb->recover_wait_time);
jk_puts(s, "</table>\n<br/>\n");
- for (j = 0; j < lb->num_of_workers; j++) {
- worker_record_t *wr = &(lb->lb_workers[j]);
- int rate;
- rate = status_rate(wr, sw, l);
- if (rate > 0 )
- good++;
- else if (rate < 0 )
- bad++;
- else
- degraded++;
- }
-
jk_puts(s, "<table><tr>"
"<th>Good</th><th>Degraded</th><th>Bad/Stopped</th><th>Busy</th><th>Max Busy</th>"
"</tr>\n<tr>");
@@ -1252,33 +1250,103 @@
jk_printf(s, "<td>%d</td>", lb->s->busy);
jk_printf(s, "<td>%d</td>", lb->s->max_busy);
jk_puts(s, "</tr>\n</table>\n\n");
- if (show_members) {
+
+ }
+ else if (mime == JK_STATUS_MIME_XML) {
+
+ jk_print_xml_start_elt(s, w, 2, 0, "balancer");
+ jk_print_xml_att_string(s, 4, "name", name);
+ jk_print_xml_att_string(s, 4, "type", status_worker_type(JK_LB_WORKER_TYPE));
+ jk_print_xml_att_string(s, 4, "sticky_session", status_val_bool(lb->sticky_session));
+ jk_print_xml_att_string(s, 4, "sticky_session_force", status_val_bool(lb->sticky_session_force));
+ jk_print_xml_att_int(s, 4, "retries", lb->retries);
+ jk_print_xml_att_int(s, 4, "recover_time", lb->recover_wait_time);
+ jk_print_xml_att_string(s, 4, "method", jk_lb_get_method(lb, l));
+ jk_print_xml_att_string(s, 4, "lock", jk_lb_get_lock(lb, l));
+ jk_print_xml_att_int(s, 4, "member_count", lb->num_of_workers);
+ jk_print_xml_att_int(s, 4, "good", good);
+ jk_print_xml_att_int(s, 4, "degraded", degraded);
+ jk_print_xml_att_int(s, 4, "bad", bad);
+ jk_print_xml_att_int(s, 4, "busy", lb->s->busy);
+ jk_print_xml_att_int(s, 4, "max_busy", lb->s->max_busy);
+ jk_print_xml_stop_elt(s, 2, 0);
+
+ }
+ else if (mime == JK_STATUS_MIME_TXT) {
+
+ jk_puts(s, "Balancer Worker:");
+ jk_printf(s, " name=%s", name);
+ jk_printf(s, " type=%s", status_worker_type(JK_LB_WORKER_TYPE));
+ jk_printf(s, " sticky_session=%s", status_val_bool(lb->sticky_session));
+ jk_printf(s, " sticky_session_force=%s", status_val_bool(lb->sticky_session_force));
+ jk_printf(s, " retries=%d", lb->retries);
+ jk_printf(s, " recover_time=%d", lb->recover_wait_time);
+ jk_printf(s, " method=%s", jk_lb_get_method(lb, l));
+ jk_printf(s, " lock=%s", jk_lb_get_lock(lb, l));
+ jk_printf(s, " member_count=%d", lb->num_of_workers);
+ jk_printf(s, " good=%d", good);
+ jk_printf(s, " degraded=%d", degraded);
+ jk_printf(s, " bad=%d", bad);
+ jk_printf(s, " busy=%d", lb->s->busy);
+ jk_printf(s, " max_busy=%d", lb->s->max_busy);
+ jk_puts(s, "\n");
+
+ }
+ else if (mime == JK_STATUS_MIME_PROP) {
+
+ jk_print_prop_att_string(s, w, NULL, "list", name);
+ jk_print_prop_att_string(s, w, name, "type", status_worker_type(JK_LB_WORKER_TYPE));
+ jk_print_prop_att_string(s, w, name, "sticky_session", status_val_bool(lb->sticky_session));
+ jk_print_prop_att_string(s, w, name, "sticky_session_force", status_val_bool(lb->sticky_session_force));
+ jk_print_prop_att_int(s, w, name, "retries", lb->retries);
+ jk_print_prop_att_int(s, w, name, "recover_time", lb->recover_wait_time);
+ jk_print_prop_att_string(s, w, name, "method", jk_lb_get_method(lb, l));
+ jk_print_prop_att_string(s, w, name, "lock", jk_lb_get_lock(lb, l));
+ jk_print_prop_att_int(s, w, name, "member_count", lb->num_of_workers);
+ jk_print_prop_att_int(s, w, name, "good", good);
+ jk_print_prop_att_int(s, w, name, "degraded", degraded);
+ jk_print_prop_att_int(s, w, name, "bad", bad);
+ jk_print_prop_att_int(s, w, name, "busy", lb->s->busy);
+ jk_print_prop_att_int(s, w, name, "max_busy", lb->s->max_busy);
+
+ }
+
+ if (!hide_members) {
+
+ if (mime == JK_STATUS_MIME_HTML) {
+
jk_puts(s, "<h4>Balancer Members [");
if (single) {
- status_write_uri(s, "Hide", JK_STATUS_CMD_SHOW,
- JK_STATUS_MIME_HTML, from, refresh, name, NULL, JK_STATUS_ATT_NO_MEMBERS);
+ status_write_uri(s, p, "Hide", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, JK_STATUS_ARG_OPTION_NO_MEMBERS, 0, "", l);
}
else {
- status_write_uri(s, "Hide", JK_STATUS_CMD_LIST,
- JK_STATUS_MIME_HTML, from, refresh, name, NULL, JK_STATUS_ATT_NO_MEMBERS);
+ status_write_uri(s, p, "Hide", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, JK_STATUS_ARG_OPTION_NO_MEMBERS, 0, "", l);
}
jk_puts(s, "]</h4>\n");
jk_puts(s, "<table>" JK_STATUS_SHOW_MEMBER_HEAD);
- for (j = 0; j < lb->num_of_workers; j++) {
- worker_record_t *wr = &(lb->lb_workers[j]);
- ajp_worker_t *a = (ajp_worker_t *)wr->w->worker_private;
- int rs = 0;
- if (wr->s->state == JK_LB_STATE_ERROR) {
- rs = lb->maintain_time - (int)difftime(now, lb->s->last_maintain_time);
- if (rs < lb->recover_wait_time - (int)difftime(now, wr->s->error_time))
- rs += lb->maintain_time;
- }
+
+ }
+
+ for (j = 0; j < lb->num_of_workers; j++) {
+ worker_record_t *wr = &(lb->lb_workers[j]);
+ ajp_worker_t *a = (ajp_worker_t *)wr->w->worker_private;
+ int rs = 0;
+ if (wr->s->state == JK_LB_STATE_ERROR) {
+ rs = lb->maintain_time - (int)difftime(now, lb->s->last_maintain_time);
+ if (rs < lb->recover_wait_time - (int)difftime(now, wr->s->error_time))
+ rs += lb->maintain_time;
+ }
+
+ if (mime == JK_STATUS_MIME_HTML) {
+
jk_puts(s, "<tr>\n<td>[");
- status_write_uri(s, "E", JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, wr->s->name, NULL);
+ status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+ name, wr->s->name, 0, 0, "", l);
jk_puts(s, "|");
- status_write_uri(s, "R", JK_STATUS_CMD_RESET,
- 0, from, refresh, name, wr->s->name, NULL);
+ status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,
+ name, wr->s->name, 0, 0, "", l);
jk_puts(s, "] </td>");
jk_printf(s, JK_STATUS_SHOW_MEMBER_ROW,
wr->s->name,
@@ -1294,291 +1362,47 @@
wr->s->elected,
wr->s->errors,
wr->s->client_errors,
- status_strfsize(wr->s->transferred, buf),
- status_strfsize(wr->s->readed, buf),
+ status_strfsize(wr->s->transferred, buf_wr),
+ status_strfsize(wr->s->readed, buf_rd),
wr->s->busy,
wr->s->max_busy,
wr->s->route,
- wr->s->redirect ? (*wr->s->redirect ? wr->s->redirect : " ") : " ",
- wr->s->domain ? (*wr->s->domain ? wr->s->domain : " ") : " ",
- rs);
- }
- jk_puts(s, "</table><br/>\n");
- jk_puts(s, "<b>E</b>dit one attribute for all members: [");
- status_write_uri(s, JK_STATUS_ARG_LBM_TEXT_ACTIVATION, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL, JK_STATUS_ARG_LBM_ACTIVATION);
- jk_puts(s, "\n|");
- status_write_uri(s, JK_STATUS_ARG_LBM_TEXT_FACTOR, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL, JK_STATUS_ARG_LBM_FACTOR);
- jk_puts(s, "\n|");
- status_write_uri(s, JK_STATUS_ARG_LBM_TEXT_ROUTE, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL, JK_STATUS_ARG_LBM_ROUTE);
- jk_puts(s, "\n|");
- status_write_uri(s, JK_STATUS_ARG_LBM_TEXT_REDIRECT, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL, JK_STATUS_ARG_LBM_REDIRECT);
- jk_puts(s, "\n|");
- status_write_uri(s, JK_STATUS_ARG_LBM_TEXT_DOMAIN, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL, JK_STATUS_ARG_LBM_DOMAIN);
- jk_puts(s, "\n|");
- status_write_uri(s, JK_STATUS_ARG_LBM_TEXT_DISTANCE, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL, JK_STATUS_ARG_LBM_DISTANCE);
- jk_puts(s, "\n]<br/>\n");
- }
- else {
- jk_puts(s, "<p>\n");
- if (single) {
- status_write_uri(s, "Show Balancer Members", JK_STATUS_CMD_SHOW,
- JK_STATUS_MIME_HTML, from, refresh, name, NULL, NULL);
- }
- else {
- status_write_uri(s, "Show Balancer Members", JK_STATUS_CMD_LIST,
- JK_STATUS_MIME_HTML, from, refresh, name, NULL, NULL);
- }
- jk_puts(s, "</p>\n");
- }
-
- }
- else if (aw) {
- jk_puts(s, "<hr/><h3>[");
- if (single)
- jk_puts(s, "S");
- else
- status_write_uri(s, "S", JK_STATUS_CMD_SHOW,
- 0, from, refresh, name, NULL, NULL);
- jk_puts(s, "] ");
- jk_putv(s, "Worker Status for ", name, "<h3/>\n", NULL);
- jk_puts(s, "<table>" JK_STATUS_SHOW_AJP_HEAD);
- jk_printf(s, JK_STATUS_SHOW_AJP_ROW,
- status_worker_type(w->type),
- aw->host, aw->port,
- jk_dump_hinfo(&aw->worker_inet_addr, buf));
- jk_puts(s, "</table>\n");
- }
- if (name)
- display_maps(s, s->uw_map, name, l);
- JK_TRACE_EXIT(l);
-}
-
-static void display_worker_xml(jk_ws_service_t *s, jk_worker_t *w,
- status_worker_t *sw, int show_members, int single,
- jk_logger_t *l)
-{
- char buf[32];
- const char *name = NULL;
- ajp_worker_t *aw = NULL;
- lb_worker_t *lb = NULL;
-
- JK_TRACE_ENTER(l);
- if (w->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)w->worker_private;
- name = lb->s->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "%s lb worker '%s' as xml",
- single ? "showing" : "listing", name);
- }
- else if (w->type == JK_AJP13_WORKER_TYPE ||
- w->type == JK_AJP14_WORKER_TYPE) {
- aw = (ajp_worker_t *)w->worker_private;
- name = aw->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "%s ajp worker '%s' as xml",
- single ? "showing" : "listing", name);
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker type not implemented");
- JK_TRACE_EXIT(l);
- return;
- }
-
- if (lb) {
- time_t now = time(NULL);
- unsigned int good = 0;
- unsigned int degraded = 0;
- unsigned int bad = 0;
- unsigned int j;
-
- jk_shm_lock();
- if (lb->sequence != lb->s->sequence)
- jk_lb_pull(lb, l);
- jk_shm_unlock();
-
- for (j = 0; j < lb->num_of_workers; j++) {
- worker_record_t *wr = &(lb->lb_workers[j]);
- int rate;
- rate = status_rate(wr, sw, l);
- if (rate > 0 )
- good++;
- else if (rate < 0 )
- bad++;
- else
- degraded++;
- }
-
- jk_print_xml_start_elt(s, sw, 2, 0, "balancer");
- jk_print_xml_att_string(s, 4, "name", name);
- jk_print_xml_att_string(s, 4, "type", status_worker_type(w->type));
- jk_print_xml_att_string(s, 4, "sticky_session", status_val_bool(lb->sticky_session));
- jk_print_xml_att_string(s, 4, "sticky_session_force", status_val_bool(lb->sticky_session_force));
- jk_print_xml_att_int(s, 4, "retries", lb->retries);
- jk_print_xml_att_int(s, 4, "recover_time", lb->recover_wait_time);
- jk_print_xml_att_string(s, 4, "method", jk_lb_get_method(lb, l));
- jk_print_xml_att_string(s, 4, "lock", jk_lb_get_lock(lb, l));
- jk_print_xml_att_int(s, 4, "member_count", lb->num_of_workers);
- jk_print_xml_att_int(s, 4, "good", good);
- jk_print_xml_att_int(s, 4, "degraded", degraded);
- jk_print_xml_att_int(s, 4, "bad", bad);
- jk_print_xml_att_int(s, 4, "busy", lb->s->busy);
- jk_print_xml_att_int(s, 4, "max_busy", lb->s->max_busy);
- jk_print_xml_stop_elt(s, 2, 0);
-
- if (show_members) {
- for (j = 0; j < lb->num_of_workers; j++) {
- worker_record_t *wr = &(lb->lb_workers[j]);
- ajp_worker_t *a = (ajp_worker_t *)wr->w->worker_private;
- int rs = 0;
- if (wr->s->state == JK_LB_STATE_ERROR) {
- rs = lb->maintain_time - (int)difftime(now, lb->s->last_maintain_time);
- if (rs < lb->recover_wait_time - (int)difftime(now, wr->s->error_time))
- rs += lb->maintain_time;
- }
- /* TODO: descriptive status */
- jk_print_xml_start_elt(s, sw, 6, 0, "member");
- jk_print_xml_att_string(s, 8, "name", wr->s->name);
- jk_print_xml_att_string(s, 8, "type", status_worker_type(wr->w->type));
- jk_print_xml_att_string(s, 8, "host", a->host);
- jk_print_xml_att_int(s, 8, "port", a->port);
- jk_print_xml_att_string(s, 8, "address", jk_dump_hinfo(&a->worker_inet_addr, buf));
- jk_print_xml_att_string(s, 8, "activation", jk_lb_get_activation(wr, l));
- jk_print_xml_att_int(s, 8, "lbfactor", wr->s->lb_factor);
- jk_print_xml_att_string(s, 8, "route", wr->s->route);
- jk_print_xml_att_string(s, 8, "redirect", wr->s->redirect);
- jk_print_xml_att_string(s, 8, "domain", wr->s->domain);
- jk_print_xml_att_int(s, 8, "distance", wr->s->distance);
- jk_print_xml_att_string(s, 8, "state", jk_lb_get_state(wr, l));
- jk_print_xml_att_uint64(s, 8, "lbmult", wr->s->lb_mult);
- jk_print_xml_att_uint64(s, 8, "lbvalue", wr->s->lb_value);
- jk_print_xml_att_uint64(s, 8, "elected", wr->s->elected);
- jk_print_xml_att_uint32(s, 8, "errors", wr->s->errors);
- jk_print_xml_att_uint32(s, 8, "client_errors", wr->s->client_errors);
- jk_print_xml_att_uint64(s, 8, "transferred", wr->s->transferred);
- jk_print_xml_att_uint64(s, 8, "read", wr->s->readed);
- jk_print_xml_att_uint(s, 8, "busy", wr->s->busy);
- jk_print_xml_att_uint(s, 8, "max_busy", wr->s->max_busy);
- jk_print_xml_att_uint(s, 8, "time_to_recover", rs < 0 ? 0 : rs);
- /* Terminate the tag */
- jk_print_xml_stop_elt(s, 6, 1);
- }
- }
- if (name)
- display_maps_xml(s, s->uw_map, sw, name, l);
- jk_print_xml_close_elt(s, sw, 2, "balancer");
- }
- else if (aw) {
- jk_print_xml_start_elt(s, sw, 0, 0, "ajp");
- jk_print_xml_att_string(s, 2, "name", name);
- jk_print_xml_att_string(s, 2, "type", status_worker_type(w->type));
- jk_print_xml_att_string(s, 2, "host", aw->host);
- jk_print_xml_att_int(s, 2, "port", aw->port);
- jk_print_xml_att_string(s, 2, "address", jk_dump_hinfo(&aw->worker_inet_addr, buf));
- /* Terminate the tag */
- jk_print_xml_stop_elt(s, 0, 0);
- if (name)
- display_maps_xml(s, s->uw_map, sw, name, l);
- jk_print_xml_close_elt(s, sw, 0, "ajp");
- }
- JK_TRACE_EXIT(l);
-}
-
-static void display_worker_txt(jk_ws_service_t *s, jk_worker_t *w,
- status_worker_t *sw, int show_members, int single,
- jk_logger_t *l)
-{
- char buf[32];
- const char *name = NULL;
- ajp_worker_t *aw = NULL;
- lb_worker_t *lb = NULL;
-
- JK_TRACE_ENTER(l);
- if (w->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)w->worker_private;
- name = lb->s->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "%s lb worker '%s' as txt",
- single ? "showing" : "listing", name);
- }
- else if (w->type == JK_AJP13_WORKER_TYPE ||
- w->type == JK_AJP14_WORKER_TYPE) {
- aw = (ajp_worker_t *)w->worker_private;
- name = aw->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "%s ajp worker '%s' as txt",
- single ? "showing" : "listing", name);
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker type not implemented");
- JK_TRACE_EXIT(l);
- return;
- }
+ wr->s->redirect ? (*wr->s->redirect ? wr->s->redirect : " ") : " ",
+ wr->s->domain ? (*wr->s->domain ? wr->s->domain : " ") : " ",
+ rs);
- if (lb) {
- time_t now = time(NULL);
- unsigned int good = 0;
- unsigned int degraded = 0;
- unsigned int bad = 0;
- unsigned int j;
-
- jk_shm_lock();
- if (lb->sequence != lb->s->sequence)
- jk_lb_pull(lb, l);
- jk_shm_unlock();
+ }
+ else if (mime == JK_STATUS_MIME_XML) {
- for (j = 0; j < lb->num_of_workers; j++) {
- worker_record_t *wr = &(lb->lb_workers[j]);
- int rate;
- rate = status_rate(wr, sw, l);
- if (rate > 0 )
- good++;
- else if (rate < 0 )
- bad++;
- else
- degraded++;
- }
+ jk_print_xml_start_elt(s, w, 6, 0, "member");
+ jk_print_xml_att_string(s, 8, "name", wr->s->name);
+ jk_print_xml_att_string(s, 8, "type", status_worker_type(wr->w->type));
+ jk_print_xml_att_string(s, 8, "host", a->host);
+ jk_print_xml_att_int(s, 8, "port", a->port);
+ jk_print_xml_att_string(s, 8, "address", jk_dump_hinfo(&a->worker_inet_addr, buf));
+ jk_print_xml_att_string(s, 8, "activation", jk_lb_get_activation(wr, l));
+ jk_print_xml_att_int(s, 8, "lbfactor", wr->s->lb_factor);
+ jk_print_xml_att_string(s, 8, "route", wr->s->route);
+ jk_print_xml_att_string(s, 8, "redirect", wr->s->redirect);
+ jk_print_xml_att_string(s, 8, "domain", wr->s->domain);
+ jk_print_xml_att_int(s, 8, "distance", wr->s->distance);
+ jk_print_xml_att_string(s, 8, "state", jk_lb_get_state(wr, l));
+ jk_print_xml_att_uint64(s, 8, "lbmult", wr->s->lb_mult);
+ jk_print_xml_att_uint64(s, 8, "lbvalue", wr->s->lb_value);
+ jk_print_xml_att_uint64(s, 8, "elected", wr->s->elected);
+ jk_print_xml_att_uint32(s, 8, "errors", wr->s->errors);
+ jk_print_xml_att_uint32(s, 8, "client_errors", wr->s->client_errors);
+ jk_print_xml_att_uint64(s, 8, "transferred", wr->s->transferred);
+ jk_print_xml_att_uint64(s, 8, "read", wr->s->readed);
+ jk_print_xml_att_uint(s, 8, "busy", wr->s->busy);
+ jk_print_xml_att_uint(s, 8, "max_busy", wr->s->max_busy);
+ jk_print_xml_att_uint(s, 8, "time_to_recover", rs < 0 ? 0 : rs);
+ /* Terminate the tag */
+ jk_print_xml_stop_elt(s, 6, 1);
- jk_puts(s, "Balancer Worker:");
- jk_printf(s, " name=%s", name);
- jk_printf(s, " type=%s", status_worker_type(w->type));
- jk_printf(s, " sticky_session=%s", status_val_bool(lb->sticky_session));
- jk_printf(s, " sticky_session_force=%s", status_val_bool(lb->sticky_session_force));
- jk_printf(s, " retries=%d", lb->retries);
- jk_printf(s, " recover_time=%d", lb->recover_wait_time);
- jk_printf(s, " method=%s", jk_lb_get_method(lb, l));
- jk_printf(s, " lock=%s", jk_lb_get_lock(lb, l));
- jk_printf(s, " member_count=%d", lb->num_of_workers);
- jk_printf(s, " good=%d", good);
- jk_printf(s, " degraded=%d", degraded);
- jk_printf(s, " bad=%d", bad);
- jk_printf(s, " busy=%d", lb->s->busy);
- jk_printf(s, " max_busy=%d", lb->s->max_busy);
- jk_puts(s, "\n");
+ }
+ else if (mime == JK_STATUS_MIME_TXT) {
- if (show_members) {
- for (j = 0; j < lb->num_of_workers; j++) {
- worker_record_t *wr = &(lb->lb_workers[j]);
- ajp_worker_t *a = (ajp_worker_t *)wr->w->worker_private;
- int rs = 0;
- if (wr->s->state == JK_LB_STATE_ERROR) {
- rs = lb->maintain_time - (int)difftime(now, lb->s->last_maintain_time);
- if (rs < lb->recover_wait_time - (int)difftime(now, wr->s->error_time))
- rs += lb->maintain_time;
- }
jk_puts(s, "Member:");
jk_printf(s, " name=%s", wr->s->name);
jk_printf(s, " type=%s", status_worker_type(wr->w->type));
@@ -1603,49 +1427,206 @@
jk_printf(s, " max_busy=%u", wr->s->max_busy);
jk_printf(s, " time_to_recover=%u", rs < 0 ? 0 : rs);
jk_puts(s, "\n");
+
+ }
+ else if (mime == JK_STATUS_MIME_PROP) {
+
+ jk_print_prop_att_string(s, w, name, "balance_workers", wr->s->name);
+ jk_print_prop_att_string(s, w, wr->s->name, "type", status_worker_type(wr->w->type));
+ jk_print_prop_att_string(s, w, wr->s->name, "host", a->host);
+ jk_print_prop_att_int(s, w, wr->s->name, "port", a->port);
+ jk_print_prop_att_string(s, w, wr->s->name, "address", jk_dump_hinfo(&a->worker_inet_addr, buf));
+ jk_print_prop_att_string(s, w, wr->s->name, "activation", jk_lb_get_activation(wr, l));
+ jk_print_prop_att_int(s, w, wr->s->name, "lbfactor", wr->s->lb_factor);
+ jk_print_prop_att_string(s, w, wr->s->name, "route", wr->s->route);
+ jk_print_prop_att_string(s, w, wr->s->name, "redirect", wr->s->redirect);
+ jk_print_prop_att_string(s, w, wr->s->name, "domain", wr->s->domain);
+ jk_print_prop_att_int(s, w, wr->s->name, "distance", wr->s->distance);
+ jk_print_prop_att_string(s, w, wr->s->name, "state", jk_lb_get_state(wr, l));
+ jk_print_prop_att_uint64(s, w, wr->s->name, "lbmult", wr->s->lb_mult);
+ jk_print_prop_att_uint64(s, w, wr->s->name, "lbvalue", wr->s->lb_value);
+ jk_print_prop_att_uint64(s, w, wr->s->name, "elected", wr->s->elected);
+ jk_print_prop_att_uint32(s, w, wr->s->name, "errors", wr->s->errors);
+ jk_print_prop_att_uint32(s, w, wr->s->name, "client_errors", wr->s->client_errors);
+ jk_print_prop_att_uint64(s, w, wr->s->name, "transferred", wr->s->transferred);
+ jk_print_prop_att_uint64(s, w, wr->s->name, "read", wr->s->readed);
+ jk_print_prop_att_uint(s, w, wr->s->name, "busy", wr->s->busy);
+ jk_print_prop_att_uint(s, w, wr->s->name, "max_busy", wr->s->max_busy);
+ jk_print_prop_att_uint(s, w, wr->s->name, "time_to_recover", rs < 0 ? 0 : rs);
+
+ }
+ }
+
+ if (mime == JK_STATUS_MIME_HTML) {
+
+ jk_puts(s, "</table><br/>\n");
+ jk_puts(s, "<b>E</b>dit one attribute for all members: [");
+ status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ACTIVATION, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, JK_STATUS_ARG_LBM_ACTIVATION, l);
+ jk_puts(s, "\n|");
+ status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_FACTOR, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, JK_STATUS_ARG_LBM_FACTOR, l);
+ jk_puts(s, "\n|");
+ status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ROUTE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, JK_STATUS_ARG_LBM_ROUTE, l);
+ jk_puts(s, "\n|");
+ status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_REDIRECT, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, JK_STATUS_ARG_LBM_REDIRECT, l);
+ jk_puts(s, "\n|");
+ status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DOMAIN, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, JK_STATUS_ARG_LBM_DOMAIN, l);
+ jk_puts(s, "\n|");
+ status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DISTANCE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, JK_STATUS_ARG_LBM_DISTANCE, l);
+ jk_puts(s, "\n]<br/>\n");
+
+ }
+
+ }
+ else {
+
+ if (mime == JK_STATUS_MIME_HTML) {
+
+ jk_puts(s, "<p>\n");
+ if (single) {
+ status_write_uri(s, p, "Show Balancer Members", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_MEMBERS, "", l);
+ }
+ else {
+ status_write_uri(s, p, "Show Balancer Members", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_MEMBERS, "", l);
}
+ jk_puts(s, "</p>\n");
}
+
+ }
+
+ if (name)
+ display_maps(s, p, name, l);
+
+ if (mime == JK_STATUS_MIME_XML) {
+ jk_print_xml_close_elt(s, w, 2, "balancer");
+ }
+
+ JK_TRACE_EXIT(l);
+}
+
+static void display_worker_ajp(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ ajp_worker_t *aw,
+ jk_logger_t *l)
+{
+ char buf[32];
+ int cmd;
+ int mime;
+ int single = 0;
+ const char *arg;
+ const char *name = aw->name;
+ status_worker_t *w = p->worker;
+
+ JK_TRACE_ENTER(l);
+ status_get_string(p, JK_STATUS_ARG_CMD, NULL, &arg, l);
+ cmd = status_cmd_int(arg);
+ status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
+ mime = status_mime_int(arg);
+ if (cmd == JK_STATUS_CMD_SHOW) {
+ single = 1;
+ }
+
+ if (mime == JK_STATUS_MIME_HTML) {
+
+ jk_puts(s, "<hr/><h3>[");
+ if (single)
+ jk_puts(s, "S");
+ else
+ status_write_uri(s, p, "S", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
+ name, "", 0, 0, "", l);
+ jk_puts(s, "] ");
+ jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL);
+ jk_puts(s, "<table>" JK_STATUS_SHOW_AJP_HEAD);
+ jk_printf(s, JK_STATUS_SHOW_AJP_ROW,
+ status_worker_type(aw->worker.type),
+ aw->host, aw->port,
+ jk_dump_hinfo(&aw->worker_inet_addr, buf));
+ jk_puts(s, "</table>\n");
+
+ }
+ else if (mime == JK_STATUS_MIME_XML) {
+
+ jk_print_xml_start_elt(s, w, 0, 0, "ajp");
+ jk_print_xml_att_string(s, 2, "name", name);
+ jk_print_xml_att_string(s, 2, "type", status_worker_type(aw->worker.type));
+ jk_print_xml_att_string(s, 2, "host", aw->host);
+ jk_print_xml_att_int(s, 2, "port", aw->port);
+ jk_print_xml_att_string(s, 2, "address", jk_dump_hinfo(&aw->worker_inet_addr, buf));
+ /* Terminate the tag */
+ jk_print_xml_stop_elt(s, 0, 0);
+
}
- else if (aw) {
+ else if (mime == JK_STATUS_MIME_TXT) {
+
jk_puts(s, "AJP Worker:");
jk_printf(s, " name=%s", name);
- jk_printf(s, " type=%s", status_worker_type(w->type));
+ jk_printf(s, " type=%s", status_worker_type(aw->worker.type));
jk_printf(s, " host=%s", aw->host);
jk_printf(s, " port=%d", aw->port);
jk_printf(s, " address=%s", jk_dump_hinfo(&aw->worker_inet_addr, buf));
jk_puts(s, "\n");
+
+ }
+ else if (mime == JK_STATUS_MIME_PROP) {
+
+ jk_print_prop_att_string(s, w, NULL, "list", name);
+ jk_print_prop_att_string(s, w, name, "type", status_worker_type(aw->worker.type));
+ jk_print_prop_att_string(s, w, name, "host", aw->host);
+ jk_print_prop_att_int(s, w, name, "port", aw->port);
+ jk_print_prop_att_string(s, w, name, "address", jk_dump_hinfo(&aw->worker_inet_addr, buf));
+
}
if (name)
- display_maps_txt(s, s->uw_map, sw, name, l);
+ display_maps(s, p, name, l);
+
+ if (mime == JK_STATUS_MIME_XML) {
+ jk_print_xml_close_elt(s, w, 0, "ajp");
+ }
+
JK_TRACE_EXIT(l);
}
-static void display_worker_prop(jk_ws_service_t *s, jk_worker_t *w,
- status_worker_t *sw, int show_members, int single,
- jk_logger_t *l)
+static void display_worker(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ jk_worker_t *jw,
+ jk_logger_t *l)
{
- char buf[32];
- const char *name = NULL;
- ajp_worker_t *aw = NULL;
- lb_worker_t *lb = NULL;
-
JK_TRACE_ENTER(l);
- if (w->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)w->worker_private;
- name = lb->s->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "%s lb worker '%s' as txt",
- single ? "showing" : "listing", name);
+ if (jw->type == JK_LB_WORKER_TYPE) {
+ lb_worker_t *lb = (lb_worker_t *)jw->worker_private;
+ if (lb) {
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "%s lb worker '%s'",
+ "displaying", lb->s->name);
+ display_worker_lb(s, p, lb, l);
+ }
+ else {
+ jk_log(l, JK_LOG_WARNING,
+ "lb worker is (null)");
+ }
}
- else if (w->type == JK_AJP13_WORKER_TYPE ||
- w->type == JK_AJP14_WORKER_TYPE) {
- aw = (ajp_worker_t *)w->worker_private;
- name = aw->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "%s ajp worker '%s' as txt",
- single ? "showing" : "listing", name);
+ else if (jw->type == JK_AJP13_WORKER_TYPE ||
+ jw->type == JK_AJP14_WORKER_TYPE) {
+ ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
+ if (aw) {
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "%s ajp worker '%s'",
+ "displaying", aw->name);
+ display_worker_ajp(s, p, aw, l);
+ }
+ else {
+ jk_log(l, JK_LOG_WARNING,
+ "aw worker is (null)");
+ }
}
else {
if (JK_IS_DEBUG_LEVEL(l))
@@ -1654,102 +1635,19 @@
JK_TRACE_EXIT(l);
return;
}
-
- jk_print_prop_att_string(s, sw, NULL, "list", name);
- if (lb) {
- time_t now = time(NULL);
- unsigned int good = 0;
- unsigned int degraded = 0;
- unsigned int bad = 0;
- unsigned int j;
-
- jk_shm_lock();
- if (lb->sequence != lb->s->sequence)
- jk_lb_pull(lb, l);
- jk_shm_unlock();
-
- for (j = 0; j < lb->num_of_workers; j++) {
- worker_record_t *wr = &(lb->lb_workers[j]);
- int rate;
- rate = status_rate(wr, sw, l);
- if (rate > 0 )
- good++;
- else if (rate < 0 )
- bad++;
- else
- degraded++;
- }
-
- jk_print_prop_att_string(s, sw, name, "type", status_worker_type(w->type));
- jk_print_prop_att_string(s, sw, name, "sticky_session", status_val_bool(lb->sticky_session));
- jk_print_prop_att_string(s, sw, name, "sticky_session_force", status_val_bool(lb->sticky_session_force));
- jk_print_prop_att_int(s, sw, name, "retries", lb->retries);
- jk_print_prop_att_int(s, sw, name, "recover_time", lb->recover_wait_time);
- jk_print_prop_att_string(s, sw, name, "method", jk_lb_get_method(lb, l));
- jk_print_prop_att_string(s, sw, name, "lock", jk_lb_get_lock(lb, l));
- jk_print_prop_att_int(s, sw, name, "member_count", lb->num_of_workers);
- jk_print_prop_att_int(s, sw, name, "good", good);
- jk_print_prop_att_int(s, sw, name, "degraded", degraded);
- jk_print_prop_att_int(s, sw, name, "bad", bad);
- jk_print_prop_att_int(s, sw, name, "busy", lb->s->busy);
- jk_print_prop_att_int(s, sw, name, "max_busy", lb->s->max_busy);
-
- if (show_members) {
- for (j = 0; j < lb->num_of_workers; j++) {
- worker_record_t *wr = &(lb->lb_workers[j]);
- ajp_worker_t *a = (ajp_worker_t *)wr->w->worker_private;
- int rs = 0;
- if (wr->s->state == JK_LB_STATE_ERROR) {
- rs = lb->maintain_time - (int)difftime(now, lb->s->last_maintain_time);
- if (rs < lb->recover_wait_time - (int)difftime(now, wr->s->error_time))
- rs += lb->maintain_time;
- }
- jk_print_prop_att_string(s, sw, name, "balance_workers", wr->s->name);
- jk_print_prop_att_string(s, sw, wr->s->name, "type", status_worker_type(wr->w->type));
- jk_print_prop_att_string(s, sw, wr->s->name, "host", a->host);
- jk_print_prop_att_int(s, sw, wr->s->name, "port", a->port);
- jk_print_prop_att_string(s, sw, wr->s->name, "address", jk_dump_hinfo(&a->worker_inet_addr, buf));
- jk_print_prop_att_string(s, sw, wr->s->name, "activation", jk_lb_get_activation(wr, l));
- jk_print_prop_att_int(s, sw, wr->s->name, "lbfactor", wr->s->lb_factor);
- jk_print_prop_att_string(s, sw, wr->s->name, "route", wr->s->route);
- jk_print_prop_att_string(s, sw, wr->s->name, "redirect", wr->s->redirect);
- jk_print_prop_att_string(s, sw, wr->s->name, "domain", wr->s->domain);
- jk_print_prop_att_int(s, sw, wr->s->name, "distance", wr->s->distance);
- jk_print_prop_att_string(s, sw, wr->s->name, "state", jk_lb_get_state(wr, l));
- jk_print_prop_att_uint64(s, sw, wr->s->name, "lbmult", wr->s->lb_mult);
- jk_print_prop_att_uint64(s, sw, wr->s->name, "lbvalue", wr->s->lb_value);
- jk_print_prop_att_uint64(s, sw, wr->s->name, "elected", wr->s->elected);
- jk_print_prop_att_uint32(s, sw, wr->s->name, "errors", wr->s->errors);
- jk_print_prop_att_uint32(s, sw, wr->s->name, "client_errors", wr->s->client_errors);
- jk_print_prop_att_uint64(s, sw, wr->s->name, "transferred", wr->s->transferred);
- jk_print_prop_att_uint64(s, sw, wr->s->name, "read", wr->s->readed);
- jk_print_prop_att_uint(s, sw, wr->s->name, "busy", wr->s->busy);
- jk_print_prop_att_uint(s, sw, wr->s->name, "max_busy", wr->s->max_busy);
- jk_print_prop_att_uint(s, sw, wr->s->name, "time_to_recover", rs < 0 ? 0 : rs);
- }
- }
- }
- else if (aw) {
- jk_print_prop_att_string(s, sw, name, "type", status_worker_type(w->type));
- jk_print_prop_att_string(s, sw, name, "host", aw->host);
- jk_print_prop_att_int(s, sw, name, "port", aw->port);
- jk_print_prop_att_string(s, sw, name, "address", jk_dump_hinfo(&aw->worker_inet_addr, buf));
- }
- if (name)
- display_maps_prop(s, s->uw_map, sw, name, l);
- JK_TRACE_EXIT(l);
}
-static void form_worker(jk_ws_service_t *s, jk_worker_t *w,
- int from, int refresh,
+static void form_worker(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ jk_worker_t *jw,
jk_logger_t *l)
{
const char *name = NULL;
lb_worker_t *lb = NULL;
JK_TRACE_ENTER(l);
- if (w->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)w->worker_private;
+ if (jw->type == JK_LB_WORKER_TYPE) {
+ lb = (lb_worker_t *)jw->worker_private;
name = lb->s->name;
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
@@ -1765,7 +1663,7 @@
if (!lb) {
jk_log(l, JK_LOG_WARNING,
- "lb structure is (NULL)");
+ "lb structure is (null)");
JK_TRACE_EXIT(l);
return;
}
@@ -1773,8 +1671,7 @@
jk_putv(s, "<hr/><h3>Edit load balancer settings for ",
name, "</h3>\n", NULL);
- status_start_form(s, "GET", JK_STATUS_CMD_UPDATE,
- 0, from, refresh, name, NULL, NULL);
+ status_start_form(s, p, "GET", JK_STATUS_CMD_UPDATE, l);
jk_putv(s, "<table>\n<tr><td>", JK_STATUS_ARG_LB_TEXT_RETRIES,
":</td><td><input name=\"",
@@ -1842,21 +1739,21 @@
JK_TRACE_EXIT(l);
}
-static void form_member(jk_ws_service_t *s, worker_record_t *wr,
- const char *worker,
- int from, int refresh,
+static void form_member(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ worker_record_t *wr,
+ const char *lb_name,
jk_logger_t *l)
{
JK_TRACE_ENTER(l);
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"producing edit form for sub worker '%s' of lb worker '%s'",
- wr->s->name, worker);
+ wr->s->name, lb_name);
jk_putv(s, "<hr/><h3>Edit worker settings for ",
wr->s->name, "</h3>\n", NULL);
- status_start_form(s, "GET", JK_STATUS_CMD_UPDATE,
- 0, from, refresh, worker, wr->s->name, NULL);
+ status_start_form(s, p, "GET", JK_STATUS_CMD_UPDATE, l);
jk_puts(s, "<table>\n");
jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_ACTIVATION,
@@ -1906,9 +1803,10 @@
JK_TRACE_EXIT(l);
}
-static void form_all_members(jk_ws_service_t *s, jk_worker_t *w,
+static void form_all_members(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ jk_worker_t *jw,
const char *attribute,
- int from, int refresh,
jk_logger_t *l)
{
const char *name = NULL;
@@ -1920,7 +1818,7 @@
if (!attribute) {
jk_log(l, JK_LOG_WARNING,
"missing request parameter '%s'",
- JK_STATUS_ARG_OPTION);
+ JK_STATUS_ARG_ATTRIBUTE);
JK_TRACE_EXIT(l);
return;
}
@@ -1945,8 +1843,8 @@
return;
}
}
- if (w->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)w->worker_private;
+ if (jw->type == JK_LB_WORKER_TYPE) {
+ lb = (lb_worker_t *)jw->worker_private;
name = lb->s->name;
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
@@ -1965,8 +1863,7 @@
"' for all members of load balancer ",
name, "</h3>\n", NULL);
- status_start_form(s, "GET", JK_STATUS_CMD_UPDATE,
- 0, from, refresh, name, NULL, attribute);
+ status_start_form(s, p, "GET", JK_STATUS_CMD_UPDATE, l);
jk_putv(s, "<table><tr>"
"<th>Balanced Worker</th><th>", aname, "</th>"
@@ -1979,17 +1876,17 @@
if (!strcmp(attribute, JK_STATUS_ARG_LBM_ACTIVATION)) {
- jk_printf(s, "Active: <input name=\"val%d\" type=\"radio\"", i);
+ jk_printf(s, "Active: <input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"radio\"", i);
jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_ACTIVE);
if (wr->s->activation == JK_LB_ACTIVATION_ACTIVE)
jk_puts(s, " checked=\"checked\"");
jk_puts(s, "/> | \n");
- jk_printf(s, "Disabled: <input name=\"val%d\" type=\"radio\"", i);
+ jk_printf(s, "Disabled: <input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"radio\"", i);
jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_DISABLED);
if (wr->s->activation == JK_LB_ACTIVATION_DISABLED)
jk_puts(s, " checked=\"checked\"");
jk_puts(s, "/> | \n");
- jk_printf(s, "Stopped: <input name=\"val%d\" type=\"radio\"", i);
+ jk_printf(s, "Stopped: <input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"radio\"", i);
jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_STOPPED);
if (wr->s->activation == JK_LB_ACTIVATION_STOPPED)
jk_puts(s, " checked=\"checked\"");
@@ -1997,23 +1894,23 @@
}
else if (!strcmp(attribute, JK_STATUS_ARG_LBM_FACTOR)) {
- jk_printf(s, "<input name=\"val%d\" type=\"text\"", i);
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
jk_printf(s, "value=\"%d\"/>\n", wr->s->lb_factor);
}
else if (!strcmp(attribute, JK_STATUS_ARG_LBM_ROUTE)) {
- jk_printf(s, "<input name=\"val%d\" type=\"text\"", i);
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
jk_putv(s, "value=\"", wr->s->route, "\"/>\n", NULL);
}
else if (!strcmp(attribute, JK_STATUS_ARG_LBM_REDIRECT)) {
- jk_printf(s, "<input name=\"val%d\" type=\"text\"", i);
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
jk_putv(s, "value=\"", wr->s->redirect, "\"/>\n", NULL);
}
else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DOMAIN)) {
- jk_printf(s, "<input name=\"val%d\" type=\"text\"", i);
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
jk_putv(s, "value=\"", wr->s->domain, "\"/>\n", NULL);
}
else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DISTANCE)) {
- jk_printf(s, "<input name=\"val%d\" type=\"text\"", i);
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
jk_printf(s, "value=\"%d\"/>\n", wr->s->distance);
}
@@ -2026,7 +1923,9 @@
JK_TRACE_EXIT(l);
}
-static void commit_worker(jk_ws_service_t *s, jk_worker_t *w,
+static void commit_worker(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ jk_worker_t *jw,
jk_logger_t *l)
{
const char *name = NULL;
@@ -2034,8 +1933,8 @@
int i;
JK_TRACE_ENTER(l);
- if (w->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)w->worker_private;
+ if (jw->type == JK_LB_WORKER_TYPE) {
+ lb = (lb_worker_t *)jw->worker_private;
name = lb->s->name;
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
@@ -2051,7 +1950,7 @@
if (!lb) {
jk_log(l, JK_LOG_WARNING,
- "lb structure is (NULL)");
+ "lb structure is (null)");
JK_TRACE_EXIT(l);
return;
}
@@ -2059,48 +1958,46 @@
if (lb->sequence != lb->s->sequence)
jk_lb_pull(lb, l);
- i = status_get_int(JK_STATUS_ARG_LB_RETRIES,
- s->query_string, lb->retries, l);
+ i = status_get_int(p, JK_STATUS_ARG_LB_RETRIES,
+ lb->retries, l);
if (i != lb->retries && i > 0) {
jk_log(l, JK_LOG_INFO,
"setting 'retries' for lb worker '%s' to '%i'",
name, i);
lb->retries = i;
}
- i = status_get_int(JK_STATUS_ARG_LB_RECOVER_TIME,
- s->query_string, lb->recover_wait_time, l);
+ i = status_get_int(p, JK_STATUS_ARG_LB_RECOVER_TIME,
+ lb->recover_wait_time, l);
if (i != lb->recover_wait_time && i > 0) {
jk_log(l, JK_LOG_INFO,
"setting 'recover_time' for lb worker '%s' to '%i'",
name, i);
lb->recover_wait_time = i;
}
- i = status_get_bool(JK_STATUS_ARG_LB_STICKY,
- s->query_string, 0, l);
- if (i != lb->sticky_session && i > 0) {
+ i = status_get_bool(p, JK_STATUS_ARG_LB_STICKY, 0, l);
+ if (i != lb->sticky_session) {
jk_log(l, JK_LOG_INFO,
"setting 'sticky_session' for lb worker '%s' to '%i'",
name, i);
lb->sticky_session = i;
}
- i = status_get_bool(JK_STATUS_ARG_LB_STICKY_FORCE,
- s->query_string, 0, l);
- if (i != lb->sticky_session_force && i > 0) {
+ i = status_get_bool(p, JK_STATUS_ARG_LB_STICKY_FORCE, 0, l);
+ if (i != lb->sticky_session_force) {
jk_log(l, JK_LOG_INFO,
"setting 'sticky_session_force' for lb worker '%s' to '%i'",
name, i);
lb->sticky_session_force = i;
}
- i = status_get_int(JK_STATUS_ARG_LB_METHOD,
- s->query_string, lb->lbmethod, l);
+ i = status_get_int(p, JK_STATUS_ARG_LB_METHOD,
+ lb->lbmethod, l);
if (i != lb->lbmethod && i > 0 && i <= JK_LB_METHOD_MAX) {
jk_log(l, JK_LOG_INFO,
"setting 'method' for lb worker '%s' to '%i'",
name, i);
lb->lbmethod = i;
}
- i = status_get_int(JK_STATUS_ARG_LB_LOCK,
- s->query_string, lb->lblock, l);
+ i = status_get_int(p, JK_STATUS_ARG_LB_LOCK,
+ lb->lblock, l);
if (i != lb->lblock && i > 0 && i <= JK_LB_LOCK_MAX) {
jk_log(l, JK_LOG_INFO,
"setting 'lock' for lb worker '%s' to '%i'",
@@ -2111,11 +2008,13 @@
jk_lb_push(lb, l);
}
-static int commit_member(jk_ws_service_t *s, worker_record_t *wr,
- const char *worker,
+static int commit_member(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ worker_record_t *wr,
+ const char *lb_name,
jk_logger_t *l)
{
- char buf[128];
+ const char *arg;
int rc = 0;
int rv;
int i;
@@ -2124,34 +2023,34 @@
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"committing changes for sub worker '%s' of lb worker '%s'",
- wr->s->name, worker);
+ wr->s->name, lb_name);
- i = status_get_int(JK_STATUS_ARG_LBM_ACTIVATION,
- s->query_string, wr->s->activation, l);
+ i = status_get_int(p, JK_STATUS_ARG_LBM_ACTIVATION,
+ wr->s->activation, l);
if (i != wr->s->activation && i > 0 && i<= JK_LB_ACTIVATION_MAX) {
jk_log(l, JK_LOG_INFO,
"setting 'activation' for sub worker '%s' of lb worker '%s' to '%s'",
- wr->s->name, worker, jk_lb_get_activation(wr, l));
+ wr->s->name, lb_name, jk_lb_get_activation(wr, l));
wr->s->activation = i;
rc |= 1;
}
- i = status_get_int(JK_STATUS_ARG_LBM_FACTOR,
- s->query_string, wr->s->lb_factor, l);
+ i = status_get_int(p, JK_STATUS_ARG_LBM_FACTOR,
+ wr->s->lb_factor, l);
if (i != wr->s->lb_factor && i > 0) {
jk_log(l, JK_LOG_INFO,
[... 1231 lines stripped ...]
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org