diff --git a/internal/glance/cli.go b/internal/glance/cli.go index e231706..a071e24 100644 --- a/internal/glance/cli.go +++ b/internal/glance/cli.go @@ -5,15 +5,19 @@ import ( "fmt" "os" "strings" + + "github.com/shirou/gopsutil/v4/sensors" ) type cliIntent uint8 const ( - cliIntentServe cliIntent = iota - cliIntentConfigValidate = iota - cliIntentConfigPrint = iota - cliIntentDiagnose = iota + cliIntentVersionPrint cliIntent = iota + cliIntentServe + cliIntentConfigValidate + cliIntentConfigPrint + cliIntentDiagnose + cliIntentSensorsPrint ) type cliOptions struct { @@ -22,6 +26,15 @@ type cliOptions struct { } func parseCliOptions() (*cliOptions, error) { + var args []string + + args = os.Args[1:] + if len(args) == 1 && (args[0] == "--version" || args[0] == "-v" || args[0] == "version") { + return &cliOptions{ + intent: cliIntentVersionPrint, + }, nil + } + flags := flag.NewFlagSet("", flag.ExitOnError) flags.Usage = func() { fmt.Println("Usage: glance [options] command") @@ -32,6 +45,7 @@ func parseCliOptions() (*cliOptions, error) { fmt.Println("\nCommands:") fmt.Println(" config:validate Validate the config file") fmt.Println(" config:print Print the parsed config file with embedded includes") + fmt.Println(" sensors:print List all sensors") fmt.Println(" diagnose Run diagnostic checks") } configPath := flags.String("config", "glance.yml", "Set config path") @@ -41,7 +55,7 @@ func parseCliOptions() (*cliOptions, error) { } var intent cliIntent - var args = flags.Args() + args = flags.Args() unknownCommandErr := fmt.Errorf("unknown command: %s", strings.Join(args, " ")) if len(args) == 0 { @@ -51,6 +65,8 @@ func parseCliOptions() (*cliOptions, error) { intent = cliIntentConfigValidate } else if args[0] == "config:print" { intent = cliIntentConfigPrint + } else if args[0] == "sensors:print" { + intent = cliIntentSensorsPrint } else if args[0] == "diagnose" { intent = cliIntentDiagnose } else { @@ -65,3 +81,22 @@ func parseCliOptions() (*cliOptions, error) { configPath: *configPath, }, nil } + +func cliSensorsPrint() int { + tempSensors, err := sensors.SensorsTemperatures() + if err != nil { + fmt.Printf("Failed to retrieve list of sensors: %v\n", err) + return 1 + } + + if len(tempSensors) == 0 { + fmt.Println("No sensors found") + return 0 + } + + for _, sensor := range tempSensors { + fmt.Printf("%s: %.1f°C\n", sensor.SensorKey, sensor.Temperature) + } + + return 0 +} diff --git a/internal/glance/main.go b/internal/glance/main.go index baac315..3dd43dc 100644 --- a/internal/glance/main.go +++ b/internal/glance/main.go @@ -18,6 +18,8 @@ func Main() int { } switch options.intent { + case cliIntentVersionPrint: + fmt.Println(buildVersion) case cliIntentServe: // remove in v0.10.0 if serveUpdateNoticeIfConfigLocationNotMigrated(options.configPath) { @@ -47,6 +49,8 @@ func Main() int { } fmt.Println(string(contents)) + case cliIntentSensorsPrint: + return cliSensorsPrint() case cliIntentDiagnose: runDiagnostic() }