etcd/etcd_modules.go
Brandon Philips 431eebf754 feat(dashboard): introduce the in memory handler
the in memory handler gives etcd the ability to serve a dashboard
without on disk resources. This is the first time we are using the
/mod/ path too.

TODO: cleanup the mod stuff so it isn't hacked into etcd_handlers.
2013-10-08 11:15:03 -07:00

43 lines
993 B
Go

package main
import (
"bytes"
"net/http"
"os"
"time"
"github.com/coreos/etcd/dashboard/resources"
)
func DashboardMemoryFileServer(w http.ResponseWriter, req *http.Request) {
path := req.URL.Path
if len(path) == 0 {
path = "index.html"
}
b, ok := resources.File("/" + path)
if ok == false {
http.Error(w, path+": File not found", http.StatusNotFound)
return
}
http.ServeContent(w, req, path, time.Time{}, bytes.NewReader(b))
return
}
// DashboardHttpHandler either uses the compiled in virtual filesystem for the
// dashboard assets or if ETCD_DASHBOARD_DIR is set uses that as the source of
// assets.
func DashboardHttpHandler(prefix string) (handler http.Handler) {
handler = http.HandlerFunc(DashboardMemoryFileServer)
// Serve the dashboard from a filesystem if the magic env variable is enabled
dashDir := os.Getenv("ETCD_DASHBOARD_DIR")
if len(dashDir) != 0 {
handler = http.FileServer(http.Dir(dashDir))
}
return http.StripPrefix(prefix, handler)
}