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]