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, "] "); 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 + -
显示快捷键?