forked from Elara6331/itd
		
	Re-add watch commands to itctl
This commit is contained in:
		| @@ -2,6 +2,8 @@ package main | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"os/signal" | ||||
| 	"syscall" | ||||
|  | ||||
| 	"github.com/rs/zerolog" | ||||
| 	"github.com/rs/zerolog/log" | ||||
| @@ -174,6 +176,49 @@ func main() { | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 			{ | ||||
| 				Name:  "watch", | ||||
| 				Usage: "Watch a value for changes", | ||||
| 				Subcommands: []*cli.Command{ | ||||
| 					{ | ||||
| 						Flags: []cli.Flag{ | ||||
| 							&cli.BoolFlag{Name: "json"}, | ||||
| 							&cli.BoolFlag{Name: "shell"}, | ||||
| 						}, | ||||
| 						Name:   "heart", | ||||
| 						Usage:  "Watch heart rate value for changes", | ||||
| 						Action: watchHeart, | ||||
| 					}, | ||||
| 					{ | ||||
| 						Flags: []cli.Flag{ | ||||
| 							&cli.BoolFlag{Name: "json"}, | ||||
| 							&cli.BoolFlag{Name: "shell"}, | ||||
| 						}, | ||||
| 						Name:   "steps", | ||||
| 						Usage:  "Watch step count value for changes", | ||||
| 						Action: watchStepCount, | ||||
| 					}, | ||||
| 					{ | ||||
| 						Flags: []cli.Flag{ | ||||
| 							&cli.BoolFlag{Name: "json"}, | ||||
| 							&cli.BoolFlag{Name: "shell"}, | ||||
| 						}, | ||||
| 						Name:   "motion", | ||||
| 						Usage:  "Watch motion coordinates for changes", | ||||
| 						Action: watchMotion, | ||||
| 					}, | ||||
| 					{ | ||||
| 						Flags: []cli.Flag{ | ||||
| 							&cli.BoolFlag{Name: "json"}, | ||||
| 							&cli.BoolFlag{Name: "shell"}, | ||||
| 						}, | ||||
| 						Name:    "battery", | ||||
| 						Aliases: []string{"batt"}, | ||||
| 						Usage:   "Watch battery level value for changes", | ||||
| 						Action:  watchBattLevel, | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Before: func(c *cli.Context) error { | ||||
| 			newClient, err := api.New(c.String("socket-path")) | ||||
| @@ -196,3 +241,17 @@ func main() { | ||||
| 		log.Fatal().Err(err).Msg("Error while running app") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func catchSignal(fn func()) { | ||||
| 	sigCh := make(chan os.Signal, 1) | ||||
| 	signal.Notify( | ||||
| 		sigCh, | ||||
| 		syscall.SIGINT, | ||||
| 		syscall.SIGTERM, | ||||
| 	) | ||||
| 	go func() { | ||||
| 		<-sigCh | ||||
| 		fn() | ||||
| 		os.Exit(0) | ||||
| 	}() | ||||
| } | ||||
|   | ||||
							
								
								
									
										104
									
								
								cmd/itctl/watch.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								cmd/itctl/watch.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,104 @@ | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
|  | ||||
| 	"github.com/urfave/cli/v2" | ||||
| ) | ||||
|  | ||||
| func watchHeart(c *cli.Context) error { | ||||
| 	heartCh, cancel, err := client.WatchHeartRate() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	catchSignal(cancel) | ||||
|  | ||||
| 	for heartRate := range heartCh { | ||||
| 		if c.Bool("json") { | ||||
| 			json.NewEncoder(os.Stdout).Encode( | ||||
| 				map[string]uint8{"heartRate": heartRate}, | ||||
| 			) | ||||
| 		} else if c.Bool("shell") { | ||||
| 			fmt.Printf("HEART_RATE=%d\n", heartRate) | ||||
| 		} else { | ||||
| 			fmt.Println(heartRate, "BPM") | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func watchBattLevel(c *cli.Context) error { | ||||
| 	battLevelCh, cancel, err := client.WatchBatteryLevel() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	catchSignal(cancel) | ||||
|  | ||||
| 	for battLevel := range battLevelCh { | ||||
| 		if c.Bool("json") { | ||||
| 			json.NewEncoder(os.Stdout).Encode( | ||||
| 				map[string]uint8{"battLevel": battLevel}, | ||||
| 			) | ||||
| 		} else if c.Bool("shell") { | ||||
| 			fmt.Printf("BATTERY_LEVEL=%d\n", battLevel) | ||||
| 		} else { | ||||
| 			fmt.Printf("%d%%\n", battLevel) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func watchStepCount(c *cli.Context) error { | ||||
| 	stepCountCh, cancel, err := client.WatchStepCount() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	catchSignal(cancel) | ||||
|  | ||||
| 	for stepCount := range stepCountCh { | ||||
| 		if c.Bool("json") { | ||||
| 			json.NewEncoder(os.Stdout).Encode( | ||||
| 				map[string]uint32{"stepCount": stepCount}, | ||||
| 			) | ||||
| 		} else if c.Bool("shell") { | ||||
| 			fmt.Printf("STEP_COUNT=%d\n", stepCount) | ||||
| 		} else { | ||||
| 			fmt.Println(stepCount, "Steps") | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func watchMotion(c *cli.Context) error { | ||||
| 	motionCh, cancel, err := client.WatchMotion() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	catchSignal(cancel) | ||||
|  | ||||
| 	for motionVals := range motionCh { | ||||
| 		if c.Bool("json") { | ||||
| 			json.NewEncoder(os.Stdout).Encode(motionVals) | ||||
| 		} else if c.Bool("shell") { | ||||
| 			fmt.Printf( | ||||
| 				"X=%d\nY=%d\nZ=%d\n", | ||||
| 				motionVals.X, | ||||
| 				motionVals.Y, | ||||
| 				motionVals.Z, | ||||
| 			) | ||||
| 		} else { | ||||
| 			fmt.Println(motionVals) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										4
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.mod
									
									
									
									
									
								
							| @@ -11,11 +11,11 @@ require ( | ||||
| 	github.com/knadh/koanf v1.4.0 | ||||
| 	github.com/mattn/go-isatty v0.0.14 | ||||
| 	github.com/mozillazg/go-pinyin v0.19.0 | ||||
| 	github.com/rs/zerolog v1.26.0 | ||||
| 	github.com/rs/zerolog v1.26.1 | ||||
| 	github.com/smallnest/rpcx v1.7.4 | ||||
| 	github.com/urfave/cli/v2 v2.3.0 | ||||
| 	github.com/vmihailenco/msgpack/v5 v5.3.5 | ||||
| 	go.arsenm.dev/infinitime v0.0.0-20220416112421-b7a50271bece | ||||
| 	go.arsenm.dev/infinitime v0.0.0-20220424014025-bebd1017c532 | ||||
| 	golang.org/x/text v0.3.7 | ||||
| ) | ||||
|  | ||||
|   | ||||
							
								
								
									
										9
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								go.sum
									
									
									
									
									
								
							| @@ -447,8 +447,8 @@ github.com/rpcxio/libkv v0.5.1-0.20210420120011-1fceaedca8a5/go.mod h1:zHGgtLr3c | ||||
| github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= | ||||
| github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= | ||||
| github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= | ||||
| github.com/rs/zerolog v1.26.0 h1:ORM4ibhEZeTeQlCojCK2kPz1ogAY4bGs4tD+SaAdGaE= | ||||
| github.com/rs/zerolog v1.26.0/go.mod h1:yBiM87lvSqX8h0Ww4sdzNSkVYZ8dL2xjZJG1lAuGZEo= | ||||
| github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc= | ||||
| github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc= | ||||
| github.com/rubyist/circuitbreaker v2.2.1+incompatible h1:KUKd/pV8Geg77+8LNDwdow6rVCAYOp8+kHUyFvL6Mhk= | ||||
| github.com/rubyist/circuitbreaker v2.2.1+incompatible/go.mod h1:Ycs3JgJADPuzJDwffe12k6BZT8hxVi6lFK+gWYJLN4A= | ||||
| github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= | ||||
| @@ -560,8 +560,8 @@ github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 | ||||
| github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= | ||||
| github.com/yuin/goldmark v1.4.4 h1:zNWRjYUW32G9KirMXYHQHVNFkXvMI7LpgNW2AgYAoIs= | ||||
| github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg= | ||||
| go.arsenm.dev/infinitime v0.0.0-20220416112421-b7a50271bece h1:ns/GMc4E8ZUZ9TEXhXgU4M+5sRaOLTFFoBWEJ67p3YM= | ||||
| go.arsenm.dev/infinitime v0.0.0-20220416112421-b7a50271bece/go.mod h1:Prvwx7Y2y8HsNRA1tPptduW9jzuw/JffmocvoHcDbYo= | ||||
| go.arsenm.dev/infinitime v0.0.0-20220424014025-bebd1017c532 h1:HOFaxlEKacGw1nDs23qRv+FTX+PR+v4l1Sujfq5S3pc= | ||||
| go.arsenm.dev/infinitime v0.0.0-20220424014025-bebd1017c532/go.mod h1:1cBQ3fp6QlRbSqu9kEBAHsVThINj31FtqHIYVsQ7wgg= | ||||
| go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= | ||||
| go.opentelemetry.io/otel v0.19.0/go.mod h1:j9bF567N9EfomkSidSfmMwIwIBuP37AMAIzVW85OxSg= | ||||
| go.opentelemetry.io/otel v1.6.3 h1:FLOfo8f9JzFVFVyU+MSRJc2HdEAXQgm7pIv2uFKRSZE= | ||||
| @@ -585,6 +585,7 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh | ||||
| golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
| golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | ||||
| golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||
| golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= | ||||
| golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM= | ||||
| golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||
| golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
|   | ||||
		Reference in New Issue
	
	Block a user