summaryrefslogtreecommitdiff
path: root/src/pkg/expvar/expvar.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/expvar/expvar.go')
-rw-r--r--src/pkg/expvar/expvar.go148
1 files changed, 74 insertions, 74 deletions
diff --git a/src/pkg/expvar/expvar.go b/src/pkg/expvar/expvar.go
index 3a2e74b26..b8f9bae5d 100644
--- a/src/pkg/expvar/expvar.go
+++ b/src/pkg/expvar/expvar.go
@@ -8,89 +8,89 @@
package expvar
import (
- "bytes";
- "fmt";
- "http";
- "log";
- "strconv";
- "sync";
+ "bytes"
+ "fmt"
+ "http"
+ "log"
+ "strconv"
+ "sync"
)
// Var is an abstract type for all exported variables.
type Var interface {
- String() string;
+ String() string
}
// Int is a 64-bit integer variable, and satisfies the Var interface.
type Int struct {
- i int64;
- mu sync.Mutex;
+ i int64
+ mu sync.Mutex
}
-func (v *Int) String() string { return strconv.Itoa64(v.i) }
+func (v *Int) String() string { return strconv.Itoa64(v.i) }
func (v *Int) Add(delta int64) {
- v.mu.Lock();
- defer v.mu.Unlock();
- v.i += delta;
+ v.mu.Lock()
+ defer v.mu.Unlock()
+ v.i += delta
}
// Map is a string-to-Var map variable, and satisfies the Var interface.
type Map struct {
- m map[string]Var;
- mu sync.Mutex;
+ m map[string]Var
+ mu sync.Mutex
}
// KeyValue represents a single entry in a Map.
type KeyValue struct {
- Key string;
- Value Var;
+ Key string
+ Value Var
}
func (v *Map) String() string {
- v.mu.Lock();
- defer v.mu.Unlock();
- b := new(bytes.Buffer);
- fmt.Fprintf(b, "{");
- first := true;
+ v.mu.Lock()
+ defer v.mu.Unlock()
+ b := new(bytes.Buffer)
+ fmt.Fprintf(b, "{")
+ first := true
for key, val := range v.m {
if !first {
fmt.Fprintf(b, ", ")
}
- fmt.Fprintf(b, "\"%s\": %v", key, val.String());
- first = false;
+ fmt.Fprintf(b, "\"%s\": %v", key, val.String())
+ first = false
}
- fmt.Fprintf(b, "}");
- return b.String();
+ fmt.Fprintf(b, "}")
+ return b.String()
}
func (v *Map) Init() *Map {
- v.m = make(map[string]Var);
- return v;
+ v.m = make(map[string]Var)
+ return v
}
func (v *Map) Get(key string) Var {
- v.mu.Lock();
- defer v.mu.Unlock();
+ v.mu.Lock()
+ defer v.mu.Unlock()
if av, ok := v.m[key]; ok {
return av
}
- return nil;
+ return nil
}
func (v *Map) Set(key string, av Var) {
- v.mu.Lock();
- defer v.mu.Unlock();
- v.m[key] = av;
+ v.mu.Lock()
+ defer v.mu.Unlock()
+ v.m[key] = av
}
func (v *Map) Add(key string, delta int64) {
- v.mu.Lock();
- defer v.mu.Unlock();
- av, ok := v.m[key];
+ v.mu.Lock()
+ defer v.mu.Unlock()
+ av, ok := v.m[key]
if !ok {
- av = new(Int);
- v.m[key] = av;
+ av = new(Int)
+ v.m[key] = av
}
// Add to Int; ignore otherwise.
@@ -104,29 +104,29 @@ func (v *Map) iterate(c chan<- KeyValue) {
for k, v := range v.m {
c <- KeyValue{k, v}
}
- close(c);
+ close(c)
}
func (v *Map) Iter() <-chan KeyValue {
- c := make(chan KeyValue);
- go v.iterate(c);
- return c;
+ c := make(chan KeyValue)
+ go v.iterate(c)
+ return c
}
// String is a string variable, and satisfies the Var interface.
type String struct {
- s string;
+ s string
}
-func (v *String) String() string { return strconv.Quote(v.s) }
+func (v *String) String() string { return strconv.Quote(v.s) }
-func (v *String) Set(value string) { v.s = value }
+func (v *String) Set(value string) { v.s = value }
// IntFunc wraps a func() int64 to create a value that satisfies the Var interface.
// The function will be called each time the Var is evaluated.
type IntFunc func() int64
-func (v IntFunc) String() string { return strconv.Itoa64(v()) }
+func (v IntFunc) String() string { return strconv.Itoa64(v()) }
// All published variables.
@@ -137,12 +137,12 @@ var mutex sync.Mutex
// package's init function when it creates its Vars. If the name is already
// registered then this will log.Crash.
func Publish(name string, v Var) {
- mutex.Lock();
- defer mutex.Unlock();
+ mutex.Lock()
+ defer mutex.Unlock()
if _, existing := vars[name]; existing {
log.Crash("Reuse of exported var name:", name)
}
- vars[name] = v;
+ vars[name] = v
}
// Get retrieves a named exported variable.
@@ -150,35 +150,35 @@ func Get(name string) Var {
if v, ok := vars[name]; ok {
return v
}
- return nil;
+ return nil
}
// RemoveAll removes all exported variables.
// This is for tests; don't call this on a real server.
func RemoveAll() {
- mutex.Lock();
- defer mutex.Unlock();
- vars = make(map[string]Var);
+ mutex.Lock()
+ defer mutex.Unlock()
+ vars = make(map[string]Var)
}
// Convenience functions for creating new exported variables.
func NewInt(name string) *Int {
- v := new(Int);
- Publish(name, v);
- return v;
+ v := new(Int)
+ Publish(name, v)
+ return v
}
func NewMap(name string) *Map {
- v := new(Map).Init();
- Publish(name, v);
- return v;
+ v := new(Map).Init()
+ Publish(name, v)
+ return v
}
func NewString(name string) *String {
- v := new(String);
- Publish(name, v);
- return v;
+ v := new(String)
+ Publish(name, v)
+ return v
}
// TODO(rsc): Make sure map access in separate thread is safe.
@@ -186,27 +186,27 @@ func iterate(c chan<- KeyValue) {
for k, v := range vars {
c <- KeyValue{k, v}
}
- close(c);
+ close(c)
}
func Iter() <-chan KeyValue {
- c := make(chan KeyValue);
- go iterate(c);
- return c;
+ c := make(chan KeyValue)
+ go iterate(c)
+ return c
}
func expvarHandler(c *http.Conn, req *http.Request) {
- c.SetHeader("content-type", "application/json; charset=utf-8");
- fmt.Fprintf(c, "{\n");
- first := true;
+ c.SetHeader("content-type", "application/json; charset=utf-8")
+ fmt.Fprintf(c, "{\n")
+ first := true
for name, value := range vars {
if !first {
fmt.Fprintf(c, ",\n")
}
- first = false;
- fmt.Fprintf(c, " %q: %s", name, value);
+ first = false
+ fmt.Fprintf(c, " %q: %s", name, value)
}
- fmt.Fprintf(c, "\n}\n");
+ fmt.Fprintf(c, "\n}\n")
}
-func init() { http.Handle("/debug/vars", http.HandlerFunc(expvarHandler)) }
+func init() { http.Handle("/debug/vars", http.HandlerFunc(expvarHandler)) }