diff --git a/weed/util/duration.go b/weed/util/duration.go new file mode 100644 index 000000000..41d736839 --- /dev/null +++ b/weed/util/duration.go @@ -0,0 +1,21 @@ +package util + +import ( + "fmt" + "time" +) + +func FormatDuration(d time.Duration) string { + if days := d / (time.Hour * 24); days > 0 { + hours := d % (time.Hour * 24) / time.Hour + return fmt.Sprintf("%d days %d hours", int(days), int(hours)) + } else if hours := d / time.Hour; hours > 0 { + minutes := d % time.Hour / time.Minute + return fmt.Sprintf("%d hours %d minutes", int(hours), int(minutes)) + } else { + minutes := d / time.Minute + seconds := d % time.Minute / time.Second + return fmt.Sprintf("%d minutes %d seconds", int(minutes), int(seconds)) + } + return d.String() +} diff --git a/weed/weedserver/master_server.go b/weed/weedserver/master_server.go index 739f42589..cba715573 100644 --- a/weed/weedserver/master_server.go +++ b/weed/weedserver/master_server.go @@ -83,6 +83,7 @@ func NewMasterServer(r *mux.Router, port int, metaFolder string, r.HandleFunc("/stats/counter", ms.guard.WhiteList(statsCounterHandler)) r.HandleFunc("/stats/memory", ms.guard.WhiteList(statsMemoryHandler)) r.HandleFunc("/debug/pprof/", ms.guard.WhiteList(pprof.Index)) + r.HandleFunc("/debug/pprof/trace", ms.guard.WhiteList(pprof.Trace)) r.HandleFunc("/debug/pprof/{name}", ms.guard.WhiteList(pprof.Index)) ms.Topo.StartRefreshWritableVolumes() diff --git a/weed/weedserver/master_server_handlers_ui.go b/weed/weedserver/master_server_handlers_ui.go index 4cd6a3063..ac52ffb2a 100644 --- a/weed/weedserver/master_server_handlers_ui.go +++ b/weed/weedserver/master_server_handlers_ui.go @@ -13,7 +13,7 @@ import ( func (ms *MasterServer) uiStatusHandler(w http.ResponseWriter, r *http.Request) { infos := make(map[string]interface{}) infos["Version"] = util.VERSION - infos["Up Time"] = time.Now().Sub(startTime).String() + infos["Up Time"] = util.FormatDuration(time.Now().Sub(startTime)) args := struct { Version string Topology interface{} diff --git a/weed/weedserver/volume_server.go b/weed/weedserver/volume_server.go index 726b36b63..1d19aa10a 100644 --- a/weed/weedserver/volume_server.go +++ b/weed/weedserver/volume_server.go @@ -67,6 +67,7 @@ func NewVolumeServer(adminMux, publicMux *http.ServeMux, ip string, adminMux.HandleFunc("/stats/memory", vs.guard.WhiteList(statsMemoryHandler)) adminMux.HandleFunc("/stats/disk", vs.guard.WhiteList(vs.statsDiskHandler)) adminMux.HandleFunc("/debug/pprof/", vs.guard.WhiteList(pprof.Index)) + adminMux.HandleFunc("/debug/pprof/trace", vs.guard.WhiteList(pprof.Trace)) adminMux.HandleFunc("/debug/pprof/{name}", vs.guard.WhiteList(pprof.Index)) adminMux.HandleFunc("/delete", vs.guard.WhiteList(vs.batchDeleteHandler)) adminMux.HandleFunc("/", vs.privateStoreHandler) diff --git a/weed/weedserver/volume_server_handlers_ui.go b/weed/weedserver/volume_server_handlers_ui.go index 3e5f51ecd..1d4b4a74d 100644 --- a/weed/weedserver/volume_server_handlers_ui.go +++ b/weed/weedserver/volume_server_handlers_ui.go @@ -13,7 +13,7 @@ import ( func (vs *VolumeServer) uiStatusHandler(w http.ResponseWriter, r *http.Request) { infos := make(map[string]interface{}) infos["Version"] = util.VERSION - infos["Up Time"] = time.Now().Sub(startTime).String() + infos["Up Time"] = util.FormatDuration(time.Now().Sub(startTime)) var ds []*stats.DiskStatus for _, loc := range vs.store.Locations { if dir, e := filepath.Abs(loc.Directory); e == nil {