From d1c025ba7ff661b8b86540a27b511c518488bcc9 Mon Sep 17 00:00:00 2001 From: Thomas Porzelt Date: Wed, 16 Sep 2009 20:55:31 +0200 Subject: [PATCH] [mod_status] Make connection list sortable through javascript --- src/modules/mod_status.c | 121 +++++++++++++++++++++++++++------------ 1 file changed, 85 insertions(+), 36 deletions(-) diff --git a/src/modules/mod_status.c b/src/modules/mod_status.c index 9378e8e..8c4eb5b 100644 --- a/src/modules/mod_status.c +++ b/src/modules/mod_status.c @@ -39,13 +39,61 @@ static liHandlerResult status_info_runtime(liVRequest *vr, liPlugin *p); static gint str_comp(gconstpointer a, gconstpointer b); /* html snippet constants */ -static const gchar header[] = +static const gchar html_header[] = "\n" "\n" "\n" " \n" " Lighttpd Status\n"; +static const gchar html_js[] = + " "; + static const gchar html_top[] = "
Lighttpd Server Status | " " main - runtime" @@ -100,29 +148,29 @@ static const gchar html_worker_row_avg[] = static const gchar html_connections_th[] = " \n" " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" " \n"; static const gchar html_connections_row[] = " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" " \n"; @@ -374,7 +422,8 @@ static void status_collect_cb(gpointer cbdata, gpointer fdata, GPtrArray *result totals.active_cons_5s += sd->stats.active_cons_5s; } - g_string_append_len(html, header, sizeof(header)-1); + g_string_append_len(html, CONST_STR_LEN(html_header)); + g_string_append_len(html, CONST_STR_LEN(html_js)); /* auto refresh */ { @@ -397,9 +446,9 @@ static void status_collect_cb(gpointer cbdata, gpointer fdata, GPtrArray *result GString *css = _OPTION(vr, p, 0).string; if (!css || !css->len) /* default css */ - g_string_append_len(html, css_default, sizeof(css_default)-1); + g_string_append_len(html, CONST_STR_LEN(css_default)); else if (g_str_equal(css->str, "blue")) /* blue css */ - g_string_append_len(html, css_blue, sizeof(css_blue)-1); + g_string_append_len(html, CONST_STR_LEN(css_blue)); else /* external css */ g_string_append_printf(html, " \n", css->str); } @@ -422,7 +471,7 @@ static void status_collect_cb(gpointer cbdata, gpointer fdata, GPtrArray *result { g_string_append_len(html, CONST_STR_LEN("
Absolute stats
\n")); - g_string_append_len(html, html_worker_th, sizeof(html_worker_th)-1); + g_string_append_len(html, CONST_STR_LEN(html_worker_th)); #define PERCENTAGE(x, y) (y ? (x * 100 / y) : 0) for (i = 0; i < result->len; i++) { @@ -454,7 +503,7 @@ static void status_collect_cb(gpointer cbdata, gpointer fdata, GPtrArray *result { g_string_append_len(html, CONST_STR_LEN("
Average stats (since start)
\n")); - g_string_append_len(html, html_worker_th_avg, sizeof(html_worker_th_avg)-1); + g_string_append_len(html, CONST_STR_LEN(html_worker_th_avg)); #define PERCENTAGE(x) (sd->stat ## x ? (sd->stat ## x * 100 / total ## x) : 0) for (i = 0; i < result->len; i++) { @@ -490,7 +539,7 @@ static void status_collect_cb(gpointer cbdata, gpointer fdata, GPtrArray *result { g_string_append_len(html, CONST_STR_LEN("
Average stats (5 seconds)
\n")); - g_string_append_len(html, html_worker_th_avg, sizeof(html_worker_th_avg)-1); + g_string_append_len(html, CONST_STR_LEN(html_worker_th_avg)); #define PERCENTAGE(x) (sd->stat ## x ? (sd->stat ## x * 100 / total ## x) : 0) for (i = 0; i < result->len; i++) { @@ -563,7 +612,7 @@ static void status_collect_cb(gpointer cbdata, gpointer fdata, GPtrArray *result resp_len = g_string_sized_new(10); g_string_append_len(html, CONST_STR_LEN("
Active connections
\n")); - g_string_append_len(html, html_connections_th, sizeof(html_connections_th)-1); + g_string_append_len(html, CONST_STR_LEN(html_connections_th)); for (i = 0; i < result->len; i++) { mod_status_wrk_data *sd = g_ptr_array_index(result, i); for (j = 0; j < sd->connections->len; j++) { @@ -584,14 +633,14 @@ static void status_collect_cb(gpointer cbdata, gpointer fdata, GPtrArray *result cd->path->str, cd->query->len ? "?":"", cd->query->len ? cd->query->str : "", - ts->str, - bytes_in->str, - bytes_out->str, - bytes_in_5s->str, - bytes_out_5s->str, + (guint64)(CUR_TS(vr->wrk) - cd->ts), ts->str, + cd->bytes_in, bytes_in->str, + cd->bytes_out, bytes_out->str, + cd->bytes_in_5s_diff / G_GUINT64_CONSTANT(5), bytes_in_5s->str, + cd->bytes_out_5s_diff / G_GUINT64_CONSTANT(5), bytes_out_5s->str, (cd->state >= LI_CON_STATE_HANDLE_MAINVR) ? li_http_method_string(cd->method, &len) : "", - (cd->state >= LI_CON_STATE_HANDLE_MAINVR && cd->request_size != -1) ? req_len->str : "", - (cd->state >= LI_CON_STATE_HANDLE_MAINVR) ? resp_len->str : "" + cd->request_size != -1 ? cd->request_size : 0, (cd->state >= LI_CON_STATE_HANDLE_MAINVR && cd->request_size != -1) ? req_len->str : "", + cd->response_size, (cd->state >= LI_CON_STATE_HANDLE_MAINVR) ? resp_len->str : "" ); g_string_free(cd->remote_addr_str, TRUE); @@ -756,7 +805,7 @@ static liHandlerResult status_info_runtime(liVRequest *vr, liPlugin *p) { html = g_string_sized_new(2047); - g_string_append_len(html, CONST_STR_LEN(header)); + g_string_append_len(html, CONST_STR_LEN(html_header)); /* auto refresh */ {
ClientStateHostPath+QuerystringDurationTraffic in/outTraffic in/out / sMethodRequest SizeResponse SizeClientStateHostPath+QuerystringDurationTraffic in/outTraffic in/out / sMethodRequest SizeResponse Size
%s%s%s%s%s%s%s%s / %s%s / %s%s%s%s%s%s%s%s%s%s%s%s / %s%s / %s%s%s%s