|
|
|
@ -181,6 +181,24 @@ static const gchar html_connections_sum[] = |
|
|
|
|
" <td>%u</td>\n" |
|
|
|
|
" </tr>\n" |
|
|
|
|
" </table>\n"; |
|
|
|
|
static const gchar html_status_codes[] = |
|
|
|
|
" <table cellspacing=\"0\">\n" |
|
|
|
|
" <tr>\n" |
|
|
|
|
" <th style=\"width: 100px;\">1xx (info)</th>\n" |
|
|
|
|
" <th style=\"width: 175px;\">2xx (success)</th>\n" |
|
|
|
|
" <th style=\"width: 175px;\">3xx (redirect)</th>\n" |
|
|
|
|
" <th style=\"width: 175px;\">4xx (client error)</th>\n" |
|
|
|
|
" <th style=\"width: 175px;\">5xx (server error)</th>\n" |
|
|
|
|
" </tr>\n" |
|
|
|
|
" <tr>\n" |
|
|
|
|
" <td>%" G_GUINT64_FORMAT "</td>\n" |
|
|
|
|
" <td>%" G_GUINT64_FORMAT "</td>\n" |
|
|
|
|
" <td>%" G_GUINT64_FORMAT "</td>\n" |
|
|
|
|
" <td>%" G_GUINT64_FORMAT "</td>\n" |
|
|
|
|
" <td>%" G_GUINT64_FORMAT "</td>\n" |
|
|
|
|
" </tr>\n" |
|
|
|
|
" </table>\n"; |
|
|
|
|
|
|
|
|
|
static const gchar html_connections_th[] = |
|
|
|
|
" <table cellspacing=\"0\">\n" |
|
|
|
|
" <tr>\n" |
|
|
|
@ -313,6 +331,13 @@ static const gchar css_blue[] = |
|
|
|
|
" .totals td { border-top: 1px solid #DDDDDD; }\n" |
|
|
|
|
" </style>\n"; |
|
|
|
|
|
|
|
|
|
static guint64 mod_status_response_codes[] = { |
|
|
|
|
0, /*1xx*/
|
|
|
|
|
0, /*2xx*/
|
|
|
|
|
0, /*3xx*/
|
|
|
|
|
0, /*4xx*/
|
|
|
|
|
0, /*5xx*/
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
typedef struct mod_status_param mod_status_param; |
|
|
|
|
|
|
|
|
@ -695,6 +720,13 @@ static GString *status_info_full(liVRequest *vr, liPlugin *p, gboolean short_inf |
|
|
|
|
connection_count[3], connection_count[4], connection_count[5], connection_count[1] |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
/* response status codes */ |
|
|
|
|
g_string_append_len(html, CONST_STR_LEN("<div class=\"title\"><strong>HTTP Status codes</strong> (sum)</div>\n")); |
|
|
|
|
g_string_append_printf(html, html_status_codes, mod_status_response_codes[0], mod_status_response_codes[1], |
|
|
|
|
mod_status_response_codes[2], mod_status_response_codes[3], mod_status_response_codes[4] |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* list connections */ |
|
|
|
|
if (!short_info) { |
|
|
|
|
GString *ts, *ts_timeout, *bytes_in, *bytes_out, *bytes_in_5s, *bytes_out_5s; |
|
|
|
@ -1156,6 +1188,18 @@ static liHandlerResult status_info_runtime(liVRequest *vr, liPlugin *p) { |
|
|
|
|
return LI_HANDLER_GO_ON; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void status_handle_vrclose(liVRequest *vr, liPlugin *p) { |
|
|
|
|
gint http_status = vr->response.http_status; |
|
|
|
|
UNUSED(p); |
|
|
|
|
|
|
|
|
|
if ((http_status < 100 && http_status != 0) || http_status > 599) { |
|
|
|
|
VR_ERROR(vr, "unknown status code: %d", http_status); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mod_status_response_codes[(http_status / 100)-1]++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static const liPluginOption options[] = { |
|
|
|
@ -1186,6 +1230,8 @@ static void plugin_status_init(liServer *srv, liPlugin *p, gpointer userdata) { |
|
|
|
|
p->optionptrs = optionptrs; |
|
|
|
|
p->actions = actions; |
|
|
|
|
p->setups = setups; |
|
|
|
|
|
|
|
|
|
p->handle_vrclose = status_handle_vrclose; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|