diff options
Diffstat (limited to 'src/pkg/expvar/expvar.go')
| -rw-r--r-- | src/pkg/expvar/expvar.go | 42 | 
1 files changed, 40 insertions, 2 deletions
| diff --git a/src/pkg/expvar/expvar.go b/src/pkg/expvar/expvar.go index b8f9bae5d..bed31db5d 100644 --- a/src/pkg/expvar/expvar.go +++ b/src/pkg/expvar/expvar.go @@ -5,13 +5,28 @@  // The expvar package provides a standardized interface to public variables,  // such as operation counters in servers. It exposes these variables via  // HTTP at /debug/vars in JSON format. +// +// In addition to adding the HTTP handler, this package registers the +// following variables: +// +//	cmdline   os.Args +//	memstats  runtime.Memstats +// +// The package is sometimes only imported for the side effect of +// registering its HTTP handler and the above variables.  To use it +// this way, simply link this package into your program: +//	import _ "expvar" +//  package expvar  import (  	"bytes"  	"fmt"  	"http" +	"json"  	"log" +	"os" +	"runtime"  	"strconv"  	"sync"  ) @@ -128,6 +143,12 @@ type IntFunc func() int64  func (v IntFunc) String() string { return strconv.Itoa64(v()) } +// StringFunc wraps a func() string to create value that satisfies the Var interface. +// The function will be called each time the Var is evaluated. +type StringFunc func() string + +func (f StringFunc) String() string { return f() } +  // All published variables.  var vars map[string]Var = make(map[string]Var) @@ -204,9 +225,26 @@ func expvarHandler(c *http.Conn, req *http.Request) {  			fmt.Fprintf(c, ",\n")  		}  		first = false -		fmt.Fprintf(c, "  %q: %s", name, value) +		fmt.Fprintf(c, "%q: %s", name, value)  	}  	fmt.Fprintf(c, "\n}\n")  } -func init() { http.Handle("/debug/vars", http.HandlerFunc(expvarHandler)) } +func memstats() string { +	var buf bytes.Buffer +	json.MarshalIndent(&buf, &runtime.MemStats, "    ") +	s := buf.String() +	return s[0 : len(s)-1] // chop final \n +} + +func cmdline() string { +	var buf bytes.Buffer +	json.Marshal(&buf, os.Args) +	return buf.String() +} + +func init() { +	http.Handle("/debug/vars", http.HandlerFunc(expvarHandler)) +	Publish("cmdline", StringFunc(cmdline)) +	Publish("memstats", StringFunc(memstats)) +} | 
