mturk 2005/02/14 23:27:47
Modified: jk/native/common jk_status.c
Log:
Display all relevant parameters. Added update form.
Revision Changes Path
1.6 +78 -22 jakarta-tomcat-connectors/jk/native/common/jk_status.c
Index: jk_status.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_status.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- jk_status.c 14 Feb 2005 17:27:15 -0000 1.5
+++ jk_status.c 15 Feb 2005 07:27:46 -0000 1.6
@@ -15,7 +15,7 @@
*/
/***************************************************************************
- * Description: Status worker, dispay and manages JK workers *
+ * Description: Status worker, display and manages JK workers *
* Author: Mladen Turk <[EMAIL PROTECTED]>
*
* Version: $Revision$ *
***************************************************************************/
@@ -178,6 +178,18 @@
return "True";
}
+static const char *status_val_status(int d, int e, int r)
+{
+ if (d)
+ return "Disabled";
+ else if (r)
+ return "Recovering";
+ else if (e)
+ return "Error";
+ else
+ return "OK";
+}
+
static void jk_puts(jk_ws_service_t *s, const char *str)
{
if (str)
@@ -244,24 +256,26 @@
jk_puts(s, "<hr />\n<h3>Worker Status for ");
jk_putv(s, "<a href=\"", s->req_uri, "?cmd=show&w=",
sw->we->worker_list[i], "\">", NULL);
- jk_putv(s, sw->we->worker_list[i], "</a></h3>\n\n", NULL);
+ jk_putv(s, sw->we->worker_list[i], "</a></h3>\n", NULL);
if (lb != NULL) {
unsigned int j;
int selected = -1;
- jk_puts(s, "\n\n<table border=\"0\"><tr>"
+ jk_puts(s, "<table border=\"0\"><tr>"
"<th>Type</th><th>Sticky session</th>"
"<th>Local worker only</th>"
+ "<th>Retries</th>"
"</tr>\n<tr>");
jk_putv(s, "<td>", w->type, "</td>", NULL);
jk_putv(s, "<td>", status_val_bool(lb->s->sticky_session),
"</td>", NULL);
jk_putv(s, "<td>", status_val_bool(lb->s->local_worker_only),
"</td>", NULL);
+ jk_printf(s, "<td>%d</td>", lb->s->retries);
jk_puts(s, "</tr>\n</table>\n");
- jk_puts(s, "\n\n<table border=\"0\"><tr>"
+ jk_puts(s, "<table border=\"0\"><tr>"
"<th>Name</th><th>Type</th><th>Host</th><th>Addr</th>"
- "<th>Stat</th><th>F</th><th>Acc</th><th>Wr</th>"
- "<th>Rd</th><th>RR</th><th>Cd</th></tr>\n");
+
"<th>Stat</th><th>F</th><th>V</th><th>Acc</th><th>Err</th>"
+ "<th>Wr</th><th>Rd</th><th>RR</th><th>Cd</th></tr>\n");
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;
@@ -276,9 +290,15 @@
jk_putv(s, "<td>", jk_dump_hinfo(&a->worker_inet_addr, buf),
"</td>", NULL);
/* TODO: descriptive status */
- jk_printf(s, "<td>%d</td>", wr->s->status);
+ jk_putv(s, "<td>",
+ status_val_status(wr->s->is_disabled,
+ wr->s->in_error_state,
+ wr->s->in_recovering),
+ "</td>", NULL);
jk_printf(s, "<td>%d</td>", wr->s->lb_factor);
- jk_printf(s, "<td>%d</td>", wr->s->elected);
+ jk_printf(s, "<td>%d</td>", wr->s->lb_value);
+ jk_printf(s, "<td>%u</td>", wr->s->elected);
+ jk_printf(s, "<td>%u</td>", wr->s->errors);
jk_putv(s, "<td>", status_strfsize(wr->s->transferred, buf),
"</td>", NULL);
jk_putv(s, "<td>", status_strfsize(wr->s->readed, buf),
@@ -288,16 +308,35 @@
jk_puts(s, wr->s->domain);
jk_puts(s, "</td>\n</tr>\n");
}
- jk_puts(s, "</table>\n");
+ jk_puts(s, "</table><br />\n");
if (selected >= 0) {
worker_record_t *wr = &(lb->lb_workers[selected]);
ajp_worker_t *a = (ajp_worker_t *)wr->w->worker_private;
- jk_putv(s, "<hr /><h3>Edit balancer settings for ",
+ jk_putv(s, "<hr /><h3>Edit worker settings for ",
wr->s->name, "</h3>\n", NULL);
jk_putv(s, "<form method=\"GET\" action=\"",
- s->req_uri, "\">\n", NULL);
-
- jk_puts(s, "\n</form>\n");
+ s->req_uri, "\">\n", NULL);
+ jk_puts(s, "<table>\n<input type=hidden name=\"cmd\" ");
+ jk_puts(s, "value=\"update\">\n");
+ jk_puts(s, "<input type=hidden name=\"w\" ");
+ jk_putv(s, "value=\"", wr->s->name, "\">\n</table>\n", NULL);
+
+ jk_puts(s, "<table>\n<tr><td>Load factor:</td><td><input
name=\"lf\" type=text ");
+ jk_printf(s, "value=\"%d\"></td><tr>\n", wr->s->lb_factor);
+ jk_puts(s, "<tr><td>Route Redirect:</td><td><input
name=\"rr\" type=text ");
+ jk_putv(s, "value=\"", wr->s->redirect, NULL);
+ jk_puts(s, "\"></td></tr>\n");
+ jk_puts(s, "<tr><td>Cluster Domain:</td><td><input
name=\"cd\" type=text ");
+ jk_putv(s, "value=\"", wr->s->domain, NULL);
+ jk_puts(s, "\"></td></tr>\n");
+ jk_puts(s, "<tr><td>Disabled:</td><td><input name=\"dw\"
type=checkbox");
+ if (wr->s->is_disabled)
+ jk_puts(s, " checked");
+ jk_puts(s, "></td></tr>\n");
+
+ jk_puts(s, "<tr><td colspan=2> </td></tr>\n");
+ jk_puts(s, "<tr><td colspan=2><input type=submit
value=\"Update Worker\">");
+ jk_puts(s, "</td></tr>\n</table>\n</form>\n");
}
}
@@ -319,8 +358,10 @@
"<tr><th>Type</th><td>Worker type</td></tr>\n"
"<tr><th>Addr</th><td>Backend Address info</td></tr>\n"
"<tr><th>Stat</th><td>Worker status</td></tr>\n"
- "<tr><th>F</th><td>Load Balancer Factor in %</td></tr>\n"
+ "<tr><th>F</th><td>Load Balancer Factor</td></tr>\n"
+ "<tr><th>V</th><td>Load Balancer Value</td></tr>\n"
"<tr><th>Acc</th><td>Number of requests</td></tr>\n"
+ "<tr><th>Err</th><td>Number of failed requests</td></tr>\n"
"<tr><th>Wr</th><td>Number of bytes transferred</td></tr>\n"
"<tr><th>Rd</th><td>Number of bytes read</td></tr>\n"
"<tr><th>RR</th><td>Route redirect</td></tr>\n"
@@ -330,7 +371,9 @@
static int status_cmd_type(const char *req)
{
- if (!strncmp(req, "cmd=list", 8))
+ if (!req)
+ return 0;
+ else if (!strncmp(req, "cmd=list", 8))
return 0;
else if (!strncmp(req, "cmd=show", 8))
return 1;
@@ -340,10 +383,16 @@
return 0;
}
-static const char *status_cmd_worker(const char *req, char *buf, size_t len)
+static const char *status_cmd(const char *param, const char *req, char *buf,
size_t len)
{
- char *p = strstr(req, "&w=");
+ char ps[32];
+ char *p;
size_t l = 0;
+
+ if (!req)
+ return NULL;
+ sprintf(ps, "&%s=", param);
+ p = strstr(req, ps);
if (p) {
p += 3;
while (*p) {
@@ -365,6 +414,7 @@
return NULL;
}
+
static int JK_METHOD service(jk_endpoint_t *e,
jk_ws_service_t *s,
jk_logger_t *l, int *is_recoverable_error)
@@ -373,6 +423,8 @@
if (e && e->endpoint_private && s) {
char buf[128];
+ char *worker = NULL;
+ int cmd;
status_endpoint_t *p = e->endpoint_private;
*is_recoverable_error = JK_FALSE;
@@ -389,13 +441,16 @@
JK_VERSTRING, "\n</dt></dl>\n", NULL);
/* Step 1: Process GET params and update configuration */
-
+ cmd = status_cmd_type(s->query_string);
+ if (cmd > 0 && (status_cmd("w", s->query_string, buf, sizeof(buf))
!= NULL))
+ worker = strdup(buf);
/* Step 2: Display configuration */
- display_workers(s, p->s_worker,
- status_cmd_worker(s->query_string, buf,
sizeof(buf)), l);
+ display_workers(s, p->s_worker, worker, l);
s->write(s, JK_STATUS_HEND, sizeof(JK_STATUS_HEND) - 1);
+ if (worker)
+ free(worker);
JK_TRACE_EXIT(l);
return JK_TRUE;
}
@@ -428,6 +483,7 @@
if (pThis && pThis->worker_private) {
status_worker_t *p = pThis->worker_private;
+
JK_TRACE_EXIT(l);
return JK_TRUE;
@@ -509,7 +565,7 @@
private_data->worker.init = init;
private_data->worker.get_endpoint = get_endpoint;
private_data->worker.destroy = destroy;
- private_data->worker.retries = JK_RETRIES;
+ private_data->worker.retries = 1;
/* Status worker has single static endpoint. */
private_data->ep.endpoint.done = done;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]