You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

sysevent.go 1.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package repl
  2. import (
  3. "context"
  4. "fmt"
  5. "os"
  6. "github.com/spf13/cobra"
  7. "gitlink.org.cn/cloudream/common/utils/serder"
  8. "gitlink.org.cn/cloudream/jcs-pub/client/internal/config"
  9. "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/sysevent"
  10. )
  11. func init() {
  12. cmd := &cobra.Command{
  13. Use: "sysevent",
  14. }
  15. RootCmd.AddCommand(cmd)
  16. outputJSON := false
  17. watchCmd := &cobra.Command{
  18. Use: "watch",
  19. Short: "Watch system events",
  20. Run: func(cmd *cobra.Command, args []string) {
  21. watchSysEvent(outputJSON)
  22. },
  23. }
  24. watchCmd.Flags().BoolVarP(&outputJSON, "json", "j", false, "output in JSON format")
  25. cmd.AddCommand(watchCmd)
  26. }
  27. func watchSysEvent(outputJSON bool) {
  28. host, err := sysevent.NewWatcherHost(config.Cfg().SysEvent)
  29. if err != nil {
  30. fmt.Println(err)
  31. return
  32. }
  33. ch := host.Start()
  34. host.AddWatcherFn(func(event sysevent.SysEvent) {
  35. if outputJSON {
  36. data, err := serder.ObjectToJSON(event)
  37. if err != nil {
  38. fmt.Fprintf(os.Stderr, "serializing event: %v\n", err)
  39. return
  40. }
  41. fmt.Println(string(data))
  42. } else {
  43. fmt.Println(event)
  44. }
  45. })
  46. for {
  47. e, err := ch.Receive().Wait(context.Background())
  48. if err != nil {
  49. fmt.Println(err)
  50. return
  51. }
  52. switch e := e.(type) {
  53. case sysevent.PublishError:
  54. fmt.Fprintf(os.Stderr, "Publish error: %v\n", e.Err)
  55. case sysevent.PublisherExited:
  56. if e.Err != nil {
  57. fmt.Fprintf(os.Stderr, "Publisher exited with error: %v\n", e.Err)
  58. }
  59. return
  60. case sysevent.OtherError:
  61. fmt.Fprintf(os.Stderr, "Other error: %v\n", e.Err)
  62. }
  63. }
  64. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。