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 &#169; 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>&nbsp;</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 + -
显示快捷键?