volume_server_handlers_ui.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package weed_server
  2. import (
  3. "net/http"
  4. "path/filepath"
  5. "time"
  6. "github.com/seaweedfs/seaweedfs/weed/glog"
  7. "github.com/seaweedfs/seaweedfs/weed/pb"
  8. "github.com/seaweedfs/seaweedfs/weed/util/version"
  9. "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb"
  10. ui "github.com/seaweedfs/seaweedfs/weed/server/volume_server_ui"
  11. "github.com/seaweedfs/seaweedfs/weed/stats"
  12. "github.com/seaweedfs/seaweedfs/weed/storage"
  13. )
  14. func (vs *VolumeServer) uiStatusHandler(w http.ResponseWriter, r *http.Request) {
  15. w.Header().Set("Server", "SeaweedFS Volume "+version.VERSION)
  16. infos := make(map[string]interface{})
  17. infos["Up Time"] = time.Now().Sub(startTime).String()
  18. var ds []*volume_server_pb.DiskStatus
  19. for _, loc := range vs.store.Locations {
  20. if dir, e := filepath.Abs(loc.Directory); e == nil {
  21. newDiskStatus := stats.NewDiskStatus(dir)
  22. newDiskStatus.DiskType = loc.DiskType.String()
  23. ds = append(ds, newDiskStatus)
  24. }
  25. }
  26. volumeInfos := vs.store.VolumeInfos()
  27. var normalVolumeInfos, remoteVolumeInfos []*storage.VolumeInfo
  28. for _, vinfo := range volumeInfos {
  29. if vinfo.IsRemote() {
  30. remoteVolumeInfos = append(remoteVolumeInfos, vinfo)
  31. } else {
  32. normalVolumeInfos = append(normalVolumeInfos, vinfo)
  33. }
  34. }
  35. args := struct {
  36. Version string
  37. Masters []pb.ServerAddress
  38. Volumes interface{}
  39. EcVolumes interface{}
  40. RemoteVolumes interface{}
  41. DiskStatuses interface{}
  42. Stats interface{}
  43. Counters *stats.ServerStats
  44. }{
  45. version.Version(),
  46. vs.SeedMasterNodes,
  47. normalVolumeInfos,
  48. vs.store.EcVolumes(),
  49. remoteVolumeInfos,
  50. ds,
  51. infos,
  52. serverStats,
  53. }
  54. if err := ui.StatusTpl.Execute(w, args); err != nil {
  55. glog.Errorf("template execution error: %v", err)
  56. http.Error(w, "Internal server error", http.StatusInternalServerError)
  57. }
  58. }