diff options
author | Jim Jagielski <jim@apache.org> | 2016-11-05 16:47:43 +0000 |
---|---|---|
committer | Jim Jagielski <jim@apache.org> | 2016-11-05 16:47:43 +0000 |
commit | bcfb765174e9b8ccee202f937178e61e89100dfb (patch) | |
tree | f7861240f9148efdb042a2aecf099859a7aab901 /modules/cache | |
parent | 21083eccdb5add92bc8eb52223eeebaa6872d44d (diff) | |
download | httpd-bcfb765174e9b8ccee202f937178e61e89100dfb.tar.gz |
heh... bring memcache up to redis :)
mod_status info
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1768245 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'modules/cache')
-rw-r--r-- | modules/cache/mod_socache_memcache.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/modules/cache/mod_socache_memcache.c b/modules/cache/mod_socache_memcache.c index 86577a9f7b..28f981377a 100644 --- a/modules/cache/mod_socache_memcache.c +++ b/modules/cache/mod_socache_memcache.c @@ -17,6 +17,7 @@ #include "httpd.h" #include "http_config.h" +#include "http_protocol.h" #include "apr.h" #include "apu_version.h" @@ -33,6 +34,8 @@ #include "ap_mpm.h" #include "http_log.h" #include "apr_memcache.h" +#include "apr_strings.h" +#include "mod_status.h" /* The underlying apr_memcache system is thread safe.. */ #define MC_KEY_LEN 254 @@ -293,7 +296,58 @@ static apr_status_t socache_mc_remove(ap_socache_instance_t *ctx, server_rec *s, static void socache_mc_status(ap_socache_instance_t *ctx, request_rec *r, int flags) { - /* TODO: Make a mod_status handler. meh. */ + apr_memcache_t *rc = ctx->mc; + int i; + + for (i = 0; i < rc->ntotal; i++) { + apr_memcache_server_t *ms; + apr_memcache_stats_t *stats; + apr_status_t rv; + char *br = (!(flags & AP_STATUS_SHORT) ? "</br>" : ""); + + ms = rc->live_servers[i]; + + ap_rprintf(r, "Memcached server: %s:%d [%s]%s\n", ms->host, (int)ms->port, + (ms->status == APR_MC_SERVER_LIVE) ? "Up" : "Down", + br); + rv = apr_memcache_stats(ms, r->pool, &stats); + if (rv != APR_SUCCESS) + continue; + if (!(flags & AP_STATUS_SHORT)) { + ap_rprintf(r, "<b>Version:</b> <i>%s</i> [%u bits], PID: <i>%u</i>, Uptime: <i>%u hrs</i> </br>\n", + stats->version , stats->pointer_size, stats->pid, stats->uptime/3600); + ap_rprintf(r, "<b>Clients::</b> Structures: <i>%u</i>, Total: <i>%u</i>, Current: <i>%u</i> </br>\n", + stats->connection_structures, stats->total_connections, stats->curr_connections); + ap_rprintf(r, "<b>Storage::</b> Total Items: <i>%u</i>, Current Items: <i>%u</i>, Bytes: <i>%lu</i> </br>\n", + stats->total_items, stats->curr_items, stats->bytes); + ap_rprintf(r, "<b>CPU::</b> System: <i>%u</i>, User: <i>%u</i> </br>\n", + (unsigned)stats->rusage_system, (unsigned)stats->rusage_user ); + ap_rprintf(r, "<b>Cache::</b> Gets: <i>%u</i>, Sets: <i>%u</i>, Hits: <i>%u</i>, Misses: <i>%u</i> </br>\n", + stats->cmd_get, stats->cmd_set, stats->get_hits, stats->get_misses); + ap_rprintf(r, "<b>Net::</b> Input bytes: <i>%lu</i>, Output bytes: <i>%lu</i> </br>\n", + stats->bytes_read, stats->bytes_written); + ap_rprintf(r, "<b>Misc::</b> Evictions: <i>%lu</i>, MaxMem: <i>%u</i>, Threads: <i>%u</i> </br>\n", + stats->evictions, stats->limit_maxbytes, stats->threads); + ap_rputs("<hr></br>\n", r); + } + else { + ap_rprintf(r, "Version: %s [%u bits], PID: %u, Uptime: %u hrs %s\n", + stats->version , stats->pointer_size, stats->pid, stats->uptime/3600, br); + ap_rprintf(r, "Clients:: Structures: %d, Total: %d, Current: %u %s\n", + stats->connection_structures, stats->total_connections, stats->curr_connections, br); + ap_rprintf(r, "Storage:: Total Items: %u, Current Items: %u, Bytes: %lu %s\n", + stats->total_items, stats->curr_items, stats->bytes, br); + ap_rprintf(r, "CPU:: System: %u, User: %u %s\n", + (unsigned)stats->rusage_system, (unsigned)stats->rusage_user , br); + ap_rprintf(r, "Cache:: Gets: %u, Sets: %u, Hits: %u, Misses: %u %s\n", + stats->cmd_get, stats->cmd_set, stats->get_hits, stats->get_misses, br); + ap_rprintf(r, "Net:: Input bytes: %lu, Output bytes: %lu %s\n", + stats->bytes_read, stats->bytes_written, br); + ap_rprintf(r, "Misc:: Evictions: %lu, MaxMem: %u, Threads: %u %s\n", + stats->evictions, stats->limit_maxbytes, stats->threads, br); + } + } + } static apr_status_t socache_mc_iterate(ap_socache_instance_t *instance, |