From 99c3f027ce6c38771abc4ccf663bb9ead7ada437 Mon Sep 17 00:00:00 2001 From: Jan Kneschke Date: Sun, 31 Jul 2005 13:03:32 +0000 Subject: [PATCH] added sorting to output (by erik^) git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.3.x@494 152afb58-edef-0310-8abb-c4023f1b3aa9 --- src/mod_status.c | 207 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 157 insertions(+), 50 deletions(-) diff --git a/src/mod_status.c b/src/mod_status.c index 34955895..24dc711a 100644 --- a/src/mod_status.c +++ b/src/mod_status.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "server.h" #include "connections.h" @@ -21,6 +22,7 @@ typedef struct { buffer *config_url; buffer *status_url; + int sort; } plugin_config; typedef struct { @@ -102,6 +104,7 @@ SETDEFAULTS_FUNC(mod_status_set_defaults) { config_values_t cv[] = { { "status.status-url", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, { "status.config-url", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, + { "status.enable-sort", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, { NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET } }; @@ -115,9 +118,11 @@ SETDEFAULTS_FUNC(mod_status_set_defaults) { s = malloc(sizeof(plugin_config)); s->config_url = buffer_init(); s->status_url = buffer_init(); + s->sort = 1; cv[0].destination = s->status_url; cv[1].destination = s->config_url; + cv[2].destination = &(s->sort); p->config_storage[i] = s; @@ -154,6 +159,37 @@ static int mod_status_header_append(buffer *b, const char *key) { return 0; } +static int mod_status_header_append_sort(buffer *b, void *p_d, const char* key) { + plugin_data *p = p_d; + + if (p->conf.sort) { + BUFFER_APPEND_STRING_CONST(b, ""); + buffer_append_string(b, key); + BUFFER_APPEND_STRING_CONST(b, "\n"); + } else { + BUFFER_APPEND_STRING_CONST(b, ""); + buffer_append_string(b, key); + BUFFER_APPEND_STRING_CONST(b, "\n"); + } + + return 0; +} + +static int mod_status_get_multiplier(double *avg, char *multiplier, int size) { + *multiplier = ' '; + + if (*avg > size) { *avg /= size; *multiplier = 'k'; } + if (*avg > size) { *avg /= size; *multiplier = 'M'; } + if (*avg > size) { *avg /= size; *multiplier = 'G'; } + if (*avg > size) { *avg /= size; *multiplier = 'T'; } + if (*avg > size) { *avg /= size; *multiplier = 'P'; } + if (*avg > size) { *avg /= size; *multiplier = 'E'; } + if (*avg > size) { *avg /= size; *multiplier = 'Z'; } + if (*avg > size) { *avg /= size; *multiplier = 'Y'; } + + return 0; +} + static handler_t mod_status_handle_server_status_html(server *srv, connection *con, void *p_d) { plugin_data *p = p_d; buffer *b; @@ -177,12 +213,82 @@ static handler_t mod_status_handle_server_status_html(server *srv, connection *c BUFFER_APPEND_STRING_CONST(b, " \n"); + if (p->conf.sort) { + BUFFER_APPEND_STRING_CONST(b, + "\n"); + } + BUFFER_APPEND_STRING_CONST(b, " \n" " \n"); @@ -245,15 +351,9 @@ static handler_t mod_status_handle_server_status_html(server *srv, connection *c BUFFER_APPEND_STRING_CONST(b, "Requests"); avg = p->abs_requests; - multiplier = '\0'; - if (avg > 10000) { avg /= 1000; multiplier = 'k'; } - if (avg > 10000) { avg /= 1000; multiplier = 'M'; } - if (avg > 10000) { avg /= 1000; multiplier = 'G'; } - if (avg > 10000) { avg /= 1000; multiplier = 'T'; } - if (avg > 10000) { avg /= 1000; multiplier = 'P'; } - if (avg > 10000) { avg /= 1000; multiplier = 'E'; } - if (avg > 10000) { avg /= 1000; multiplier = 'Z'; } - if (avg > 10000) { avg /= 1000; multiplier = 'Y'; } + + mod_status_get_multiplier(&avg, &multiplier, 1000); + buffer_append_long(b, avg); BUFFER_APPEND_STRING_CONST(b, " "); if (multiplier) buffer_append_string_len(b, &multiplier, 1); @@ -261,21 +361,40 @@ static handler_t mod_status_handle_server_status_html(server *srv, connection *c BUFFER_APPEND_STRING_CONST(b, "Traffic"); avg = p->abs_traffic_out; - multiplier = '\0'; - if (avg > 10240) { avg /= 1024; multiplier = 'k'; } - if (avg > 10240) { avg /= 1024; multiplier = 'M'; } - if (avg > 10240) { avg /= 1024; multiplier = 'G'; } - if (avg > 10240) { avg /= 1024; multiplier = 'T'; } - if (avg > 10240) { avg /= 1024; multiplier = 'P'; } - if (avg > 10240) { avg /= 1024; multiplier = 'E'; } - if (avg > 10240) { avg /= 1024; multiplier = 'Z'; } - if (avg > 10240) { avg /= 1024; multiplier = 'Y'; } + mod_status_get_multiplier(&avg, &multiplier, 1024); + + sprintf(buf, "%.2f", avg); + buffer_append_string(b, buf); + BUFFER_APPEND_STRING_CONST(b, " "); + if (multiplier) buffer_append_string_len(b, &multiplier, 1); + BUFFER_APPEND_STRING_CONST(b, "byte\n"); + + + + BUFFER_APPEND_STRING_CONST(b, "average (since start)\n"); + + BUFFER_APPEND_STRING_CONST(b, "Requests"); + avg = p->abs_requests / (srv->cur_ts - srv->startup_ts); + + mod_status_get_multiplier(&avg, &multiplier, 1000); buffer_append_long(b, avg); BUFFER_APPEND_STRING_CONST(b, " "); if (multiplier) buffer_append_string_len(b, &multiplier, 1); - BUFFER_APPEND_STRING_CONST(b, "byte\n"); + BUFFER_APPEND_STRING_CONST(b, "req/s\n"); + + BUFFER_APPEND_STRING_CONST(b, "Traffic"); + avg = p->abs_traffic_out / (srv->cur_ts - srv->startup_ts); + + mod_status_get_multiplier(&avg, &multiplier, 1024); + + sprintf(buf, "%.2f", avg); + buffer_append_string(b, buf); + BUFFER_APPEND_STRING_CONST(b, " "); + if (multiplier) buffer_append_string_len(b, &multiplier, 1); + BUFFER_APPEND_STRING_CONST(b, "byte/s\n"); + BUFFER_APPEND_STRING_CONST(b, "average (5s sliding average)\n"); @@ -286,16 +405,8 @@ static handler_t mod_status_handle_server_status_html(server *srv, connection *c avg /= 5; BUFFER_APPEND_STRING_CONST(b, "Requests"); - multiplier = '\0'; - if (avg > 10000) { avg /= 1000; multiplier = 'k'; } - if (avg > 10000) { avg /= 1000; multiplier = 'M'; } - if (avg > 10000) { avg /= 1000; multiplier = 'G'; } - if (avg > 10000) { avg /= 1000; multiplier = 'T'; } - if (avg > 10000) { avg /= 1000; multiplier = 'P'; } - if (avg > 10000) { avg /= 1000; multiplier = 'E'; } - if (avg > 10000) { avg /= 1000; multiplier = 'Z'; } - if (avg > 10000) { avg /= 1000; multiplier = 'Y'; } + mod_status_get_multiplier(&avg, &multiplier, 1000); buffer_append_long(b, avg); BUFFER_APPEND_STRING_CONST(b, " "); @@ -310,18 +421,11 @@ static handler_t mod_status_handle_server_status_html(server *srv, connection *c avg /= 5; BUFFER_APPEND_STRING_CONST(b, "Traffic"); - multiplier = '\0'; - if (avg > 10240) { avg /= 1024; multiplier = 'k'; } - if (avg > 10240) { avg /= 1024; multiplier = 'M'; } - if (avg > 10240) { avg /= 1024; multiplier = 'G'; } - if (avg > 10240) { avg /= 1024; multiplier = 'T'; } - if (avg > 10240) { avg /= 1024; multiplier = 'P'; } - if (avg > 10240) { avg /= 1024; multiplier = 'E'; } - if (avg > 10240) { avg /= 1024; multiplier = 'Z'; } - if (avg > 10240) { avg /= 1024; multiplier = 'Y'; } + mod_status_get_multiplier(&avg, &multiplier, 1024); - buffer_append_long(b, avg); + sprintf(buf, "%.2f", avg); + buffer_append_string(b, buf); BUFFER_APPEND_STRING_CONST(b, " "); if (multiplier) buffer_append_string_len(b, &multiplier, 1); BUFFER_APPEND_STRING_CONST(b, "byte/s\n"); @@ -354,14 +458,14 @@ static handler_t mod_status_handle_server_status_html(server *srv, connection *c BUFFER_APPEND_STRING_CONST(b, "\n"); BUFFER_APPEND_STRING_CONST(b, ""); - BUFFER_APPEND_STRING_CONST(b, ""); - BUFFER_APPEND_STRING_CONST(b, ""); - BUFFER_APPEND_STRING_CONST(b, ""); - BUFFER_APPEND_STRING_CONST(b, ""); - BUFFER_APPEND_STRING_CONST(b, ""); - BUFFER_APPEND_STRING_CONST(b, ""); - BUFFER_APPEND_STRING_CONST(b, ""); - BUFFER_APPEND_STRING_CONST(b, ""); + mod_status_header_append_sort(b, p_d, "Client IP"); + mod_status_header_append_sort(b, p_d, "Read"); + mod_status_header_append_sort(b, p_d, "Written"); + mod_status_header_append_sort(b, p_d, "State"); + mod_status_header_append_sort(b, p_d, "Time"); + mod_status_header_append_sort(b, p_d, "Host"); + mod_status_header_append_sort(b, p_d, "URI"); + mod_status_header_append_sort(b, p_d, "File"); BUFFER_APPEND_STRING_CONST(b, "\n"); for (j = 0; j < srv->conns->used; j++) { @@ -589,6 +693,8 @@ static int mod_skeleton_patch_connection(server *srv, connection *con, plugin_da PATCH(status_url); } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("status.config-url"))) { PATCH(config_url); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("status.enable-sort"))) { + PATCH(sort); } } } @@ -603,6 +709,7 @@ static int mod_skeleton_setup_connection(server *srv, connection *con, plugin_da PATCH(status_url); PATCH(config_url); + PATCH(sort); return 0; }
Client IPReadWrittenStateTimeHostURIFile