From: Rainer Jung Date: Sun, 5 Apr 2015 13:54:22 +0000 (+0000) Subject: Add output for "?auto" version of server-status X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dd3190d0a5a03a35038fbc941a3a011b52d54edd;p=thirdparty%2Fapache%2Fhttpd.git Add output for "?auto" version of server-status to proxy status, mod_ssl session cache info, mod_cache_socache and the status hook of the individual socache implementations. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1671397 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/cache/mod_cache_socache.c b/modules/cache/mod_cache_socache.c index 6bd9466bd19..c5b49ab998f 100644 --- a/modules/cache/mod_cache_socache.c +++ b/modules/cache/mod_cache_socache.c @@ -1387,13 +1387,18 @@ static int socache_status_hook(request_rec *r, int flags) return DECLINED; } - ap_rputs("
\n" - "\n" - "\n" - "\n
\n" - "" - "mod_cache_socache Status:\n" - "
\n", r); + if (!(flags & AP_STATUS_SHORT)) { + ap_rputs("
\n" + "\n" + "\n" + "\n
\n" + "" + "mod_cache_socache Status:\n" + "
\n", r); + } + else { + ap_rputs("ModCacheSocacheStatus\n", r); + } if (socache_mutex) { status = apr_global_mutex_lock(socache_mutex); @@ -1404,7 +1409,12 @@ static int socache_status_hook(request_rec *r, int flags) } if (status != APR_SUCCESS) { - ap_rputs("No cache status data available\n", r); + if (!(flags & AP_STATUS_SHORT)) { + ap_rputs("No cache status data available\n", r); + } + else { + ap_rputs("NotAvailable\n", r); + } } else { conf->provider->socache_provider->status(conf->provider->socache_instance, r, flags); @@ -1418,7 +1428,9 @@ static int socache_status_hook(request_rec *r, int flags) } } - ap_rputs("
\n", r); + if (!(flags & AP_STATUS_SHORT)) { + ap_rputs("
\n", r); + } return OK; } diff --git a/modules/cache/mod_socache_dbm.c b/modules/cache/mod_socache_dbm.c index 984d2b7111c..44ff040b459 100644 --- a/modules/cache/mod_socache_dbm.c +++ b/modules/cache/mod_socache_dbm.c @@ -20,6 +20,7 @@ #include "http_protocol.h" #include "http_config.h" #include "mpm_common.h" +#include "mod_status.h" #include "apr.h" #include "apr_strings.h" @@ -497,9 +498,18 @@ static void socache_dbm_status(ap_socache_instance_t *ctx, request_rec *r, avg = (int)(size / (long)elts); else avg = 0; - ap_rprintf(r, "cache type: DBM, maximum size: unlimited
"); - ap_rprintf(r, "current entries: %d, current size: %ld bytes
", elts, size); - ap_rprintf(r, "average entry size: %d bytes
", avg); + if (!(flags & AP_STATUS_SHORT)) { + ap_rprintf(r, "cache type: DBM, maximum size: unlimited
"); + ap_rprintf(r, "current entries: %d, current size: %ld bytes
", elts, size); + ap_rprintf(r, "average entry size: %d bytes
", avg); + } + else { + ap_rputs("CacheType: DBM\n", r); + ap_rputs("CacheMaximumSize: unlimited\n", r); + ap_rprintf(r, "CacheCurrentEntries: %d\n", elts); + ap_rprintf(r, "CacheCurrentSize: %ld\n", size); + ap_rprintf(r, "CacheAvgEntrySize: %d\n", avg); + } return; } diff --git a/modules/cache/mod_socache_dc.c b/modules/cache/mod_socache_dc.c index 7d09408d6e1..c1d4ab841ec 100644 --- a/modules/cache/mod_socache_dc.c +++ b/modules/cache/mod_socache_dc.c @@ -19,6 +19,7 @@ #include "http_request.h" #include "http_config.h" #include "http_protocol.h" +#include "mod_status.h" #include "apr_strings.h" #include "apr_time.h" @@ -151,8 +152,14 @@ static void socache_dc_status(ap_socache_instance_t *ctx, request_rec *r, int fl { ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(00747) "distributed scache 'socache_dc_status'"); - ap_rprintf(r, "cache type: DC (Distributed Cache), " - " target: %s
", ctx->target); + if (!(flags & AP_STATUS_SHORT)) { + ap_rprintf(r, "cache type: DC (Distributed Cache), " + " target: %s
", ctx->target); + } + else { + ap_rputs("CacheType: DC\n", r); + ap_rvputs(r, "CacheTarget: ", ctx->target, "\n", NULL); + } } static apr_status_t socache_dc_iterate(ap_socache_instance_t *instance, diff --git a/modules/cache/mod_socache_shmcb.c b/modules/cache/mod_socache_shmcb.c index 706c2f74f69..6d601b9eefb 100644 --- a/modules/cache/mod_socache_shmcb.c +++ b/modules/cache/mod_socache_shmcb.c @@ -19,6 +19,7 @@ #include "http_request.h" #include "http_protocol.h" #include "http_config.h" +#include "mod_status.h" #include "apr.h" #include "apr_strings.h" @@ -606,40 +607,69 @@ static void socache_shmcb_status(ap_socache_instance_t *ctx, header->subcache_num); cache_pct = (100 * cache_total) / (header->subcache_data_size * header->subcache_num); - /* Generate HTML */ - ap_rprintf(r, "cache type: SHMCB, shared memory: %" APR_SIZE_T_FMT " " - "bytes, current entries: %d
", - ctx->shm_size, total); - ap_rprintf(r, "subcaches: %d, indexes per subcache: %d
", - header->subcache_num, header->index_num); - if (non_empty_subcaches) { - apr_time_t average_expiry = (apr_time_t)(expiry_total / (double)non_empty_subcaches); - ap_rprintf(r, "time left on oldest entries' objects: "); - if (now < average_expiry) - ap_rprintf(r, "avg: %d seconds, (range: %d...%d)
", - (int)apr_time_sec(average_expiry - now), - (int)apr_time_sec(min_expiry - now), - (int)apr_time_sec(max_expiry - now)); - else - ap_rprintf(r, "expiry_threshold: Calculation error!
"); + /* Generate Output */ + if (!(flags & AP_STATUS_SHORT)) { + ap_rprintf(r, "cache type: SHMCB, shared memory: %" APR_SIZE_T_FMT " " + "bytes, current entries: %d
", + ctx->shm_size, total); + ap_rprintf(r, "subcaches: %d, indexes per subcache: %d
", + header->subcache_num, header->index_num); + if (non_empty_subcaches) { + apr_time_t average_expiry = (apr_time_t)(expiry_total / (double)non_empty_subcaches); + ap_rprintf(r, "time left on oldest entries' objects: "); + if (now < average_expiry) + ap_rprintf(r, "avg: %d seconds, (range: %d...%d)
", + (int)apr_time_sec(average_expiry - now), + (int)apr_time_sec(min_expiry - now), + (int)apr_time_sec(max_expiry - now)); + else + ap_rprintf(r, "expiry_threshold: Calculation error!
"); + } + + ap_rprintf(r, "index usage: %d%%, cache usage: %d%%
", + index_pct, cache_pct); + ap_rprintf(r, "total entries stored since starting: %lu
", + header->stat_stores); + ap_rprintf(r, "total entries replaced since starting: %lu
", + header->stat_replaced); + ap_rprintf(r, "total entries expired since starting: %lu
", + header->stat_expiries); + ap_rprintf(r, "total (pre-expiry) entries scrolled out of the cache: " + "%lu
", header->stat_scrolled); + ap_rprintf(r, "total retrieves since starting: %lu hit, " + "%lu miss
", header->stat_retrieves_hit, + header->stat_retrieves_miss); + ap_rprintf(r, "total removes since starting: %lu hit, " + "%lu miss
", header->stat_removes_hit, + header->stat_removes_miss); } + else { + ap_rputs("CacheType: SHMCB\n", r); + ap_rprintf(r, "CacheSharedMemory: %" APR_SIZE_T_FMT "\n", + ctx->shm_size); + ap_rprintf(r, "CacheCurrentEntries: %d\n", total); + ap_rprintf(r, "CacheSubcaches: %d\n", header->subcache_num); + ap_rprintf(r, "CacheIndexesPerSubcaches: %d\n", header->index_num); + if (non_empty_subcaches) { + apr_time_t average_expiry = (apr_time_t)(expiry_total / (double)non_empty_subcaches); + if (now < average_expiry) { + ap_rprintf(r, "CacheTimeLeftOldestAvg: %d\n", (int)apr_time_sec(average_expiry - now)); + ap_rprintf(r, "CacheTimeLeftOldestMin: %d\n", (int)apr_time_sec(min_expiry - now)); + ap_rprintf(r, "CacheTimeLeftOldestMax: %d\n", (int)apr_time_sec(max_expiry - now)); + } + } - ap_rprintf(r, "index usage: %d%%, cache usage: %d%%
", - index_pct, cache_pct); - ap_rprintf(r, "total entries stored since starting: %lu
", - header->stat_stores); - ap_rprintf(r, "total entries replaced since starting: %lu
", - header->stat_replaced); - ap_rprintf(r, "total entries expired since starting: %lu
", - header->stat_expiries); - ap_rprintf(r, "total (pre-expiry) entries scrolled out of the cache: " - "%lu
", header->stat_scrolled); - ap_rprintf(r, "total retrieves since starting: %lu hit, " - "%lu miss
", header->stat_retrieves_hit, - header->stat_retrieves_miss); - ap_rprintf(r, "total removes since starting: %lu hit, " - "%lu miss
", header->stat_removes_hit, - header->stat_removes_miss); + ap_rprintf(r, "CacheIndexUsage: %d%%\n", index_pct); + ap_rprintf(r, "CacheUsage: %d%%\n", cache_pct); + ap_rprintf(r, "CacheStoreCount: %lu\n", header->stat_stores); + ap_rprintf(r, "CacheReplaceCount: %lu\n", header->stat_replaced); + ap_rprintf(r, "CacheExpireCount: %lu\n", header->stat_expiries); + ap_rprintf(r, "CacheDiscardCount: %lu\n", header->stat_scrolled); + ap_rprintf(r, "CacheRetrieveHitCount: %lu\n", header->stat_retrieves_hit); + ap_rprintf(r, "CacheRetrieveMissCount: %lu\n", header->stat_retrieves_miss); + ap_rprintf(r, "CacheRemoveHitCount: %lu\n", header->stat_removes_hit); + ap_rprintf(r, "CacheRemoveMissCount: %lu\n", header->stat_removes_miss); + } ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(00841) "leaving shmcb_status"); } diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 3c6dce3469e..609609f07ee 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -2683,58 +2683,80 @@ static int proxy_status_hook(request_rec *r, int flags) proxy_balancer *balancer = NULL; proxy_worker **worker = NULL; - if ((flags & AP_STATUS_SHORT) || conf->balancers->nelts == 0 || + if (conf->balancers->nelts == 0 || conf->proxy_status == status_off) return OK; balancer = (proxy_balancer *)conf->balancers->elts; for (i = 0; i < conf->balancers->nelts; i++) { - ap_rputs("
\n

Proxy LoadBalancer Status for ", r); - ap_rvputs(r, balancer->s->name, "

\n\n", NULL); - ap_rputs("\n\n" - "" - "\n", r); - if (*balancer->s->sticky) { - if (strcmp(balancer->s->sticky, balancer->s->sticky_path)) { - ap_rvputs(r, "
SSesTimeoutMethod
", balancer->s->sticky, " | ", - balancer->s->sticky_path, NULL); + if (!(flags & AP_STATUS_SHORT)) { + ap_rputs("
\n

Proxy LoadBalancer Status for ", r); + ap_rvputs(r, balancer->s->name, "

\n\n", NULL); + ap_rputs("\n\n" + "" + "\n", r); + if (*balancer->s->sticky) { + if (strcmp(balancer->s->sticky, balancer->s->sticky_path)) { + ap_rvputs(r, "", + apr_time_sec(balancer->s->timeout)); + ap_rprintf(r, "\n", + balancer->lbmethod->name); + ap_rputs("
SSesTimeoutMethod
", balancer->s->sticky, " | ", + balancer->s->sticky_path, NULL); + } + else { + ap_rvputs(r, "", balancer->s->sticky, NULL); + } } else { - ap_rvputs(r, "", balancer->s->sticky, NULL); + ap_rputs(" - ", r); } + ap_rprintf(r, "%" APR_TIME_T_FMT "%s
\n", r); + ap_rputs("\n\n" + "" + "" + "" + "\n", r); } else { - ap_rputs("", - apr_time_sec(balancer->s->timeout)); - ap_rprintf(r, "\n", - balancer->lbmethod->name); - ap_rputs("
SchHostStatRouteRedirFSetAccWrRd
- ", r); + ap_rprintf(r, "ProxyBalancer[%d]Name: %s\n", i, balancer->s->name); } - ap_rprintf(r, "%" APR_TIME_T_FMT "%s
\n", r); - ap_rputs("\n\n" - "" - "" - "" - "\n", r); worker = (proxy_worker **)balancer->workers->elts; for (n = 0; n < balancer->workers->nelts; n++) { char fbuf[50]; - ap_rvputs(r, "\n", NULL); - ap_rvputs(r, "", (*worker)->s->lbfactor); - ap_rprintf(r, "", (*worker)->s->lbset); - ap_rprintf(r, "\n", r); - - /* TODO: Add the rest of dynamic worker data */ - ap_rputs("\n", r); + if (!(flags & AP_STATUS_SHORT)) { + ap_rvputs(r, "\n", NULL); + ap_rvputs(r, "", (*worker)->s->lbfactor); + ap_rprintf(r, "", (*worker)->s->lbset); + ap_rprintf(r, "\n", r); + + /* TODO: Add the rest of dynamic worker data */ + ap_rputs("\n", r); + } + else { + ap_rprintf(r, "ProxyBalancer[%d]Worker[%d]Name: %s\n", + i, n, balancer->s->name); + ap_rprintf(r, "ProxyBalancer[%d]Worker[%d]Status: %s\n", + i, n, ap_proxy_parse_wstatus(r->pool, *worker)); + ap_rprintf(r, "ProxyBalancer[%d]Worker[%d]Elected: %" + APR_SIZE_T_FMT "\n", + i, n, (*worker)->s->elected); + ap_rprintf(r, "ProxyBalancer[%d]Worker[%d]Sent: %s\n", + i, n, apr_strfsize((*worker)->s->transferred, fbuf)); + ap_rprintf(r, "ProxyBalancer[%d]Worker[%d]Rcvd: %s\n", + i, n, apr_strfsize((*worker)->s->read, fbuf)); + /* TODO: Add the rest of dynamic worker data */ + } ++worker; } diff --git a/modules/ssl/ssl_scache.c b/modules/ssl/ssl_scache.c index 01f72546cdb..2d365b22150 100644 --- a/modules/ssl/ssl_scache.c +++ b/modules/ssl/ssl_scache.c @@ -198,15 +198,20 @@ static int ssl_ext_status_hook(request_rec *r, int flags) { SSLModConfigRec *mc = myModConfig(r->server); - if (mc == NULL || flags & AP_STATUS_SHORT || mc->sesscache == NULL) + if (mc == NULL || mc->sesscache == NULL) return OK; - ap_rputs("
\n", r); - ap_rputs("
SchHostStatRouteRedirFSetAccWrRd
", (*worker)->s->scheme, "", (*worker)->s->hostname, "", NULL); - ap_rvputs(r, ap_proxy_parse_wstatus(r->pool, *worker), NULL); - ap_rvputs(r, "", (*worker)->s->route, NULL); - ap_rvputs(r, "", (*worker)->s->redirect, NULL); - ap_rprintf(r, "%d%d%" APR_SIZE_T_FMT "", (*worker)->s->elected); - ap_rputs(apr_strfsize((*worker)->s->transferred, fbuf), r); - ap_rputs("", r); - ap_rputs(apr_strfsize((*worker)->s->read, fbuf), r); - ap_rputs("
", (*worker)->s->scheme, "", (*worker)->s->hostname, "", NULL); + ap_rvputs(r, ap_proxy_parse_wstatus(r->pool, *worker), NULL); + ap_rvputs(r, "", (*worker)->s->route, NULL); + ap_rvputs(r, "", (*worker)->s->redirect, NULL); + ap_rprintf(r, "%d%d%" APR_SIZE_T_FMT "", + (*worker)->s->elected); + ap_rputs(apr_strfsize((*worker)->s->transferred, fbuf), r); + ap_rputs("", r); + ap_rputs(apr_strfsize((*worker)->s->read, fbuf), r); + ap_rputs("
\n", r); - ap_rputs("\n", r); - ap_rputs("\n", r); + ap_rputs("
\n", r); - ap_rputs("SSL/TLS Session Cache Status:\r", r); - ap_rputs("
\n", r); + if (!(flags & AP_STATUS_SHORT)) { + ap_rputs("
\n", r); + ap_rputs("\n", r); + ap_rputs("\n", r); + ap_rputs("\n", r); - ap_rputs("
\n", r); + ap_rputs("SSL/TLS Session Cache Status:\r", r); + ap_rputs("
\n", r); + } + else { + ap_rputs("TLSSessionCacheStatus\n", r); + } if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) { ssl_mutex_on(r->server); @@ -218,8 +223,11 @@ static int ssl_ext_status_hook(request_rec *r, int flags) ssl_mutex_off(r->server); } - ap_rputs("
\n", r); + if (!(flags & AP_STATUS_SHORT)) { + ap_rputs("
\n", r); + } + return OK; }