You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							62 lines
						
					
					
						
							1.8 KiB
						
					
					
				
								package weed_server
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"net/http"
							 | 
						|
									"path/filepath"
							 | 
						|
									"time"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/glog"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/util/version"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb"
							 | 
						|
									ui "github.com/seaweedfs/seaweedfs/weed/server/volume_server_ui"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/stats"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/storage"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func (vs *VolumeServer) uiStatusHandler(w http.ResponseWriter, r *http.Request) {
							 | 
						|
									w.Header().Set("Server", "SeaweedFS Volume "+version.VERSION)
							 | 
						|
									infos := make(map[string]interface{})
							 | 
						|
									infos["Up Time"] = time.Now().Sub(startTime).String()
							 | 
						|
									var ds []*volume_server_pb.DiskStatus
							 | 
						|
									for _, loc := range vs.store.Locations {
							 | 
						|
										if dir, e := filepath.Abs(loc.Directory); e == nil {
							 | 
						|
											newDiskStatus := stats.NewDiskStatus(dir)
							 | 
						|
											newDiskStatus.DiskType = loc.DiskType.String()
							 | 
						|
											ds = append(ds, newDiskStatus)
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									volumeInfos := vs.store.VolumeInfos()
							 | 
						|
									var normalVolumeInfos, remoteVolumeInfos []*storage.VolumeInfo
							 | 
						|
									for _, vinfo := range volumeInfos {
							 | 
						|
										if vinfo.IsRemote() {
							 | 
						|
											remoteVolumeInfos = append(remoteVolumeInfos, vinfo)
							 | 
						|
										} else {
							 | 
						|
											normalVolumeInfos = append(normalVolumeInfos, vinfo)
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									args := struct {
							 | 
						|
										Version       string
							 | 
						|
										Masters       []pb.ServerAddress
							 | 
						|
										Volumes       interface{}
							 | 
						|
										EcVolumes     interface{}
							 | 
						|
										RemoteVolumes interface{}
							 | 
						|
										DiskStatuses  interface{}
							 | 
						|
										Stats         interface{}
							 | 
						|
										Counters      *stats.ServerStats
							 | 
						|
									}{
							 | 
						|
										version.Version(),
							 | 
						|
										vs.SeedMasterNodes,
							 | 
						|
										normalVolumeInfos,
							 | 
						|
										vs.store.EcVolumes(),
							 | 
						|
										remoteVolumeInfos,
							 | 
						|
										ds,
							 | 
						|
										infos,
							 | 
						|
										serverStats,
							 | 
						|
									}
							 | 
						|
									if err := ui.StatusTpl.Execute(w, args); err != nil {
							 | 
						|
										glog.Errorf("template execution error: %v", err)
							 | 
						|
										http.Error(w, "Internal server error", http.StatusInternalServerError)
							 | 
						|
									}
							 | 
						|
								}
							 |