jk_status.c
来自「以便Apache与其他服务进行整合 Mod_JK安装」· C语言 代码 · 共 1,753 行 · 第 1/5 页
C
1,753 行
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//*************************************************************************** * Description: Status worker, display and manages JK workers * * Author: Mladen Turk <mturk@jboss.com> * * Author: Rainer Jung <rjung@apache.org> * * Version: $Revision: 562174 $ * ***************************************************************************/#include "jk_pool.h"#include "jk_service.h"#include "jk_util.h"#include "jk_worker.h"#include "jk_status.h"#include "jk_mt.h"#include "jk_shm.h"#include "jk_ajp_common.h"#include "jk_lb_worker.h"#include "jk_ajp13_worker.h"#include "jk_ajp14_worker.h"#include "jk_connect.h"#include "jk_uri_worker_map.h"#define HUGE_BUFFER_SIZE (8*1024)/** * Command line reference: * cmd=list (default) display configuration * cmd=show display detailed configuration * cmd=edit form to change configuration * cmd=update commit update configuration * cmd=reset reset lb runtime states, or lb member runtime states * cmd=version show only software version * Query arguments: * re=n (refresh time in seconds, n=0: disabled) * w=worker (cmd should be executed for worker "worker") * sw=sub_worker (cmd should be executed for "sub_worker" of worker "worker") * from=lastcmd (the last viewing command was "lastcmd") * opt=option (changes meaning of edit and list/show) */#define JK_STATUS_ARG_CMD "cmd"#define JK_STATUS_ARG_MIME "mime"#define JK_STATUS_ARG_FROM "from"#define JK_STATUS_ARG_REFRESH "re"#define JK_STATUS_ARG_WORKER "w"#define JK_STATUS_ARG_SUB_WORKER "sw"#define JK_STATUS_ARG_ATTRIBUTE "att"#define JK_STATUS_ARG_MULT_VALUE_BASE "val"#define JK_STATUS_ARG_OPTIONS "opt"#define JK_STATUS_ARG_OPTION_NO_MEMBERS 0x0001#define JK_STATUS_ARG_OPTION_NO_MAPS 0x0002#define JK_STATUS_ARG_OPTION_NO_LEGEND 0x0004#define JK_STATUS_ARG_OPTION_NO_LB 0x0008#define JK_STATUS_ARG_OPTION_NO_AJP 0x0010#define JK_STATUS_ARG_OPTION_READ_ONLY 0x0020#define JK_STATUS_ARG_LB_RETRIES ("lr")#define JK_STATUS_ARG_LB_RECOVER_TIME ("lt")#define JK_STATUS_ARG_LB_MAX_REPLY_TIMEOUTS ("lx")#define JK_STATUS_ARG_LB_STICKY ("ls")#define JK_STATUS_ARG_LB_STICKY_FORCE ("lf")#define JK_STATUS_ARG_LB_METHOD ("lm")#define JK_STATUS_ARG_LB_LOCK ("ll")#define JK_STATUS_ARG_LB_TEXT_RETRIES "Retries"#define JK_STATUS_ARG_LB_TEXT_RECOVER_TIME "Recover Wait Time"#define JK_STATUS_ARG_LB_TEXT_MAX_REPLY_TIMEOUTS "Max Reply Timeouts"#define JK_STATUS_ARG_LB_TEXT_STICKY "Sticky Sessions"#define JK_STATUS_ARG_LB_TEXT_STICKY_FORCE "Force Sticky Sessions"#define JK_STATUS_ARG_LB_TEXT_METHOD "LB Method"#define JK_STATUS_ARG_LB_TEXT_LOCK "Locking"#define JK_STATUS_ARG_LBM_ACTIVATION ("wa")#define JK_STATUS_ARG_LBM_FACTOR ("wf")#define JK_STATUS_ARG_LBM_ROUTE ("wn")#define JK_STATUS_ARG_LBM_REDIRECT ("wr")#define JK_STATUS_ARG_LBM_DOMAIN ("wc")#define JK_STATUS_ARG_LBM_DISTANCE ("wd")#define JK_STATUS_ARG_LBM_TEXT_ACTIVATION "Activation"#define JK_STATUS_ARG_LBM_TEXT_FACTOR "LB Factor"#define JK_STATUS_ARG_LBM_TEXT_ROUTE "Route"#define JK_STATUS_ARG_LBM_TEXT_REDIRECT "Redirect Route"#define JK_STATUS_ARG_LBM_TEXT_DOMAIN "Cluster Domain"#define JK_STATUS_ARG_LBM_TEXT_DISTANCE "Distance"#define JK_STATUS_CMD_UNKNOWN (0)#define JK_STATUS_CMD_LIST (1)#define JK_STATUS_CMD_SHOW (2)#define JK_STATUS_CMD_EDIT (3)#define JK_STATUS_CMD_UPDATE (4)#define JK_STATUS_CMD_RESET (5)#define JK_STATUS_CMD_VERSION (6)#define JK_STATUS_CMD_RECOVER (7)#define JK_STATUS_CMD_DEF (JK_STATUS_CMD_LIST)#define JK_STATUS_CMD_MAX (JK_STATUS_CMD_RECOVER)#define JK_STATUS_CMD_TEXT_UNKNOWN ("unknown")#define JK_STATUS_CMD_TEXT_LIST ("list")#define JK_STATUS_CMD_TEXT_SHOW ("show")#define JK_STATUS_CMD_TEXT_EDIT ("edit")#define JK_STATUS_CMD_TEXT_UPDATE ("update")#define JK_STATUS_CMD_TEXT_RESET ("reset")#define JK_STATUS_CMD_TEXT_VERSION ("version")#define JK_STATUS_CMD_TEXT_RECOVER ("recover")#define JK_STATUS_CMD_TEXT_DEF (JK_STATUS_CMD_TEXT_LIST)#define JK_STATUS_MIME_UNKNOWN (0)#define JK_STATUS_MIME_HTML (1)#define JK_STATUS_MIME_XML (2)#define JK_STATUS_MIME_TXT (3)#define JK_STATUS_MIME_PROP (4)#define JK_STATUS_MIME_DEF (JK_STATUS_MIME_HTML)#define JK_STATUS_MIME_MAX (JK_STATUS_MIME_PROP)#define JK_STATUS_MIME_TEXT_UNKNOWN ("unknown")#define JK_STATUS_MIME_TEXT_HTML ("html")#define JK_STATUS_MIME_TEXT_XML ("xml")#define JK_STATUS_MIME_TEXT_TXT ("txt")#define JK_STATUS_MIME_TEXT_PROP ("prop")#define JK_STATUS_MIME_TEXT_DEF (JK_STATUS_MIME_TEXT_HTML)#define JK_STATUS_MASK_ACTIVE 0x000000FF#define JK_STATUS_MASK_DISABLED 0x0000FF00#define JK_STATUS_MASK_STOPPED 0x00FF0000#define JK_STATUS_MASK_OK 0x00010101#define JK_STATUS_MASK_IDLE 0x00020202#define JK_STATUS_MASK_BUSY 0x00040404#define JK_STATUS_MASK_RECOVER 0x00080808#define JK_STATUS_MASK_ERROR 0x00101010#define JK_STATUS_MASK_GOOD_DEF 0x0000000F#define JK_STATUS_MASK_BAD_DEF 0x00FF1010#define JK_STATUS_WAIT_AFTER_UPDATE "3"#define JK_STATUS_REFRESH_DEF "10"#define JK_STATUS_ESC_CHARS ("<>?&")#define JK_STATUS_HEAD "<!DOCTYPE HTML PUBLIC \"-//W3C//" \ "DTD HTML 3.2 Final//EN\">\n" \ "<html><head><title>JK Status Manager</title>"#define JK_STATUS_COPYRIGHT "Copyright © 1999-2007, The Apache Software Foundation<br />" \ "Licensed under the <a href=\"http://www.apache.org/licenses/LICENSE-2.0\">" \ "Apache License, Version 2.0</a>."#define JK_STATUS_HEND "</head>\n<body>\n"#define JK_STATUS_BEND "</body>\n</html>\n"#define JK_STATUS_XMLH "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"#define JK_STATUS_NS_DEF "jk:"#define JK_STATUS_XMLNS_DEF "xmlns:jk=\"http://tomcat.apache.org\""#define JK_STATUS_PREFIX_DEF "worker"#define JK_STATUS_FORM_START "<form method=\"%s\" action=\"%s\">\n"#define JK_STATUS_FORM_HIDDEN_INT "<input type=\"hidden\" name=\"%s\" value=\"%d\"/>\n"#define JK_STATUS_FORM_HIDDEN_STRING "<input type=\"hidden\" name=\"%s\" value=\"%s\"/>\n"#define JK_STATUS_TABLE_HEAD_3_STRING "<tr><th>%s</th><th>%s</th><th>%s</th></tr>\n"#define JK_STATUS_TABLE_ROW_3_STRING "<tr><td>%s</td><td>%s</td><td>%s</td></tr>\n"#define JK_STATUS_SHOW_AJP_HEAD "<tr>" \ "<th>Type</th>" \ "<th>Host</th>" \ "<th>Addr</th>" \ "</tr>\n"#define JK_STATUS_SHOW_AJP_ROW "<tr>" \ "<td>%s</td>" \ "<td>%s:%d</td>" \ "<td>%s</td>" \ "</tr>\n"#define JK_STATUS_SHOW_LB_HEAD "<tr>" \ "<th>Type</th>" \ "<th>" JK_STATUS_ARG_LB_TEXT_STICKY "</th>" \ "<th>" JK_STATUS_ARG_LB_TEXT_STICKY_FORCE "</th>" \ "<th>" JK_STATUS_ARG_LB_TEXT_RETRIES "</th>" \ "<th>" JK_STATUS_ARG_LB_TEXT_METHOD "</th>" \ "<th>" JK_STATUS_ARG_LB_TEXT_LOCK "</th>" \ "<th>" JK_STATUS_ARG_LB_TEXT_RECOVER_TIME "</th>" \ "<th>" JK_STATUS_ARG_LB_TEXT_MAX_REPLY_TIMEOUTS "</th>" \ "</tr>\n"#define JK_STATUS_SHOW_LB_ROW "<tr>" \ "<td>%s</td>" \ "<td>%s</td>" \ "<td>%s</td>" \ "<td>%d</td>" \ "<td>%s</td>" \ "<td>%s</td>" \ "<td>%d</td>" \ "<td>%d</td>" \ "</tr>\n"#define JK_STATUS_SHOW_MEMBER_HEAD "<tr>" \ "<th> </th><th>Name</th><th>Type</th>" \ "<th>Host</th><th>Addr</th>" \ "<th>Act</th><th>State</th>" \ "<th>D</th><th>F</th><th>M</th>" \ "<th>V</th><th>Acc</th>" \ "<th>Err</th><th>CE</th><th>RE</th>" \ "<th>Wr</th><th>Rd</th><th>Busy</th><th>Max</th>" \ "<th>" JK_STATUS_ARG_LBM_TEXT_ROUTE "</th>" \ "<th>RR</th><th>Cd</th><th>Rs</th>" \ "</tr>\n"#define JK_STATUS_SHOW_MEMBER_ROW "<td>%s</td>" \ "<td>%s</td>" \ "<td>%s:%d</td>" \ "<td>%s</td>" \ "<td>%s</td>" \ "<td>%s</td>" \ "<td>%d</td>" \ "<td>%d</td>" \ "<td>%" JK_UINT64_T_FMT "</td>" \ "<td>%" JK_UINT64_T_FMT "</td>" \ "<td>%" JK_UINT64_T_FMT "</td>" \ "<td>%" JK_UINT32_T_FMT "</td>" \ "<td>%" JK_UINT32_T_FMT "</td>" \ "<td>%" JK_UINT32_T_FMT "</td>" \ "<td>%s</td>" \ "<td>%s</td>" \ "<td>%d</td>" \ "<td>%d</td>" \ "<td>%s</td>" \ "<td>%s</td>" \ "<td>%s</td>" \ "<td>%d/%d</td>" \ "</tr>\n"typedef struct status_worker status_worker_t;struct status_endpoint{ status_worker_t *worker; jk_map_t *req_params; char *msg; jk_endpoint_t endpoint;};typedef struct status_endpoint status_endpoint_t;struct status_worker{ jk_pool_t p; jk_pool_atom_t buf[TINY_POOL_SIZE]; const char *name; const char *css; const char *ns; const char *xmlns; const char *doctype; const char *prefix; int read_only; char **user_names; unsigned int num_of_users; int user_case_insensitive; jk_uint32_t good_mask; jk_uint32_t bad_mask; jk_worker_t worker; jk_worker_env_t *we;};static const char *worker_type[] = { "unknown", "ajp12", "ajp13", "ajp14", "jni", "lb", "status", NULL};static const char *headers_names[] = { "Content-Type", "Cache-Control", "Pragma", NULL};static const char *cmd_type[] = { JK_STATUS_CMD_TEXT_UNKNOWN, JK_STATUS_CMD_TEXT_LIST, JK_STATUS_CMD_TEXT_SHOW, JK_STATUS_CMD_TEXT_EDIT, JK_STATUS_CMD_TEXT_UPDATE, JK_STATUS_CMD_TEXT_RESET, JK_STATUS_CMD_TEXT_VERSION, JK_STATUS_CMD_TEXT_RECOVER, NULL};static const char *mime_type[] = { JK_STATUS_MIME_TEXT_UNKNOWN, JK_STATUS_MIME_TEXT_HTML, JK_STATUS_MIME_TEXT_XML, JK_STATUS_MIME_TEXT_TXT, JK_STATUS_MIME_TEXT_PROP, NULL};#define HEADERS_NO_CACHE "no-cache", "no-cache", NULLstatic const char *headers_vhtml[] = { "text/html", HEADERS_NO_CACHE};static const char *headers_vxml[] = { "text/xml", HEADERS_NO_CACHE};static const char *headers_vtxt[] = { "text/plain", HEADERS_NO_CACHE};static void jk_puts(jk_ws_service_t *s, const char *str){ if (str) s->write(s, str, (unsigned int)strlen(str)); else s->write(s, "(null)", 6);}static void jk_putv(jk_ws_service_t *s, ...){ va_list va; const char *str; va_start(va, s); while (1) { str = va_arg(va, const char *); if (str == NULL) break; s->write(s, str, (unsigned int)strlen(str)); } va_end(va);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?