1
0
Fork 0

Support keyed fetches of expvar information

master
Philip O'Toole 2 years ago
parent fe97d0f638
commit 1877bcc7ff

@ -1456,10 +1456,14 @@ func (s *Service) handleExpvar(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusUnauthorized)
return
}
key := keyParam(r)
fmt.Fprintf(w, "{\n")
first := true
expvar.Do(func(kv expvar.KeyValue) {
if key != "" && key != kv.Key {
return
}
if !first {
fmt.Fprintf(w, ",\n")
}
@ -1764,6 +1768,11 @@ func isRedirect(req *http.Request) (bool, error) {
return queryParam(req, "redirect")
}
func keyParam(req *http.Request) string {
q := req.URL.Query()
return strings.TrimSpace(q.Get("key"))
}
// timeoutParam returns the value, if any, set for timeout. If not set, it
// returns the value passed in as a default.
func timeoutParam(req *http.Request, def time.Duration) (time.Duration, error) {

@ -1768,3 +1768,17 @@ func Test_MultiNodeClusterNoReapReadOnlyZero(t *testing.T) {
t.Fatalf("didn't time out waiting for node to be removed")
}
}
func mustGetExpvar(n *Node) string {
j, err := n.Expvar()
if err != nil {
panic(err.Error())
}
return j
}
func mustGetExpvarKey(n *Node, k string) string {
j, err := n.ExpvarKey(k)
if err != nil {
panic(err.Error())
}

@ -313,7 +313,12 @@ func (n *Node) Liveness() (bool, error) {
// Expvar returns the expvar output for node.
func (n *Node) Expvar() (string, error) {
v, _ := url.Parse("http://" + n.APIAddr + "/debug/vars")
return n.ExpvarKey("")
}
// ExpvarKey returns the expvar output, for a given key, for a node.
func (n *Node) ExpvarKey(k string) (string, error) {
v, _ := url.Parse("http://" + n.APIAddr + "/debug/vars?key=" + k)
resp, err := http.Get(v.String())
if err != nil {

Loading…
Cancel
Save