Add version & sensors:print cli commands

This commit is contained in:
Svilen Markov 2025-04-10 00:39:08 +01:00
parent 6bb6f87800
commit 07e5626469
2 changed files with 44 additions and 5 deletions

View File

@ -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
}

View File

@ -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()
}