mirror of
				https://github.com/minio/minio.git
				synced 2025-11-04 02:01:05 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			184 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
 * MinIO Cloud Storage, (C) 2019 MinIO, Inc.
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
 | 
						|
package cmd
 | 
						|
 | 
						|
import (
 | 
						|
	"net"
 | 
						|
	"net/http"
 | 
						|
	"os"
 | 
						|
 | 
						|
	"github.com/minio/minio-go/pkg/set"
 | 
						|
	"github.com/minio/minio/pkg/cpu"
 | 
						|
	"github.com/minio/minio/pkg/disk"
 | 
						|
	"github.com/minio/minio/pkg/madmin"
 | 
						|
	"github.com/minio/minio/pkg/mem"
 | 
						|
 | 
						|
	cpuhw "github.com/shirou/gopsutil/cpu"
 | 
						|
)
 | 
						|
 | 
						|
// getLocalMemUsage - returns ServerMemUsageInfo for only the
 | 
						|
// local endpoints from given list of endpoints
 | 
						|
func getLocalMemUsage(endpoints EndpointList, r *http.Request) ServerMemUsageInfo {
 | 
						|
	var memUsages []mem.Usage
 | 
						|
	var historicUsages []mem.Usage
 | 
						|
	seenHosts := set.NewStringSet()
 | 
						|
	for _, endpoint := range endpoints {
 | 
						|
		if seenHosts.Contains(endpoint.Host) {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
		seenHosts.Add(endpoint.Host)
 | 
						|
 | 
						|
		// Only proceed for local endpoints
 | 
						|
		if endpoint.IsLocal {
 | 
						|
			memUsages = append(memUsages, mem.GetUsage())
 | 
						|
			historicUsages = append(historicUsages, mem.GetHistoricUsage())
 | 
						|
		}
 | 
						|
	}
 | 
						|
	addr := r.Host
 | 
						|
	if globalIsDistXL {
 | 
						|
		addr = GetLocalPeer(endpoints)
 | 
						|
	}
 | 
						|
	return ServerMemUsageInfo{
 | 
						|
		Addr:          addr,
 | 
						|
		Usage:         memUsages,
 | 
						|
		HistoricUsage: historicUsages,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// getLocalCPULoad - returns ServerCPULoadInfo for only the
 | 
						|
// local endpoints from given list of endpoints
 | 
						|
func getLocalCPULoad(endpoints EndpointList, r *http.Request) ServerCPULoadInfo {
 | 
						|
	var cpuLoads []cpu.Load
 | 
						|
	var historicLoads []cpu.Load
 | 
						|
	seenHosts := set.NewStringSet()
 | 
						|
	for _, endpoint := range endpoints {
 | 
						|
		if seenHosts.Contains(endpoint.Host) {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
		seenHosts.Add(endpoint.Host)
 | 
						|
 | 
						|
		// Only proceed for local endpoints
 | 
						|
		if endpoint.IsLocal {
 | 
						|
			cpuLoads = append(cpuLoads, cpu.GetLoad())
 | 
						|
			historicLoads = append(historicLoads, cpu.GetHistoricLoad())
 | 
						|
		}
 | 
						|
	}
 | 
						|
	addr := r.Host
 | 
						|
	if globalIsDistXL {
 | 
						|
		addr = GetLocalPeer(endpoints)
 | 
						|
	}
 | 
						|
	return ServerCPULoadInfo{
 | 
						|
		Addr:         addr,
 | 
						|
		Load:         cpuLoads,
 | 
						|
		HistoricLoad: historicLoads,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// getLocalDrivesPerf - returns ServerDrivesPerfInfo for only the
 | 
						|
// local endpoints from given list of endpoints
 | 
						|
func getLocalDrivesPerf(endpoints EndpointList, size int64, r *http.Request) madmin.ServerDrivesPerfInfo {
 | 
						|
	var dps []disk.Performance
 | 
						|
	for _, endpoint := range endpoints {
 | 
						|
		// Only proceed for local endpoints
 | 
						|
		if endpoint.IsLocal {
 | 
						|
			if _, err := os.Stat(endpoint.Path); err != nil {
 | 
						|
				// Since this drive is not available, add relevant details and proceed
 | 
						|
				dps = append(dps, disk.Performance{Path: endpoint.Path, Error: err.Error()})
 | 
						|
				continue
 | 
						|
			}
 | 
						|
			dp := disk.GetPerformance(pathJoin(endpoint.Path, minioMetaTmpBucket, mustGetUUID()), size)
 | 
						|
			dp.Path = endpoint.Path
 | 
						|
			dps = append(dps, dp)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	addr := r.Host
 | 
						|
	if globalIsDistXL {
 | 
						|
		addr = GetLocalPeer(endpoints)
 | 
						|
	}
 | 
						|
	return madmin.ServerDrivesPerfInfo{
 | 
						|
		Addr: addr,
 | 
						|
		Perf: dps,
 | 
						|
		Size: size,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// getLocalCPUInfo - returns ServerCPUHardwareInfo only for the
 | 
						|
// local endpoints from given list of endpoints
 | 
						|
func getLocalCPUInfo(endpoints EndpointList, r *http.Request) madmin.ServerCPUHardwareInfo {
 | 
						|
	var cpuHardwares []cpuhw.InfoStat
 | 
						|
	seenHosts := set.NewStringSet()
 | 
						|
	for _, endpoint := range endpoints {
 | 
						|
		if seenHosts.Contains(endpoint.Host) {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
		// Add to the list of visited hosts
 | 
						|
		seenHosts.Add(endpoint.Host)
 | 
						|
		// Only proceed for local endpoints
 | 
						|
		if endpoint.IsLocal {
 | 
						|
			cpuHardware, err := cpuhw.Info()
 | 
						|
			if err != nil {
 | 
						|
				return madmin.ServerCPUHardwareInfo{
 | 
						|
					Error: err.Error(),
 | 
						|
				}
 | 
						|
			}
 | 
						|
			cpuHardwares = append(cpuHardwares, cpuHardware...)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	addr := r.Host
 | 
						|
	if globalIsDistXL {
 | 
						|
		addr = GetLocalPeer(endpoints)
 | 
						|
	}
 | 
						|
 | 
						|
	return madmin.ServerCPUHardwareInfo{
 | 
						|
		Addr:    addr,
 | 
						|
		CPUInfo: cpuHardwares,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// getLocalNetworkInfo - returns ServerNetworkHardwareInfo only for the
 | 
						|
// local endpoints from given list of endpoints
 | 
						|
func getLocalNetworkInfo(endpoints EndpointList, r *http.Request) madmin.ServerNetworkHardwareInfo {
 | 
						|
	var networkHardwares []net.Interface
 | 
						|
	seenHosts := set.NewStringSet()
 | 
						|
	for _, endpoint := range endpoints {
 | 
						|
		if seenHosts.Contains(endpoint.Host) {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
		// Add to the list of visited hosts
 | 
						|
		seenHosts.Add(endpoint.Host)
 | 
						|
		// Only proceed for local endpoints
 | 
						|
		if endpoint.IsLocal {
 | 
						|
			networkHardware, err := net.Interfaces()
 | 
						|
			if err != nil {
 | 
						|
				return madmin.ServerNetworkHardwareInfo{
 | 
						|
					Error: err.Error(),
 | 
						|
				}
 | 
						|
			}
 | 
						|
			networkHardwares = append(networkHardwares, networkHardware...)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	addr := r.Host
 | 
						|
	if globalIsDistXL {
 | 
						|
		addr = GetLocalPeer(endpoints)
 | 
						|
	}
 | 
						|
 | 
						|
	return madmin.ServerNetworkHardwareInfo{
 | 
						|
		Addr:        addr,
 | 
						|
		NetworkInfo: networkHardwares,
 | 
						|
	}
 | 
						|
}
 |