71#define APR_WANT_STRFUNC
75#define STATUS_MAXLINE 64
79#define GBYTE 1073741824L
81#ifndef DEFAULT_TIME_FORMAT
82#define DEFAULT_TIME_FORMAT "%A, %d-%b-%Y %H:%M:%S %Z"
85#define STATUS_MAGIC_TYPE "application/x-httpd-status"
87module AP_MODULE_DECLARE_DATA status_module;
157#define STAT_OPT_END -1
158#define STAT_OPT_REFRESH 0
159#define STAT_OPT_NOTABLE 1
160#define STAT_OPT_AUTO 2
177#define SERVER_DISABLED SERVER_NUM_STATUS
178#define MOD_STATUS_NUM_STATUS (SERVER_NUM_STATUS+1)
188 int j,
i,
res, written;
248 "Server status unavailable in inetd mode");
292 if (*(loc +
len ) ==
'=') {
424 "<title>Apache Status</title>\n"
426 "<h1>Apache Server Status for ",
r);
444 ap_rprintf(
r,
"<dt>Parent Server Config. Generation: %d</dt>\n",
446 ap_rprintf(
r,
"<dt>Parent Server MPM Generation: %d</dt>\n",
451 ap_rprintf(
r,
"<dt>Server load: %.2f %.2f %.2f</dt>\n",
452 t.loadavg,
t.loadavg5,
t.loadavg15);
470 ap_rprintf(
r,
"ParentServerConfigGeneration: %d\n",
479 ap_rprintf(
r,
"Load1: %.2f\nLoad5: %.2f\nLoad15: %.2f\n",
480 t.loadavg,
t.loadavg5,
t.loadavg15);
486 ap_rprintf(
r,
"Total Accesses: %lu\nTotal kBytes: %"
493 ap_rprintf(
r,
"CPUUser: %g\nCPUSystem: %g\nCPUChildrenUser: %g\nCPUChildrenSystem: %g\n",
558 ap_rprintf(
r,
"<dt>%d requests currently being processed, %d workers gracefully restarting, "
559 "%d idle workers</dt>\n", busy,
graceful, idle);
561 ap_rprintf(
r,
"BusyWorkers: %d\nGracefulWorkers: %d\nIdleWorkers: %d\n", busy,
graceful, idle);
567 int write_completion = 0, lingering_close = 0, keep_alive = 0,
570 ap_rputs(
"\n\n<table rules=\"all\" cellpadding=\"1%\">\n"
571 "<tr><th rowspan=\"2\">Slot</th>"
572 "<th rowspan=\"2\">PID</th>"
573 "<th rowspan=\"2\">Stopping</th>"
574 "<th colspan=\"2\">Connections</th>\n"
575 "<th colspan=\"2\">Threads</th>"
576 "<th colspan=\"3\">Async connections</th></tr>\n"
577 "<tr><th>total</th><th>accepting</th>"
578 "<th>busy</th><th>graceful</th><th>idle</th>"
579 "<th>writing</th><th>keep-alive</th><th>closing</th></tr>\n",
r);
584 write_completion +=
ps_record->write_completion;
586 lingering_close +=
ps_record->lingering_close;
592 const char *
dying =
"no";
593 const char *
old =
"";
601 "<td>%u</td><td>%s</td>"
602 "<td>%u</td><td>%u</td><td>%u</td>"
603 "<td>%u</td><td>%u</td><td>%u</td>"
620 "<td>%d</td><td>%d</td>"
621 "<td>%d</td><td> </td>"
622 "<td>%d</td><td>%d</td><td>%d</td>"
623 "<td>%d</td><td>%d</td><td>%d</td>"
628 write_completion, keep_alive, lingering_close);
634 "ConnsAsyncWriting: %d\n"
635 "ConnsAsyncKeepAlive: %d\n"
636 "ConnsAsyncClosing: %d\n",
639 write_completion, keep_alive, lingering_close);
668 "<p>Scoreboard Key:<br />\n"
669 "\"<b><code>_</code></b>\" Waiting for Connection, \n"
670 "\"<b><code>S</code></b>\" Starting up, \n"
671 "\"<b><code>R</code></b>\" Reading Request,<br />\n"
672 "\"<b><code>W</code></b>\" Sending Reply, \n"
673 "\"<b><code>K</code></b>\" Keepalive (read), \n"
674 "\"<b><code>D</code></b>\" DNS Lookup,<br />\n"
675 "\"<b><code>C</code></b>\" Closing connection, \n"
676 "\"<b><code>L</code></b>\" Logging, \n"
677 "\"<b><code>G</code></b>\" Gracefully finishing,<br /> \n"
678 "\"<b><code>I</code></b>\" Idle cleanup of worker, \n"
679 "\"<b><code>.</code></b>\" Open slot with no current process<br />\n"
711 ap_rputs(
"<hr /><h2>Server Details</h2>\n\n",
r);
713 ap_rputs(
"\n\n<table border=\"0\"><tr>"
714 "<th>Srv</th><th>PID</th><th>Acc</th>"
719 "<th>SS</th><th>Req</th><th>Dur</th>"
720 "<th>Conn</th><th>Child</th><th>Slot</th>"
721 "<th>Client</th><th>Protocol</th><th>VHost</th>"
722 "<th>Request</th></tr>\n\n",
r);
764 "<b>Server %d-%d</b> (-): %d|%lu|%lu [",
769 "<b>Server %d-%d</b> (%"
836 " <i>%s {%s}</i> <i>(%s)</i> <b>[%s]</b><br />\n\n",
850 "<tr><td><b>%d-%d</b></td><td>-</td><td>%d/%lu/%lu",
855 "<tr><td><b>%d-%d</b></td><td>%"
857 "</td><td>%d/%lu/%lu",
918 ap_rprintf(
r,
"</td><td>%-1.1f</td><td>%-2.2f</td><td>%-2.2f\n",
922 ap_rprintf(
r,
"</td><td>%s</td><td>%s</td><td nowrap>%s</td>"
923 "<td nowrap>%s</td></tr>\n\n",
941<tr><th>Srv</th><td>Child Server number - generation</td></tr>\n \
942<tr><th>PID</th><td>OS process ID</td></tr>\n \
943<tr><th>Acc</th><td>Number of accesses this connection / this child / this slot</td></tr>\n \
944<tr><th>M</th><td>Mode of operation</td></tr>\n"
947"<tr><th>CPU</th><td>CPU usage, number of seconds</td></tr>\n"
950"<tr><th>SS</th><td>Seconds since beginning of most recent request</td></tr>\n \
951<tr><th>Req</th><td>Milliseconds required to process most recent request</td></tr>\n \
952<tr><th>Dur</th><td>Sum of milliseconds required to process all requests</td></tr>\n \
953<tr><th>Conn</th><td>Kilobytes transferred this connection</td></tr>\n \
954<tr><th>Child</th><td>Megabytes transferred this child</td></tr>\n \
955<tr><th>Slot</th><td>Total megabytes transferred this slot</td></tr>\n \
962 ap_rputs(
"<hr />To obtain a full report with current status "
963 "information you need to use the "
964 "<code>ExtendedStatus On</code> directive.\n",
r);
Apache Multi-Processing Module library.
const char apr_size_t len
APR Standard Headers Support.
static volatile int dying
void ap_hook_post_config(ap_HOOK_post_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
#define AP_DECLARE_MODULE(foo)
void ap_hook_handler(ap_HOOK_handler_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_hook_pre_config(ap_HOOK_pre_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_hook_child_init(ap_HOOK_child_init_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
const char * ap_show_mpm(void)
const char * ap_get_server_built(void)
const char * ap_get_server_description(void)
int ap_state_query(int query_code)
const char * ap_get_server_name(request_rec *r)
int ap_rvputs(request_rec *r,...)
int ap_rprintf(request_rec *r, const char *fmt,...) __attribute__((format(printf
static APR_INLINE int ap_rputs(const char *str, request_rec *r)
int ap_rputc(int c, request_rec *r)
void ap_set_content_type_ex(request_rec *r, const char *ct, int trusted)
apr_pool_t apr_dbd_t apr_dbd_results_t ** res
const char apr_ssize_t int flags
#define APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ns, link, ret, name, args_decl, args_use, ok, decline)
#define HTTP_INTERNAL_SERVER_ERROR
#define AP_STATUS_EXTENDED
int ap_run_status_hook(request_rec *r, int flags)
#define AP_STATUS_NOTABLE
#define STANDARD20_MODULE_STUFF
const char * ap_psignature(const char *prefix, request_rec *r)
void ap_get_loadavg(ap_loadavg_t *ld)
char * ap_escape_logitem(apr_pool_t *p, const char *str)
#define ap_strstr_c(s, c)
char * ap_ht_time(apr_pool_t *p, apr_time_t t, const char *fmt, int gmt)
#define ap_escape_html(p, s)
apr_vformatter_buff_t const char va_list ap
const void apr_size_t bytes
#define apr_time_as_msec(time)
#define apr_time_sec(time)
apr_status_t ap_mpm_query(int query_code, int *result)
#define AP_MPMQ_HARD_LIMIT_THREADS
#define AP_MPMQ_MAX_THREADS
#define AP_MPMQ_GENERATION
#define AP_MPMQ_MAX_DAEMONS
#define AP_MPMQ_HARD_LIMIT_DAEMONS
#define DEFAULT_TIME_FORMAT
static char status_flags[(11+1)]
static void format_kbyte_out(request_rec *r, apr_off_t kbytes)
static void show_time(request_rec *r, apr_uint32_t tsecs)
static const struct stat_opt status_options[]
#define MOD_STATUS_NUM_STATUS
static void register_hooks(apr_pool_t *p)
static int status_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
#define STATUS_MAGIC_TYPE
static void format_byte_out(request_rec *r, apr_off_t bytes)
static int threads_per_child
static int status_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
static int status_handler(request_rec *r)
Status Report Extension Module to Apache.
Apache scoreboard library.
#define SERVER_BUSY_WRITE
scoreboard * ap_scoreboard_image
void ap_copy_scoreboard_worker(worker_score *dest, int child_num, int thread_num)
int ap_exists_scoreboard_image(void)
#define SERVER_BUSY_KEEPALIVE
global_score * ap_get_scoreboard_global(void)
process_score * ap_get_scoreboard_process(int x)
A structure to hold various server loadavg.
A structure that represents the current request.
apr_table_t * headers_out
A structure to store information for each virtual server.
const char * form_data_str
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray