From c4ba2608faf8cea517164ffcbcb6e4207d290f6c Mon Sep 17 00:00:00 2001 From: Thomas Porzelt Date: Sat, 12 Jun 2010 13:44:12 +0200 Subject: [PATCH] [mod_status] Show time remaining in timeout column and show keepalive timeout if in keepalive state --- src/modules/mod_status.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/modules/mod_status.c b/src/modules/mod_status.c index fe68a78..a4a9d12 100644 --- a/src/modules/mod_status.c +++ b/src/modules/mod_status.c @@ -361,7 +361,8 @@ struct mod_status_con_data { liHttpMethod method; goffset request_size; goffset response_size; - ev_tstamp ts_started, ts_timeout; + guint64 ts_started; + guint64 ts_timeout; guint64 bytes_in; guint64 bytes_out; guint64 bytes_in_5s_diff; @@ -407,13 +408,19 @@ static gpointer status_collect_func(liWorker *wrk, gpointer fdata) { cd->request_size = c->mainvr->request.content_length; cd->response_size = c->mainvr->out->bytes_out; cd->state = c->state; - cd->ts_started = c->ts_started; - cd->ts_timeout = c->io_timeout_elem.ts; cd->bytes_in = c->stats.bytes_in; cd->bytes_out = c->stats.bytes_out; cd->bytes_in_5s_diff = c->stats.bytes_in_5s_diff; cd->bytes_out_5s_diff = c->stats.bytes_out_5s_diff; + cd->ts_started = (guint64)(CUR_TS(wrk) - c->ts_started); + + if (c->state == LI_CON_STATE_KEEP_ALIVE) { + cd->ts_timeout = (guint64)(c->keep_alive_data.timeout - CUR_TS(wrk)); + } else { + cd->ts_timeout = (guint64)(CUR_TS(wrk) - c->io_timeout_elem.ts); + } + sd->connection_count[c->state]++; } return sd; @@ -729,10 +736,10 @@ static GString *status_info_full(liVRequest *vr, liPlugin *p, gboolean short_inf /* list connections */ if (!short_info) { - GString *ts, *ts_timeout, *bytes_in, *bytes_out, *bytes_in_5s, *bytes_out_5s; + GString *ts_started, *ts_timeout, *bytes_in, *bytes_out, *bytes_in_5s, *bytes_out_5s; GString *req_len, *resp_len; - ts = g_string_sized_new(15); + ts_started = g_string_sized_new(15); ts_timeout = g_string_sized_new(15); bytes_in = g_string_sized_new(10); bytes_out = g_string_sized_new(10); @@ -745,15 +752,12 @@ static GString *status_info_full(liVRequest *vr, liPlugin *p, gboolean short_inf 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++) { mod_status_con_data *cd = &g_array_index(sd->connections, mod_status_con_data, j); - guint64 val_timeout = 0; - li_counter_format((guint64)(CUR_TS(vr->wrk) - cd->ts_started), COUNTER_TIME, ts); - if (cd->ts_timeout != 0) { - val_timeout = (guint64)(CUR_TS(vr->wrk) - cd->ts_timeout); - li_counter_format(val_timeout, COUNTER_TIME, ts_timeout); - } + li_counter_format(cd->ts_started, COUNTER_TIME, ts_started); + li_counter_format(cd->ts_timeout, COUNTER_TIME, ts_timeout); li_counter_format(cd->bytes_in, COUNTER_BYTES, bytes_in); li_counter_format(cd->bytes_in_5s_diff / G_GUINT64_CONSTANT(5), COUNTER_BYTES, bytes_in_5s); li_counter_format(cd->bytes_out, COUNTER_BYTES, bytes_out); @@ -768,8 +772,8 @@ static GString *status_info_full(liVRequest *vr, liPlugin *p, gboolean short_inf cd->path->str, cd->query->len ? "?":"", cd->query->len ? cd->query->str : "", - (guint64)(CUR_TS(vr->wrk) - cd->ts_started), ts->str, - val_timeout, ts_timeout->str, + cd->ts_started, ts_started->str, + cd->ts_timeout, ts_timeout->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, @@ -783,7 +787,7 @@ static GString *status_info_full(liVRequest *vr, liPlugin *p, gboolean short_inf g_string_append_len(html, CONST_STR_LEN(" \n")); - g_string_free(ts, TRUE); + g_string_free(ts_started, TRUE); g_string_free(ts_timeout, TRUE); g_string_free(bytes_in, TRUE); g_string_free(bytes_in_5s, TRUE);