12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package dashboard
- import (
- "bytes"
- "net/http"
- "os"
- "path"
- "time"
- "github.com/coreos/etcd/log"
- "github.com/coreos/etcd/mod/dashboard/resources"
- )
- func memoryFileServer(w http.ResponseWriter, req *http.Request) {
- log.Debugf("[recv] %s %s [%s]", req.Method, req.URL.Path, req.RemoteAddr)
- upath := req.URL.Path
- b, err := resources.Asset(req.URL.Path)
- if err != nil {
- http.Error(w, upath+": File not found", http.StatusNotFound)
- return
- }
- http.ServeContent(w, req, upath, time.Time{}, bytes.NewReader(b))
- return
- }
- func getDashDir() string {
- return os.Getenv("ETCD_DASHBOARD_DIR")
- }
- // 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 HttpHandler() (handler http.Handler) {
- handler = http.HandlerFunc(memoryFileServer)
- // Serve the dashboard from a filesystem if the magic env variable is enabled
- dashDir := getDashDir()
- if len(dashDir) != 0 {
- log.Debugf("Using dashboard directory %s", dashDir)
- handler = http.FileServer(http.Dir(dashDir))
- }
- return handler
- }
- // Always returns the index.html page.
- func IndexPage(w http.ResponseWriter, req *http.Request) {
- dashDir := getDashDir()
- if len(dashDir) != 0 {
- // Serve the index page from disk if the env variable is set.
- http.ServeFile(w, req, path.Join(dashDir, "index.html"))
- } else {
- // Otherwise serve it from the compiled resources.
- b, _ := resources.Asset("index.html")
- http.ServeContent(w, req, "index.html", time.Time{}, bytes.NewReader(b))
- }
- return
- }
|