mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-26 10:13:39 +08:00
b94e513116
Right now it has a very simple configuration: expvar /debug/vars It will return a JSON object with memory statistics and the command line used to start caddy, which are the two expvars that expvar registers by default.
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package expvar
|
|
|
|
import (
|
|
"expvar"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/mholt/caddy/middleware"
|
|
)
|
|
|
|
// ExpVar is a simple struct to hold expvar's configuration
|
|
type ExpVar struct {
|
|
Next middleware.Handler
|
|
Resource Resource
|
|
}
|
|
|
|
// ServeHTTP handles requests to expvar's configured entry point with
|
|
// expvar, or passes all other requests up the chain.
|
|
func (e ExpVar) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
|
|
if middleware.Path(r.URL.Path).Matches(string(e.Resource)) {
|
|
expvarHandler(w, r)
|
|
return 0, nil
|
|
}
|
|
|
|
return e.Next.ServeHTTP(w, r)
|
|
}
|
|
|
|
// expvarHandler returns a JSON object will all the published variables.
|
|
//
|
|
// This is lifted straight from the expvar package.
|
|
func expvarHandler(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
|
fmt.Fprintf(w, "{\n")
|
|
first := true
|
|
expvar.Do(func(kv expvar.KeyValue) {
|
|
if !first {
|
|
fmt.Fprintf(w, ",\n")
|
|
}
|
|
first = false
|
|
fmt.Fprintf(w, "%q: %s", kv.Key, kv.Value)
|
|
})
|
|
fmt.Fprintf(w, "\n}\n")
|
|
}
|
|
|
|
// Resource contains the path to the expvar entry point
|
|
type Resource string
|