jk_status.c

来自「以便Apache与其他服务进行整合 Mod_JK安装」· C语言 代码 · 共 1,753 行 · 第 1/5 页

C
1,753
字号
    p->msg = "OK";    JK_TRACE_EXIT(l);    return JK_TRUE;}static int search_worker(jk_ws_service_t *s,                         status_endpoint_t *p,                         jk_worker_t **jwp,                         const char *worker,                         jk_logger_t *l){    status_worker_t *w = p->worker;    JK_TRACE_ENTER(l);    *jwp = NULL;    if (JK_IS_DEBUG_LEVEL(l))        jk_log(l, JK_LOG_DEBUG,               "Status worker '%s' searching worker '%s'",               w->name, worker ? worker : "(null)");    if (!worker || !worker[0]) {        jk_log(l, JK_LOG_WARNING,               "Status worker '%s' NULL or EMPTY worker param",               w->name);        p->msg = "NULL or EMPTY worker param";        JK_TRACE_EXIT(l);        return JK_FALSE;    }    *jwp = wc_get_worker_for_name(worker, l);    if (!*jwp) {        jk_log(l, JK_LOG_WARNING,               "Status worker '%s' could not find worker '%s'",               w->name, worker);        p->msg = "Could not find given worker";        JK_TRACE_EXIT(l);        return JK_FALSE;    }    p->msg = "OK";    JK_TRACE_EXIT(l);    return JK_TRUE;}static int search_sub_worker(jk_ws_service_t *s,                             status_endpoint_t *p,                             jk_worker_t *jw,                             const char *worker,                             worker_record_t **wrp,                             const char *sub_worker,                             jk_logger_t *l){    lb_worker_t *lb = NULL;    worker_record_t *wr = NULL;    status_worker_t *w = p->worker;    unsigned int i;    JK_TRACE_ENTER(l);    if (JK_IS_DEBUG_LEVEL(l))        jk_log(l, JK_LOG_DEBUG,               "Status worker '%s' searching sub worker '%s' of worker '%s'",               w->name, sub_worker ? sub_worker : "(null)",               worker ? worker : "(null)");    if (!sub_worker || !sub_worker[0]) {        jk_log(l, JK_LOG_WARNING,               "Status worker '%s' NULL or EMPTY sub_worker param",               w->name);        p->msg = "NULL or EMPTY sub_worker param";        JK_TRACE_EXIT(l);        return JK_FALSE;    }    if (check_valid_lb(s, p, jw, worker, &lb, 1, l) == JK_FALSE) {        JK_TRACE_EXIT(l);        return JK_FALSE;    }    for (i = 0; i < (int)lb->num_of_workers; i++) {        wr = &(lb->lb_workers[i]);        if (strcmp(sub_worker, wr->s->name) == 0)            break;    }    *wrp = wr;    if (!wr || i == (int)lb->num_of_workers) {        jk_log(l, JK_LOG_WARNING,               "Status worker '%s' could not find sub worker '%s' of worker '%s'",               w->name, sub_worker, worker ? worker : "(null)");        p->msg = "could not find sub worker";        JK_TRACE_EXIT(l);        return JK_FALSE;    }    p->msg = "OK";    JK_TRACE_EXIT(l);    return JK_TRUE;}static int count_maps(jk_ws_service_t *s,                      const char *worker,                      jk_logger_t *l){    unsigned int i;    int count=0;    jk_uri_worker_map_t *uw_map = s->uw_map;    JK_TRACE_ENTER(l);    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_TRACE_EXIT(l);    return count;}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);    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;    count = count_maps(s, worker, l);    if (count) {        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");            }        }    }    if (hide) {        return;        JK_TRACE_EXIT(l);    }    count = 0;    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 (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, 6, 0, "map");            jk_print_xml_att_int(s, 8, "id", count);            jk_print_xml_att_string(s, 8, "type", uri_worker_map_get_match(uwr, buf, l));            jk_print_xml_att_string(s, 8, "uri", uwr->uri);            jk_print_xml_att_string(s, 8, "source", uri_worker_map_get_source(uwr, l));            jk_print_xml_stop_elt(s, 6, 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, "map", count, "type", uri_worker_map_get_match(uwr, buf, l));            jk_print_prop_item_string(s, w, worker, "map", count, "uri", uwr->uri);            jk_print_prop_item_string(s, w, worker, "map", count, "source", uri_worker_map_get_source(uwr, l));        }    }    if (count) {        if (mime == JK_STATUS_MIME_HTML) {            jk_puts(s, "</table>\n");        }    }    else {        if (mime == JK_STATUS_MIME_HTML) {            jk_putv(s, "<hr/><h3>Warning: No URI Mappings defined for ",                    worker, " !</h3>\n", NULL);        }    }    if (JK_IS_DEBUG_LEVEL(l))        jk_log(l, JK_LOG_DEBUG,               "Status worker '%s' displayed %d maps for worker '%s'",               w->name, count, worker);    JK_TRACE_EXIT(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];    char buf_rd[32];    char buf_wr[32];    int cmd;    int mime;    int read_only = 0;    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;    int map_count;    int ms_min;    int ms_max;    unsigned int j;    const char *name = lb->s->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);    hide_members = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &                                JK_STATUS_ARG_OPTION_NO_MEMBERS;    if (w->read_only) {        read_only = 1;    }    else {        read_only = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &                    JK_STATUS_ARG_OPTION_READ_ONLY;    }    if (cmd == JK_STATUS_CMD_SHOW) {        single = 1;    }    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++;    }    map_count = count_maps(s, name, l);    ms_min = lb->maintain_time - (int)difftime(now, lb->s->last_maintain_time);    ms_max = ms_min + lb->maintain_time;    ms_min -= JK_LB_MAINTAIN_TOLERANCE;    if (ms_min < 0) {        ms_min = 0;    }    if (ms_max < 0) {        ms_max = 0;    }    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);        }        if (!read_only) {            jk_puts(s, "|");            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, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,                             name, "", 0, 0, "", l);        }        jk_puts(s, "]&nbsp;&nbsp;");        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(JK_LB_WORKER_TYPE),                  jk_get_bool(lb->sticky_session),                  jk_get_bool(lb->sticky_session_force),                  lb->retries,                  jk_lb_get_method(lb, l),                  jk_lb_get_lock(lb, l),                  lb->recover_wait_time,                  lb->max_reply_timeouts);        jk_puts(s, "</table>\n<br/>\n");        jk_puts(s, "<table><tr>"                "<th>Good</th><th>Degraded</th><th>Bad/Stopped</th><th>Busy</th><th>Max Busy</th><th>Next Maintenance</th>"                "</tr>\n<tr>");        jk_printf(s, "<td>%d</td>", good);        jk_printf(s, "<td>%d</td>", degraded);        jk_printf(s, "<td>%d</td>", bad);        jk_printf(s, "<td>%d</td>", lb->s->busy);        jk_printf(s, "<td>%d</td>", lb->s->max_busy);        jk_printf(s, "<td>%d/%d</td>", ms_min, ms_max);        jk_puts(s, "</tr>\n</table>\n\n");    }    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", jk_get_bool(lb->sticky_session));        jk_print_xml_att_string(s, 4, "sticky_session_force", jk_get_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_int(s, 4, "max_reply_timeouts", lb->max_reply_timeouts);        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));

⌨️ 快捷键说明

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