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

📄 mod_status.c

📁 Apache官方在今天放出产品系列2.2的最新版本2.2.11的源码包 最流行的HTTP服务器软件之一
💻 C
📖 第 1 页 / 共 3 页
字号:
                else                    req_time = (long)                        ((ws_record->stop_time -                          ws_record->start_time) / 1000);                if (req_time < 0L)                    req_time = 0L;                lres = ws_record->access_count;                my_lres = ws_record->my_access_count;                conn_lres = ws_record->conn_count;                bytes = ws_record->bytes_served;                my_bytes = ws_record->my_bytes_served;                conn_bytes = ws_record->conn_bytes;                if (ws_record->pid) { /* MPM sets per-worker pid and generation */                    worker_pid = ws_record->pid;                    worker_generation = ws_record->generation;                }                else {                    worker_pid = ps_record->pid;                    worker_generation = ps_record->generation;                }                if (no_table_report) {                    if (ws_record->status == SERVER_DEAD)                        ap_rprintf(r,                                   "<b>Server %d-%d</b> (-): %d|%lu|%lu [",                                   i, (int)worker_generation,                                   (int)conn_lres, my_lres, lres);                    else                        ap_rprintf(r,                                   "<b>Server %d-%d</b> (%"                                   APR_PID_T_FMT "): %d|%lu|%lu [",                                   i, (int) worker_generation,                                   worker_pid,                                   (int)conn_lres, my_lres, lres);                    switch (ws_record->status) {                    case SERVER_READY:                        ap_rputs("Ready", r);                        break;                    case SERVER_STARTING:                        ap_rputs("Starting", r);                        break;                    case SERVER_BUSY_READ:                        ap_rputs("<b>Read</b>", r);                        break;                    case SERVER_BUSY_WRITE:                        ap_rputs("<b>Write</b>", r);                        break;                    case SERVER_BUSY_KEEPALIVE:                        ap_rputs("<b>Keepalive</b>", r);                        break;                    case SERVER_BUSY_LOG:                        ap_rputs("<b>Logging</b>", r);                        break;                    case SERVER_BUSY_DNS:                        ap_rputs("<b>DNS lookup</b>", r);                        break;                    case SERVER_CLOSING:                        ap_rputs("<b>Closing</b>", r);                        break;                    case SERVER_DEAD:                        ap_rputs("Dead", r);                        break;                    case SERVER_GRACEFUL:                        ap_rputs("Graceful", r);                        break;                    case SERVER_IDLE_KILL:                        ap_rputs("Dying", r);                        break;                    default:                        ap_rputs("?STATE?", r);                        break;                    }                    ap_rprintf(r, "] "#ifdef HAVE_TIMES                               "u%g s%g cu%g cs%g"#endif                               "\n %ld %ld (",#ifdef HAVE_TIMES                               ws_record->times.tms_utime / tick,                               ws_record->times.tms_stime / tick,                               ws_record->times.tms_cutime / tick,                               ws_record->times.tms_cstime / tick,#endif                               (long)apr_time_sec(nowtime -                                                  ws_record->last_used),                               (long) req_time);                    format_byte_out(r, conn_bytes);                    ap_rputs("|", r);                    format_byte_out(r, my_bytes);                    ap_rputs("|", r);                    format_byte_out(r, bytes);                    ap_rputs(")\n", r);                    ap_rprintf(r,                               " <i>%s {%s}</i> <b>[%s]</b><br />\n\n",                               ap_escape_html(r->pool,                                              ws_record->client),                               ap_escape_html(r->pool,                                              ap_escape_logitem(r->pool,                                                                ws_record->request)),                               ap_escape_html(r->pool,                                              ws_record->vhost));                }                else { /* !no_table_report */                    if (ws_record->status == SERVER_DEAD)                        ap_rprintf(r,                                   "<tr><td><b>%d-%d</b></td><td>-</td><td>%d/%lu/%lu",                                   i, (int)worker_generation,                                   (int)conn_lres, my_lres, lres);                    else                        ap_rprintf(r,                                   "<tr><td><b>%d-%d</b></td><td>%"                                   APR_PID_T_FMT                                   "</td><td>%d/%lu/%lu",                                   i, (int)worker_generation,                                   worker_pid,                                   (int)conn_lres,                                   my_lres, lres);                    switch (ws_record->status) {                    case SERVER_READY:                        ap_rputs("</td><td>_", r);                        break;                    case SERVER_STARTING:                        ap_rputs("</td><td><b>S</b>", r);                        break;                    case SERVER_BUSY_READ:                        ap_rputs("</td><td><b>R</b>", r);                        break;                    case SERVER_BUSY_WRITE:                        ap_rputs("</td><td><b>W</b>", r);                        break;                    case SERVER_BUSY_KEEPALIVE:                        ap_rputs("</td><td><b>K</b>", r);                        break;                    case SERVER_BUSY_LOG:                        ap_rputs("</td><td><b>L</b>", r);                        break;                    case SERVER_BUSY_DNS:                        ap_rputs("</td><td><b>D</b>", r);                        break;                    case SERVER_CLOSING:                        ap_rputs("</td><td><b>C</b>", r);                        break;                    case SERVER_DEAD:                        ap_rputs("</td><td>.", r);                        break;                    case SERVER_GRACEFUL:                        ap_rputs("</td><td>G", r);                        break;                    case SERVER_IDLE_KILL:                        ap_rputs("</td><td>I", r);                        break;                    default:                        ap_rputs("</td><td>?", r);                        break;                    }                    ap_rprintf(r,                               "\n</td>"#ifdef HAVE_TIMES                               "<td>%.2f</td>"#endif                               "<td>%ld</td><td>%ld",#ifdef HAVE_TIMES                               (ws_record->times.tms_utime +                                ws_record->times.tms_stime +                                ws_record->times.tms_cutime +                                ws_record->times.tms_cstime) / tick,#endif                               (long)apr_time_sec(nowtime -                                                  ws_record->last_used),                               (long)req_time);                    ap_rprintf(r, "</td><td>%-1.1f</td><td>%-2.2f</td><td>%-2.2f\n",                               (float)conn_bytes / KBYTE, (float) my_bytes / MBYTE,                               (float)bytes / MBYTE);                    if (ws_record->status == SERVER_BUSY_READ)                        ap_rprintf(r,                                   "</td><td>?</td><td nowrap>?</td><td nowrap>..reading.. </td></tr>\n\n");                    else                        ap_rprintf(r,                                   "</td><td>%s</td><td nowrap>%s</td><td nowrap>%s</td></tr>\n\n",                                   ap_escape_html(r->pool,                                                  ws_record->client),                                   ap_escape_html(r->pool,                                                  ws_record->vhost),                                   ap_escape_html(r->pool,                                                  ap_escape_logitem(r->pool,                                                                     ws_record->request)));                } /* no_table_report */            } /* for (j...) */        } /* for (i...) */        if (!no_table_report) {            ap_rputs("</table>\n \<hr /> \<table>\n \<tr><th>Srv</th><td>Child Server number - generation</td></tr>\n \<tr><th>PID</th><td>OS process ID</td></tr>\n \<tr><th>Acc</th><td>Number of accesses this connection / this child / this slot</td></tr>\n \<tr><th>M</th><td>Mode of operation</td></tr>\n"#ifdef HAVE_TIMES"<tr><th>CPU</th><td>CPU usage, number of seconds</td></tr>\n"#endif"<tr><th>SS</th><td>Seconds since beginning of most recent request</td></tr>\n \<tr><th>Req</th><td>Milliseconds required to process most recent request</td></tr>\n \<tr><th>Conn</th><td>Kilobytes transferred this connection</td></tr>\n \<tr><th>Child</th><td>Megabytes transferred this child</td></tr>\n \<tr><th>Slot</th><td>Total megabytes transferred this slot</td></tr>\n \</table>\n", r);        }    } /* if (ap_extended_status && !short_report) */    else {        if (!short_report) {            ap_rputs("<hr />To obtain a full report with current status "                     "information you need to use the "                     "<code>ExtendedStatus On</code> directive.\n", r);        }    }    {        /* Run extension hooks to insert extra content. */        int flags =            (short_report ? AP_STATUS_SHORT : 0) |            (no_table_report ? AP_STATUS_NOTABLE : 0) |            (ap_extended_status ? AP_STATUS_EXTENDED : 0);        ap_run_status_hook(r, flags);    }    if (!short_report) {        ap_rputs(ap_psignature("<hr />\n",r), r);        ap_rputs("</body></html>\n", r);    }    return 0;}static int status_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,                       server_rec *s){    status_flags[SERVER_DEAD] = '.';  /* We don't want to assume these are in */    status_flags[SERVER_READY] = '_'; /* any particular order in scoreboard.h */    status_flags[SERVER_STARTING] = 'S';    status_flags[SERVER_BUSY_READ] = 'R';    status_flags[SERVER_BUSY_WRITE] = 'W';    status_flags[SERVER_BUSY_KEEPALIVE] = 'K';    status_flags[SERVER_BUSY_LOG] = 'L';    status_flags[SERVER_BUSY_DNS] = 'D';    status_flags[SERVER_CLOSING] = 'C';    status_flags[SERVER_GRACEFUL] = 'G';    status_flags[SERVER_IDLE_KILL] = 'I';    ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);    ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit);    return OK;}#ifdef HAVE_TIMESstatic void status_child_init(apr_pool_t *p, server_rec *s){    child_pid = getpid();}#endifstatic void register_hooks(apr_pool_t *p){    ap_hook_handler(status_handler, NULL, NULL, APR_HOOK_MIDDLE);    ap_hook_post_config(status_init, NULL, NULL, APR_HOOK_MIDDLE);#ifdef HAVE_TIMES    ap_hook_child_init(status_child_init, NULL, NULL, APR_HOOK_MIDDLE);#endif}module AP_MODULE_DECLARE_DATA status_module ={    STANDARD20_MODULE_STUFF,    NULL,                       /* dir config creater */    NULL,                       /* dir merger --- default is to override */    NULL,                       /* server config */    NULL,                       /* merge server config */    status_module_cmds,         /* command table */    register_hooks              /* register_hooks */};

⌨️ 快捷键说明

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