From 5cbd89b1daa3206ad29649383ba97c4999a15780 Mon Sep 17 00:00:00 2001 From: Rainer Jung Date: Sun, 5 Oct 2014 17:00:31 +0000 Subject: [PATCH] mod_cache_socache: Add cache status to server-status. The status_hook simply calls the status function of socache, very much like mod_ssl does for the ssl session cache. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1629507 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 2 ++ docs/log-message-tags/next-number | 2 +- modules/cache/mod_cache_socache.c | 56 +++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 65ce8553c5..fe2d60e6c6 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.0 + *) mod_cache_socache: Add cache status to server-status. [Rainer Jung] + *) mod_ssl: Move OCSP stapling information from a per-certificate store to a per-server hash. PR 54357, PR 56919. [Alex Bligh , Kaspar Brand] diff --git a/docs/log-message-tags/next-number b/docs/log-message-tags/next-number index 1d6219b116..c1fe14e029 100644 --- a/docs/log-message-tags/next-number +++ b/docs/log-message-tags/next-number @@ -1 +1 @@ -2816 +2818 diff --git a/modules/cache/mod_cache_socache.c b/modules/cache/mod_cache_socache.c index a138e6b8bf..804df90fff 100644 --- a/modules/cache/mod_cache_socache.c +++ b/modules/cache/mod_cache_socache.c @@ -22,6 +22,7 @@ #include "http_config.h" #include "http_log.h" #include "http_core.h" +#include "http_protocol.h" #include "ap_provider.h" #include "ap_socache.h" #include "util_filter.h" @@ -30,6 +31,7 @@ #include "util_mutex.h" #include "mod_cache.h" +#include "mod_status.h" #include "cache_socache_common.h" @@ -1375,6 +1377,56 @@ static apr_status_t destroy_cache(void *data) return APR_SUCCESS; } +static int socache_status_hook(request_rec *r, int flags) +{ + apr_status_t status = APR_SUCCESS; + cache_socache_conf *conf = ap_get_module_config(r->server->module_config, + &cache_socache_module); + if (!conf->provider || !conf->provider->socache_provider || + !conf->provider->socache_instance) { + return DECLINED; + } + + ap_rputs("
\n" + "\n" + "\n" + "\n
\n" + "" + "mod_cache_socache Status:\n" + "
\n", r); + + if (socache_mutex) { + status = apr_global_mutex_lock(socache_mutex); + if (status != APR_SUCCESS) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02816) + "could not acquire lock for cache status"); + } + } + + if (status != APR_SUCCESS) { + ap_rputs("No cache status data available\n", r); + } else { + conf->provider->socache_provider->status(conf->provider->socache_instance, + r, flags); + } + + if (socache_mutex && status == APR_SUCCESS) { + status = apr_global_mutex_unlock(socache_mutex); + if (status != APR_SUCCESS) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02817) + "could not release lock for cache status"); + } + } + + ap_rputs("
\n", r); + return OK; +} + +void socache_status_register(apr_pool_t *p) +{ + APR_OPTIONAL_HOOK(ap, status_hook, socache_status_hook, NULL, NULL, APR_HOOK_MIDDLE); +} + static int socache_precfg(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptmp) { apr_status_t rv = ap_mutex_register(pconf, cache_socache_id, NULL, @@ -1384,6 +1436,10 @@ static int socache_precfg(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptmp) "failed to register %s mutex", cache_socache_id); return 500; /* An HTTP status would be a misnomer! */ } + + /* Register to handle mod_status status page generation */ + socache_status_register(pconf); + return OK; } -- 2.40.0