From b45d7c92a23390c8be246219a1c84b8736854581 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Tue, 8 Nov 2016 11:04:08 -0500 Subject: [PATCH] 10484: Serve MemStats at /debug.json instead of /status.json. --- services/keepstore/handlers.go | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/services/keepstore/handlers.go b/services/keepstore/handlers.go index 289dce15a0..563d0c0f9b 100644 --- a/services/keepstore/handlers.go +++ b/services/keepstore/handlers.go @@ -46,6 +46,9 @@ func MakeRESTRouter() *mux.Router { // Privileged client only. rest.HandleFunc(`/index/{prefix:[0-9a-f]{0,32}}`, IndexHandler).Methods("GET", "HEAD") + // Internals/debugging info (runtime.MemStats) + rest.HandleFunc(`/debug.json`, DebugHandler).Methods("GET", "HEAD") + // List volumes: path, device number, bytes used/avail. rest.HandleFunc(`/status.json`, StatusHandler).Methods("GET", "HEAD") @@ -239,18 +242,6 @@ func IndexHandler(resp http.ResponseWriter, req *http.Request) { resp.Write([]byte{'\n'}) } -// StatusHandler -// Responds to /status.json requests with the current node status, -// described in a JSON structure. -// -// The data given in a status.json response includes: -// volumes - a list of Keep volumes currently in use by this server -// each volume is an object with the following fields: -// * mount_point -// * device_num (an integer identifying the underlying filesystem) -// * bytes_free -// * bytes_used - // PoolStatus struct type PoolStatus struct { Alloc uint64 `json:"BytesAllocated"` @@ -264,12 +255,24 @@ type NodeStatus struct { BufferPool PoolStatus PullQueue WorkQueueStatus TrashQueue WorkQueueStatus - Memory runtime.MemStats } var st NodeStatus var stLock sync.Mutex +// DebugHandler addresses /debug.json requests. +func DebugHandler(resp http.ResponseWriter, req *http.Request) { + type debugStats struct { + MemStats runtime.MemStats + } + var ds debugStats + runtime.ReadMemStats(&ds.MemStats) + err := json.NewEncoder(resp).Encode(&ds) + if err != nil { + http.Error(resp, err.Error(), 500) + } +} + // StatusHandler addresses /status.json requests. func StatusHandler(resp http.ResponseWriter, req *http.Request) { stLock.Lock() @@ -302,7 +305,6 @@ func readNodeStatus(st *NodeStatus) { st.BufferPool.Len = bufs.Len() st.PullQueue = getWorkQueueStatus(pullq) st.TrashQueue = getWorkQueueStatus(trashq) - runtime.ReadMemStats(&st.Memory) } // return a WorkQueueStatus for the given queue. If q is nil (which -- 2.39.5