task.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package task
  2. import (
  3. "dsbqj-admin/model/mongo/version"
  4. "dsbqj-admin/pkg/util"
  5. "github.com/kamva/mgm/v3"
  6. "go.mongodb.org/mongo-driver/bson"
  7. "sync"
  8. "time"
  9. )
  10. var VersionTask *Versions
  11. type Versions struct {
  12. sync.Mutex
  13. VList util.SafeArray[*version.Version]
  14. VMap util.SafeMap[string, *version.Version]
  15. }
  16. func Init() *Versions {
  17. VersionTask = new(Versions)
  18. return VersionTask
  19. }
  20. func (this *Versions) Run() {
  21. // 每5分钟执行一次
  22. go func() {
  23. for {
  24. this.Reload()
  25. time.Sleep(5 * time.Minute)
  26. }
  27. }()
  28. }
  29. func (this *Versions) Reload() {
  30. var versions = make([]*version.Version, 0)
  31. err := mgm.Coll(&version.Version{}).SimpleFind(&versions, bson.M{})
  32. if err == nil {
  33. // 重置
  34. this.VList.Flush()
  35. this.VList.PushMany(versions)
  36. this.VMap.Clear()
  37. for _, v := range versions {
  38. this.VMap.Set(v.Version, v)
  39. }
  40. }
  41. }
  42. func (this *Versions) Check(version string) *version.Version {
  43. data, ok := this.VMap.Get(version)
  44. if !ok { // 遍历列表
  45. for _, v := range this.VList.View() {
  46. if v.Default {
  47. data = v
  48. break
  49. }
  50. }
  51. }
  52. return data
  53. }
  54. func (this *Versions) Servers() []*version.Version {
  55. return this.VList.View()
  56. }