📄 mod_status.c
字号:
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 + -