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.

main.go 2.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "sync"
  6. log "gitlink.org.cn/cloudream/common/pkg/logger"
  7. "gitlink.org.cn/cloudream/db"
  8. scsvr "gitlink.org.cn/cloudream/rabbitmq/server/scanner"
  9. "gitlink.org.cn/cloudream/scanner/internal/config"
  10. "gitlink.org.cn/cloudream/scanner/internal/event"
  11. "gitlink.org.cn/cloudream/scanner/internal/services"
  12. "gitlink.org.cn/cloudream/scanner/internal/tickevent"
  13. )
  14. func main() {
  15. err := config.Init()
  16. if err != nil {
  17. fmt.Printf("init config failed, err: %s", err.Error())
  18. os.Exit(1)
  19. }
  20. err = log.Init(&config.Cfg().Logger)
  21. if err != nil {
  22. fmt.Printf("init logger failed, err: %s", err.Error())
  23. os.Exit(1)
  24. }
  25. db, err := db.NewDB(&config.Cfg().DB)
  26. if err != nil {
  27. log.Fatalf("new db failed, err: %s", err.Error())
  28. }
  29. wg := sync.WaitGroup{}
  30. wg.Add(2)
  31. eventExecutor := event.NewExecutor(db)
  32. go serveEventExecutor(&eventExecutor, &wg)
  33. agtSvr, err := scsvr.NewServer(services.NewService(&eventExecutor), &config.Cfg().RabbitMQ)
  34. if err != nil {
  35. log.Fatalf("new agent server failed, err: %s", err.Error())
  36. }
  37. agtSvr.OnError = func(err error) {
  38. log.Warnf("agent server err: %s", err.Error())
  39. }
  40. go serveScannerServer(agtSvr, &wg)
  41. tickExecutor := tickevent.NewExecutor(tickevent.ExecuteArgs{
  42. EventExecutor: &eventExecutor,
  43. DB: db,
  44. })
  45. startTickEvent(&tickExecutor)
  46. wg.Wait()
  47. }
  48. func serveEventExecutor(executor *event.Executor, wg *sync.WaitGroup) {
  49. log.Info("start serving event executor")
  50. err := executor.Execute()
  51. if err != nil {
  52. log.Errorf("event executor stopped with error: %s", err.Error())
  53. }
  54. log.Info("event executor stopped")
  55. wg.Done()
  56. }
  57. func serveScannerServer(server *scsvr.Server, wg *sync.WaitGroup) {
  58. log.Info("start serving scanner server")
  59. err := server.Serve()
  60. if err != nil {
  61. log.Errorf("scanner server stopped with error: %s", err.Error())
  62. }
  63. log.Info("scanner server stopped")
  64. wg.Done()
  65. }
  66. func startTickEvent(tickExecutor *tickevent.Executor) {
  67. // TODO 可以考虑增加配置文件,配置这些任务间隔时间
  68. tickExecutor.Start(tickevent.NewBatchAllAgentCheckCache(), 5*60*1000, tickevent.StartOption{RandomStartDelayMs: 60 * 1000})
  69. tickExecutor.Start(tickevent.NewBatchCheckAllObject(), 5*60*1000, tickevent.StartOption{RandomStartDelayMs: 60 * 1000})
  70. tickExecutor.Start(tickevent.NewBatchCheckAllRepCount(), 5*60*1000, tickevent.StartOption{RandomStartDelayMs: 60 * 1000})
  71. tickExecutor.Start(tickevent.NewBatchCheckAllStorage(), 5*60*1000, tickevent.StartOption{RandomStartDelayMs: 60 * 1000})
  72. //tickExecutor.Start(tickevent.NewCheckAgentState(), 5*60*1000, tickevent.StartOption{RandomFirstStartDelayMs: 60 * 1000})
  73. tickExecutor.Start(tickevent.NewCheckCache(), 5*60*1000, tickevent.StartOption{RandomStartDelayMs: 60 * 1000})
  74. }

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