⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jk_status.c

📁 jboss与apache集成的中间件,详情请参看文档说明.
💻 C
📖 第 1 页 / 共 3 页
字号:
static int status_bool(const char *param, const char *req){    const char *v;    char buf[32];    int rv = 0;    if ((v = status_cmd(param, req, buf, sizeof(buf)))) {        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->lbmethod == JK_LB_BYREQUESTS ? JK_LB_METHOD_REQUESTS : JK_LB_METHOD_TRAFFIC);            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,"&nbsp;");                jk_puts(s, "</td><td>\n");                if (wr->s->domain && *wr->s->domain)                    jk_puts(s, wr->s->domain);                else                    jk_puts(s,"&nbsp;");                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</td></tr>\n"            "<tr><th>Rd</th><td>Number of bytes read</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,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -