Files
weave-scope/app/router.go
2015-05-19 10:02:59 +00:00

53 lines
1.2 KiB
Go

package main
import (
"net/http"
"github.com/gorilla/mux"
"github.com/weaveworks/scope/report"
)
// Router gives of the HTTP dispatcher. It will always use the embedded HTML
// resources.
func Router(c Reporter) *mux.Router {
router := mux.NewRouter()
get := router.Methods("GET").Subrouter()
get.HandleFunc("/api/topology", makeTopologyList(c))
for name, def := range topologyRegistry {
makeTopologyHandlers(
c,
def.topologySelecter,
def.MapFunc,
false, // not grouped
get,
"/api/topology/"+name,
)
if def.hasGrouped {
makeTopologyHandlers(
c,
def.topologySelecter,
def.MapFunc,
true, // grouped
get,
"/api/topology/"+name+"grouped",
)
}
}
get.HandleFunc("/api/origin/{id}", makeOriginHandler(c))
get.HandleFunc("/api/report", makeRawReportHandler(c))
get.PathPrefix("/").Handler(http.FileServer(FS(false))) // everything else is static
return router
}
var topologyRegistry = map[string]struct {
human string
topologySelecter
report.MapFunc
hasGrouped bool
typ string
}{
"applications": {"Applications", selectProcess, report.ProcessName, true, "Process"},
"hosts": {"Hosts", selectNetwork, report.NetworkHostname, false, "Network"},
}