diff --git a/weed/stats/disk_common.go b/weed/stats/disk_common.go new file mode 100644 index 000000000..936c77e91 --- /dev/null +++ b/weed/stats/disk_common.go @@ -0,0 +1,17 @@ +package stats + +import "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb" + +func calculateDiskRemaining(disk *volume_server_pb.DiskStatus) { + disk.Used = disk.All - disk.Free + + if disk.All > 0 { + disk.PercentFree = float32((float64(disk.Free) / float64(disk.All)) * 100) + disk.PercentUsed = float32((float64(disk.Used) / float64(disk.All)) * 100) + } else { + disk.PercentFree = 0 + disk.PercentUsed = 0 + } + + return +} diff --git a/weed/stats/disk_notsupported.go b/weed/stats/disk_notsupported.go index 418164546..956c7bf9f 100644 --- a/weed/stats/disk_notsupported.go +++ b/weed/stats/disk_notsupported.go @@ -1,5 +1,5 @@ -//go:build netbsd || plan9 || solaris -// +build netbsd plan9 solaris +//go:build netbsd || plan9 +// +build netbsd plan9 package stats diff --git a/weed/stats/disk_openbsd.go b/weed/stats/disk_openbsd.go index bb03126bf..1be41e5c7 100644 --- a/weed/stats/disk_openbsd.go +++ b/weed/stats/disk_openbsd.go @@ -15,10 +15,10 @@ func fillInDiskStatus(disk *volume_server_pb.DiskStatus) { if err != nil { return } + disk.All = fs.F_blocks * uint64(fs.F_bsize) disk.Free = fs.F_bfree * uint64(fs.F_bsize) - disk.Used = disk.All - disk.Free - disk.PercentFree = float32((float64(disk.Free) / float64(disk.All)) * 100) - disk.PercentUsed = float32((float64(disk.Used) / float64(disk.All)) * 100) + calculateDiskRemaining(disk) + return } diff --git a/weed/stats/disk_solaris.go b/weed/stats/disk_solaris.go new file mode 100644 index 000000000..cce20e4cc --- /dev/null +++ b/weed/stats/disk_solaris.go @@ -0,0 +1,24 @@ +//go:build solaris +// +build solaris + +package stats + +import ( + "golang.org/x/sys/unix" + + "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb" +) + +func fillInDiskStatus(disk *volume_server_pb.DiskStatus) { + var stat unix.Statvfs_t + err := unix.Statvfs(disk.Dir, &stat) + if err != nil { + return + } + + disk.All = stat.Blocks * uint64(stat.Bsize) + disk.Free = stat.Bfree * uint64(stat.Bsize) + calculateDiskRemaining(disk) + + return +} diff --git a/weed/stats/disk_windows.go b/weed/stats/disk_windows.go index 16e6d3326..93c703134 100644 --- a/weed/stats/disk_windows.go +++ b/weed/stats/disk_windows.go @@ -39,9 +39,7 @@ func fillInDiskStatus(disk *volume_server_pb.DiskStatus) { return } - disk.Used = disk.All - disk.Free - disk.PercentFree = float32((float64(disk.Free) / float64(disk.All)) * 100) - disk.PercentUsed = float32((float64(disk.Used) / float64(disk.All)) * 100) + calculateDiskRemaining(disk) return }