Add mountpoint:info CLI command

This commit is contained in:
Svilen Markov 2025-04-13 17:09:51 +01:00
parent a3bc133bcb
commit f8f50b26d8
2 changed files with 33 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import (
"os" "os"
"strings" "strings"
"github.com/shirou/gopsutil/v4/disk"
"github.com/shirou/gopsutil/v4/sensors" "github.com/shirou/gopsutil/v4/sensors"
) )
@ -18,11 +19,13 @@ const (
cliIntentConfigPrint cliIntentConfigPrint
cliIntentDiagnose cliIntentDiagnose
cliIntentSensorsPrint cliIntentSensorsPrint
cliIntentMountpointInfo
) )
type cliOptions struct { type cliOptions struct {
intent cliIntent intent cliIntent
configPath string configPath string
args []string
} }
func parseCliOptions() (*cliOptions, error) { func parseCliOptions() (*cliOptions, error) {
@ -46,6 +49,7 @@ func parseCliOptions() (*cliOptions, error) {
fmt.Println(" config:validate Validate the config file") fmt.Println(" config:validate Validate the config file")
fmt.Println(" config:print Print the parsed config file with embedded includes") fmt.Println(" config:print Print the parsed config file with embedded includes")
fmt.Println(" sensors:print List all sensors") fmt.Println(" sensors:print List all sensors")
fmt.Println(" mountpoint:info Print information about a given mountpoint path")
fmt.Println(" diagnose Run diagnostic checks") fmt.Println(" diagnose Run diagnostic checks")
} }
configPath := flags.String("config", "glance.yml", "Set config path") configPath := flags.String("config", "glance.yml", "Set config path")
@ -72,6 +76,12 @@ func parseCliOptions() (*cliOptions, error) {
} else { } else {
return nil, unknownCommandErr return nil, unknownCommandErr
} }
} else if len(args) == 2 {
if args[0] == "mountpoint:info" {
intent = cliIntentMountpointInfo
} else {
return nil, unknownCommandErr
}
} else { } else {
return nil, unknownCommandErr return nil, unknownCommandErr
} }
@ -79,6 +89,7 @@ func parseCliOptions() (*cliOptions, error) {
return &cliOptions{ return &cliOptions{
intent: intent, intent: intent,
configPath: *configPath, configPath: *configPath,
args: args,
}, nil }, nil
} }
@ -106,3 +117,23 @@ func cliSensorsPrint() int {
return 0 return 0
} }
func cliMountpointInfo(requestedPath string) int {
usage, err := disk.Usage(requestedPath)
if err != nil {
fmt.Printf("Failed to retrieve info for path %s: %v\n", requestedPath, err)
if warns, ok := err.(*disk.Warnings); ok {
for _, w := range warns.List {
fmt.Printf(" - %v\n", w)
}
}
return 1
}
fmt.Println("Path:", usage.Path)
fmt.Println("FS type:", ternary(usage.Fstype == "", "unknown", usage.Fstype))
fmt.Printf("Used percent: %.1f%%", usage.UsedPercent)
return 0
}

View File

@ -51,6 +51,8 @@ func Main() int {
fmt.Println(string(contents)) fmt.Println(string(contents))
case cliIntentSensorsPrint: case cliIntentSensorsPrint:
return cliSensorsPrint() return cliSensorsPrint()
case cliIntentMountpointInfo:
return cliMountpointInfo(options.args[1])
case cliIntentDiagnose: case cliIntentDiagnose:
runDiagnostic() runDiagnostic()
} }