]> granicus.if.org Git - apache/commitdiff
Merge r1768245, r1770828 from trunk:
authorJim Jagielski <jim@apache.org>
Tue, 13 Dec 2016 13:57:02 +0000 (13:57 +0000)
committerJim Jagielski <jim@apache.org>
Tue, 13 Dec 2016 13:57:02 +0000 (13:57 +0000)
heh... bring memcache up to redis :)
mod_status info

From Norm:
NWGNUsocachmem needs to find mod_status.h

Reviewed/backported by: jim

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1774016 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
STATUS
modules/cache/NWGNUsocachmem
modules/cache/mod_socache_memcache.c

diff --git a/CHANGES b/CHANGES
index 316a95aa7400a7e0df20e27cbb06cac1d1bc24e9..388c6d1abd869bf7c02496cd8a8607ed208969a6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -22,6 +22,9 @@ Changes with Apache 2.4.24
      MAC (SipHash) to prevent deciphering or tampering with a padding
      oracle attack.  [Yann Ylavic, Colm MacCarthaigh]
 
+  *) mod_socache_memcache: Provide memcache stats to mod_status.
+     [Jim Jagielski]
+
   *) http_filters: Fix potential looping in new check_headers() due to new
      pattern of ap_die() from http header filter. Explicitly clear the
      previous headers and body.
diff --git a/STATUS b/STATUS
index a3caf0b01a5369182f5ec29d4f8d01c75249f6f2..76ae9659794b46c4049e5eb1413b70fbacb2600e 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -119,11 +119,6 @@ RELEASE SHOWSTOPPERS:
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
-  *) mod_socache_memcache: Provide memcache STATs to mod_status
-     trunk patch: http://svn.apache.org/r1768245
-     trunk patch: http://svn.apache.org/r1770828
-     2.4.x patch: trunk works
-     +1: jim, icing, covener
 
 PATCHES PROPOSED TO BACKPORT FROM TRUNK:
   [ New proposals should be added at the end of the list ]
index d8d10d8a34506f0a30c6c20eac858bc4376696db..cfbf815ec78e99ab7f559206f99bd77ee1b535e0 100644 (file)
@@ -26,6 +26,7 @@ XINCDIRS      += \
                        $(APR)/include \
                        $(APRUTIL)/include \
                        $(AP_WORK)/include \
+                       $(STDMOD)/generators \
                        $(AP_WORK)/server/mpm/netware \
                        $(NWOS) \
                        $(EOLIST)
index 86577a9f7b1a01e3fab763e855f659a1ba996b9b..28f981377adbd9870ae3cda66281c8db7574866d 100644 (file)
@@ -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,