Move expvar under the registry section

For consistency with other systems, the redis and caching monitoring data has
been moved under the "registry" section in expvar. This ensures the entire
registry state is kept to a single section.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
This commit is contained in:
Stephen J Day 2015-04-02 21:22:11 -07:00
parent 4e1ecad6cc
commit 6b748a74ef
2 changed files with 27 additions and 3 deletions

View file

@ -272,13 +272,18 @@ func (app *App) configureRedis(configuration *configuration.Configuration) {
app.redis = pool app.redis = pool
expvar.Publish("redis", expvar.Func(func() interface{} { // setup expvar
registry := expvar.Get("registry")
if registry == nil {
registry = expvar.NewMap("registry")
}
registry.(*expvar.Map).Set("redis", expvar.Func(func() interface{} {
return map[string]interface{}{ return map[string]interface{}{
"Config": configuration.Redis, "Config": configuration.Redis,
"Active": app.redis.ActiveCount(), "Active": app.redis.ActiveCount(),
} }
})) }))
} }
func (app *App) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (app *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {

View file

@ -174,7 +174,26 @@ var layerInfoCacheMetrics struct {
} }
func init() { func init() {
expvar.Publish("layerinfocache", expvar.Func(func() interface{} { registry := expvar.Get("registry")
if registry == nil {
registry = expvar.NewMap("registry")
}
cache := registry.(*expvar.Map).Get("cache")
if cache == nil {
cache = &expvar.Map{}
cache.(*expvar.Map).Init()
registry.(*expvar.Map).Set("cache", cache)
}
storage := cache.(*expvar.Map).Get("storage")
if storage == nil {
storage = &expvar.Map{}
storage.(*expvar.Map).Init()
cache.(*expvar.Map).Set("storage", storage)
}
storage.(*expvar.Map).Set("layerinfo", expvar.Func(func() interface{} {
// no need for synchronous access: the increments are atomic and // no need for synchronous access: the increments are atomic and
// during reading, we don't care if the data is up to date. The // during reading, we don't care if the data is up to date. The
// numbers will always *eventually* be reported correctly. // numbers will always *eventually* be reported correctly.