forked from Elara6331/itd
		
	Re-add watch commands to itctl
This commit is contained in:
		| @@ -2,6 +2,8 @@ package main | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"os" | 	"os" | ||||||
|  | 	"os/signal" | ||||||
|  | 	"syscall" | ||||||
|  |  | ||||||
| 	"github.com/rs/zerolog" | 	"github.com/rs/zerolog" | ||||||
| 	"github.com/rs/zerolog/log" | 	"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 { | 		Before: func(c *cli.Context) error { | ||||||
| 			newClient, err := api.New(c.String("socket-path")) | 			newClient, err := api.New(c.String("socket-path")) | ||||||
| @@ -196,3 +241,17 @@ func main() { | |||||||
| 		log.Fatal().Err(err).Msg("Error while running app") | 		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/knadh/koanf v1.4.0 | ||||||
| 	github.com/mattn/go-isatty v0.0.14 | 	github.com/mattn/go-isatty v0.0.14 | ||||||
| 	github.com/mozillazg/go-pinyin v0.19.0 | 	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/smallnest/rpcx v1.7.4 | ||||||
| 	github.com/urfave/cli/v2 v2.3.0 | 	github.com/urfave/cli/v2 v2.3.0 | ||||||
| 	github.com/vmihailenco/msgpack/v5 v5.3.5 | 	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 | 	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 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= | ||||||
| github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= | 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/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= | ||||||
| github.com/rs/zerolog v1.26.0 h1:ORM4ibhEZeTeQlCojCK2kPz1ogAY4bGs4tD+SaAdGaE= | github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc= | ||||||
| github.com/rs/zerolog v1.26.0/go.mod h1:yBiM87lvSqX8h0Ww4sdzNSkVYZ8dL2xjZJG1lAuGZEo= | 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 h1:KUKd/pV8Geg77+8LNDwdow6rVCAYOp8+kHUyFvL6Mhk= | ||||||
| github.com/rubyist/circuitbreaker v2.2.1+incompatible/go.mod h1:Ycs3JgJADPuzJDwffe12k6BZT8hxVi6lFK+gWYJLN4A= | github.com/rubyist/circuitbreaker v2.2.1+incompatible/go.mod h1:Ycs3JgJADPuzJDwffe12k6BZT8hxVi6lFK+gWYJLN4A= | ||||||
| github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= | 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.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= | ||||||
| github.com/yuin/goldmark v1.4.4 h1:zNWRjYUW32G9KirMXYHQHVNFkXvMI7LpgNW2AgYAoIs= | github.com/yuin/goldmark v1.4.4 h1:zNWRjYUW32G9KirMXYHQHVNFkXvMI7LpgNW2AgYAoIs= | ||||||
| github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg= | 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-20220424014025-bebd1017c532 h1:HOFaxlEKacGw1nDs23qRv+FTX+PR+v4l1Sujfq5S3pc= | ||||||
| go.arsenm.dev/infinitime v0.0.0-20220416112421-b7a50271bece/go.mod h1:Prvwx7Y2y8HsNRA1tPptduW9jzuw/JffmocvoHcDbYo= | 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.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 v0.19.0/go.mod h1:j9bF567N9EfomkSidSfmMwIwIBuP37AMAIzVW85OxSg= | ||||||
| go.opentelemetry.io/otel v1.6.3 h1:FLOfo8f9JzFVFVyU+MSRJc2HdEAXQgm7pIv2uFKRSZE= | 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-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-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-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 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM= | ||||||
| golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | 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= | golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user