package cmdline import ( "context" "fmt" "github.com/spf13/cobra" "gitlink.org.cn/cloudream/storage/client/internal/config" "gitlink.org.cn/cloudream/storage/common/pkgs/sysevent" ) func init() { cmd := &cobra.Command{ Use: "sysevent", } rootCmd.AddCommand(cmd) cmd.AddCommand(&cobra.Command{ Use: "watch", Short: "Watch system events", Run: func(cmd *cobra.Command, args []string) { watchSysEvent(GetCmdCtx(cmd)) }, }) } func watchSysEvent(cmdCtx *CommandContext) { host, err := sysevent.NewWatcherHost(sysevent.ConfigFromMQConfig(config.Cfg().RabbitMQ)) if err != nil { fmt.Println(err) return } ch := host.Start() host.AddWatcherFn(func(event sysevent.SysEvent) { fmt.Println(event.String()) }) for { e, err := ch.Receive().Wait(context.Background()) if err != nil { fmt.Println(err) return } switch e := e.(type) { case sysevent.PublishError: fmt.Printf("Publish error: %v\n", e.Err) case sysevent.PublisherExited: if e.Err != nil { fmt.Printf("Publisher exited with error: %v\n", e.Err) } return case sysevent.OtherError: fmt.Printf("Other error: %v\n", e.Err) } } }