📄 jk_status.c
字号:
if (strcasecmp(v, "on") == 0 ||
strcasecmp(v, "true") == 0)
rv = 1;
}
return rv;
}
static void display_maps(jk_ws_service_t *s, status_worker_t *sw,
jk_uri_worker_map_t *uwmap,
const char *worker, jk_logger_t *l)
{
unsigned int i;
jk_puts(s, "<br/>Uri Mappings:\n");
jk_puts(s, "<table>\n<tr><th>Match Type</th><th>Uri</th>"
"<th>Context</th></tr>\n");
for (i = 0; i < uwmap->size; i++) {
uri_worker_record_t *uwr = uwmap->maps[i];
if (strcmp(uwr->worker_name, worker)) {
continue;
}
jk_putv(s, "<tr><td>",
status_val_match(uwr->match_type),
"</td><td>", NULL);
jk_puts(s, uwr->uri);
jk_putv(s, "</td><td>", uwr->context, NULL);
jk_puts(s, "</td></tr>\n");
}
jk_puts(s, "</table>\n");
}
static void dump_maps(jk_ws_service_t *s, status_worker_t *sw,
jk_uri_worker_map_t *uwmap,
const char *worker, jk_logger_t *l)
{
unsigned int i;
for (i = 0; i < uwmap->size; i++) {
uri_worker_record_t *uwr = uwmap->maps[i];
if (strcmp(uwr->worker_name, worker)) {
continue;
}
jk_printf(s, " <jk:map type=\"%s\" uri=\"%s\" context=\"%s\" />\n",
status_val_match(uwr->match_type),
uwr->uri,
uwr->context) ;
}
}
/**
* Command line reference:
* cmd=list (default) display configuration
* cmd=show display detailed configuration
* cmd=update update configuration
* cmd=add add new uri map.
* w=worker display detailed configuration for worker
*
* Worker parameters:
* r=string redirect route name
*
*/
static void display_workers(jk_ws_service_t *s, status_worker_t *sw,
const char *dworker, jk_logger_t *l)
{
unsigned int i;
char buf[32];
for (i = 0; i < sw->we->num_of_workers; i++) {
jk_worker_t *w = wc_get_worker_for_name(sw->we->worker_list[i], l);
ajp_worker_t *aw = NULL;
lb_worker_t *lb = NULL;
if (w == NULL)
continue;
if (w->type == JK_LB_WORKER_TYPE) {
lb = (lb_worker_t *)w->worker_private;
}
else if (w->type == JK_AJP13_WORKER_TYPE ||
w->type == JK_AJP14_WORKER_TYPE) {
aw = (ajp_worker_t *)w->worker_private;
}
else {
/* Skip status, jni and ajp12 worker */
continue;
}
jk_puts(s, "<hr/>\n<h3>Worker Status for ");
if (dworker && strcmp(dworker, sw->we->worker_list[i]) == 0) {
/* Next click will colapse the editor */
jk_putv(s, "<a href=\"", s->req_uri, "?cmd=show\">", NULL);
}
else
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", NULL);
if (lb != NULL) {
unsigned int j;
int selected = -1;
jk_puts(s, "<table><tr>"
"<th>Type</th><th>Sticky session</th>"
"<th>Force Sticky session</th>"
"<th>Retries</th>"
"<th>Method</th>"
"<th>Lock</th>"
"</tr>\n<tr>");
jk_putv(s, "<td>", status_worker_type(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->sticky_session_force),
"</td>", NULL);
jk_printf(s, "<td>%d</td>", lb->s->retries);
jk_printf(s, "<td>%s</td>", lb_method_type[lb->lbmethod]);
jk_printf(s, "<td>%s</td>", lb->lblock == JK_LB_LOCK_DEFAULT ? JK_LB_LM_DEFAULT : JK_LB_LM_PESSIMISTIC);
jk_puts(s, "</tr>\n</table>\n<br/>\n");
jk_puts(s, "<table><tr>"
"<th>Name</th><th>Type</th><th>Host</th><th>Addr</th>"
"<th>Stat</th><th>F</th><th>V</th><th>Acc</th><th>Err</th>"
"<th>Wr</th><th>Rd</th><th>Busy</th><th>Max</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;
jk_putv(s, "<tr>\n<td><a href=\"", s->req_uri,
"?cmd=show&w=",
wr->s->name, "\">",
wr->s->name, "</a></td>", NULL);
if (dworker && strcmp(dworker, wr->s->name) == 0)
selected = j;
jk_putv(s, "<td>", status_worker_type(wr->w->type), "</td>", NULL);
jk_printf(s, "<td>%s:%d</td>", a->host, a->port);
jk_putv(s, "<td>", jk_dump_hinfo(&a->worker_inet_addr, buf),
"</td>", NULL);
/* TODO: descriptive status */
jk_putv(s, "<td>",
status_val_status(wr->s->is_stopped,
wr->s->is_disabled,
wr->s->in_error_state,
wr->s->in_recovering,
wr->s->is_busy),
"</td>", NULL);
jk_printf(s, "<td>%d</td>", wr->s->lb_factor);
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),
"</td>", NULL);
jk_printf(s, "<td>%u</td>", wr->s->busy);
jk_printf(s, "<td>%u</td><td>", wr->s->max_busy);
if (wr->s->redirect && *wr->s->redirect)
jk_puts(s, wr->s->redirect);
else
jk_puts(s," ");
jk_puts(s, "</td><td>\n");
if (wr->s->domain && *wr->s->domain)
jk_puts(s, wr->s->domain);
else
jk_puts(s," ");
jk_puts(s, "</td>\n</tr>\n");
}
jk_puts(s, "</table><br/>\n");
if (selected >= 0) {
worker_record_t *wr = &(lb->lb_workers[selected]);
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, "<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", NULL);
jk_puts(s, "<input type=\"hidden\" name=\"id\" ");
jk_printf(s, "value=\"%u\">\n</table>\n", selected);
jk_puts(s, "<input type=\"hidden\" name=\"lb\" ");
jk_printf(s, "value=\"%u\">\n</table>\n", i);
jk_puts(s, "<table>\n<tr><td>Load factor:</td><td><input name=\"wf\" 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=\"wr\" 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=\"wc\" 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=\"wd\" type=\"checkbox\"");
if (wr->s->is_disabled)
jk_puts(s, " checked=\"checked\"");
jk_puts(s, "/></td></tr>\n");
jk_puts(s, "<tr><td>Stopped:</td><td><input name=\"ws\" type=\"checkbox\"");
if (wr->s->is_stopped)
jk_puts(s, " checked=\"checked\"");
jk_puts(s, "/></td></tr>\n");
jk_puts(s, "</td></tr>\n</table>\n");
jk_puts(s, "<br/><input type=\"submit\" value=\"Update Worker\"/>\n</form>\n");
}
else if (dworker && strcmp(dworker, sw->we->worker_list[i]) == 0) {
/* Edit Load balancer settings */
jk_putv(s, "<hr/><h3>Edit Load balancer settings for ",
dworker, "</h3>\n", NULL);
jk_putv(s, "<form method=\"GET\" action=\"",
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=\"", dworker, "\"/>\n", NULL);
jk_puts(s, "<input type=\"hidden\" name=\"id\" ");
jk_printf(s, "value=\"%u\"/>\n</table>\n", i);
jk_puts(s, "<table>\n<tr><td>Retries:</td><td><input name=\"lr\" type=\"text\" ");
jk_printf(s, "value=\"%d\"/></td></tr>\n", lb->s->retries);
jk_puts(s, "<tr><td>Recover time:</td><td><input name=\"lt\" type=\"text\" ");
jk_printf(s, "value=\"%d\"/></td></tr>\n", lb->s->recover_wait_time);
jk_puts(s, "<tr><td>Sticky session:</td><td><input name=\"ls\" type=\"checkbox\"");
if (lb->s->sticky_session)
jk_puts(s, " checked=\"checked\"");
jk_puts(s, "/></td></tr>\n");
jk_puts(s, "<tr><td>Force Sticky session:</td><td><input name=\"lf\" type=\"checkbox\"");
if (lb->s->sticky_session_force)
jk_puts(s, " checked=\"checked\"");
jk_puts(s, "/></td></tr>\n");
jk_puts(s, "</table>\n");
display_maps(s, sw, s->uw_map, dworker, l);
jk_puts(s, "<br/><input type=\"submit\" value=\"Update Balancer\"/></form>\n");
}
}
else {
jk_puts(s, "\n\n<table><tr>"
"<th>Type</th><th>Host</th><th>Addr</th>"
"</tr>\n<tr>");
jk_putv(s, "<td>", status_worker_type(w->type), "</td>", NULL);
jk_puts(s, "</tr>\n</table>\n");
jk_printf(s, "<td>%s:%d</td>", aw->host, aw->port);
jk_putv(s, "<td>", jk_dump_hinfo(&aw->worker_inet_addr, buf),
"</td>\n</tr>\n", NULL);
jk_puts(s, "</table>\n");
}
}
/* Display legend */
jk_puts(s, "<hr/><table>\n"
"<tr><th>Name</th><td>Worker route name</td></tr>\n"
"<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</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/min</td></tr>\n"
"<tr><th>Rd</th><td>Number of bytes read/min</td></tr>\n"
"<tr><th>Busy</th><td>Current number of busy connections</td></tr>\n"
"<tr><th>Max</th><td>Maximum number of busy connections</td></tr>\n"
"<tr><th>RR</th><td>Route redirect</td></tr>\n"
"<tr><th>Cd</th><td>Cluster domain</td></tr>\n"
"</table>");
}
static void dump_config(jk_ws_service_t *s, status_worker_t *sw,
jk_logger_t *l)
{
unsigned int i;
char buf[32];
int has_lb = 0;
for (i = 0; i < sw->we->num_of_workers; i++) {
jk_worker_t *w = wc_get_worker_for_name(sw->we->worker_list[i], l);
if (w == NULL)
continue;
if (w->type == JK_LB_WORKER_TYPE) {
has_lb = 1;
break;
}
}
jk_printf(s, " <jk:server name=\"%s\" port=\"%d\" software=\"%s\" version=\"%s\" />\n",
s->server_name, s->server_port, s->server_software, JK_VERSTRING);
if (has_lb)
jk_puts(s, " <jk:balancers>\n");
for (i = 0; i < sw->we->num_of_workers; i++) {
jk_worker_t *w = wc_get_worker_for_name(sw->we->worker_list[i], l);
lb_worker_t *lb = NULL;
unsigned int j;
if (w == NULL)
continue;
if (w->type == JK_LB_WORKER_TYPE) {
lb = (lb_worker_t *)w->worker_private;
}
else {
/* Skip non lb workers */
continue;
}
jk_printf(s, " <jk:balancer id=\"%d\" name=\"%s\" type=\"%s\" sticky=\"%s\" stickyforce=\"%s\" retries=\"%d\" recover=\"%d\" >\n",
i,
lb->s->name,
status_worker_type(w->type),
status_val_bool(lb->s->sticky_session),
status_val_bool(lb->s->sticky_session_force),
lb->s->retries,
lb->s->recover_wait_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;
/* TODO: descriptive status */
jk_printf(s, " <jk:member id=\"%d\" name=\"%s\" type=\"%s\" host=\"%s\" port=\"%d\" address=\"%s\" status=\"%s\"",
j,
wr->s->name,
status_worker_type(wr->w->type),
a->host,
a->port,
jk_dump_hinfo(&a->worker_inet_addr, buf),
status_val_status(wr->s->is_stopped,
wr->s->is_disabled,
wr->s->in_error_state,
wr->s->in_recovering,
wr->s->is_busy) );
jk_printf(s, " lbfactor=\"%d\"", wr->s->lb_factor);
jk_printf(s, " lbvalue=\"%d\"", wr->s->lb_value);
jk_printf(s, " elected=\"%u\"", wr->s->elected);
jk_printf(s, " readed=\"%u\"", wr->s->readed);
jk_printf(s, " transferred=\"%u\"", wr->s->transferred);
jk_printf(s, " errors=\"%u\"", wr->s->errors);
jk_printf(s, " busy=\"%u\"", wr->s->busy);
if (wr->s->redirect && *wr->s->redirect)
jk_printf(s, " redirect=\"%s\"", wr->s->redirect);
if (wr->s->domain && *wr->s->domain)
jk_printf(s, " domain=\"%s\"", wr->s->domain);
jk_puts(s, " />\n");
}
dump_maps(s, sw, s->uw_map, lb->s->name, l);
jk_puts(s, " </jk:balancer>\n");
}
if (has_lb)
jk_puts(s, " </jk:balancers>\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -