auto_reload.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package main
  2. import (
  3. "regexp"
  4. "strconv"
  5. "strings"
  6. "time"
  7. "github.com/radovskyb/watcher"
  8. "github.com/sirupsen/logrus"
  9. "lc/common/util"
  10. )
  11. func WatchDevConfig(args ...interface{}) interface{} {
  12. w := watcher.New()
  13. w.SetMaxEvents(20)
  14. w.FilterOps(watcher.Create, watcher.Write, watcher.Remove)
  15. go func() {
  16. for {
  17. select {
  18. case event := <-w.Event:
  19. if !event.IsDir() {
  20. ok, _ := regexp.MatchString(`[1-9].*json`, event.Name())
  21. if ok {
  22. strList := strings.Split(event.Name(), ".")
  23. code, _ := strconv.Atoi(strList[0])
  24. switch event.Op {
  25. case watcher.Create, watcher.Write:
  26. rtuArr, err := LoadDev(uint8(code))
  27. if err != nil {
  28. logrus.Errorf("加载RTU文件[%s]失败:%s", strconv.Itoa(code)+".json", err.Error())
  29. } else {
  30. GetDeviceMgr().UpdateDevices(uint8(code), rtuArr)
  31. }
  32. case watcher.Remove:
  33. GetDeviceMgr().UpdateDevices(uint8(code), nil)
  34. default:
  35. }
  36. }
  37. }
  38. case <-w.Closed:
  39. return
  40. }
  41. }
  42. }()
  43. if err := w.Add(util.GetPath(1)); err != nil {
  44. return 0
  45. }
  46. if err := w.Start(time.Second); err != nil {
  47. return 0
  48. }
  49. return 0
  50. }
  51. func WatchModelConfig(args ...interface{}) interface{} {
  52. w := watcher.New()
  53. w.SetMaxEvents(20)
  54. w.FilterOps(watcher.Create, watcher.Write, watcher.Remove)
  55. go func() {
  56. for {
  57. select {
  58. case event := <-w.Event:
  59. if !event.IsDir() {
  60. ok, _ := regexp.MatchString(`[1-9].*json`, event.Name())
  61. if ok {
  62. strList := strings.Split(event.Name(), ".")
  63. tid, _ := strconv.Atoi(strList[0])
  64. switch event.Op {
  65. case watcher.Create:
  66. GetDeviceMgr().UpdateModel(uint16(tid), 2)
  67. case watcher.Write:
  68. GetDeviceMgr().UpdateModel(uint16(tid), 1)
  69. case watcher.Remove:
  70. GetDeviceMgr().UpdateModel(uint16(tid), 0)
  71. default:
  72. }
  73. }
  74. }
  75. case err := <-w.Error:
  76. logrus.Errorf("WatchModelConfig:发生错误:%s", err.Error())
  77. case <-w.Closed:
  78. return
  79. }
  80. }
  81. }()
  82. if err := w.Add(util.GetPath(2)); err != nil {
  83. logrus.Errorf("WatchModelConfig:Add(conf)发生错误:%s", err.Error())
  84. }
  85. if err := w.Start(time.Second); err != nil {
  86. logrus.Errorf("WatchModelConfig:Start发生错误:%s", err.Error())
  87. }
  88. return 0
  89. }
  90. func WatchConfConfig(args ...interface{}) interface{} {
  91. w := watcher.New()
  92. w.SetMaxEvents(20)
  93. w.FilterOps(watcher.Create, watcher.Write)
  94. go func() {
  95. for {
  96. select {
  97. case event := <-w.Event:
  98. if !event.IsDir() {
  99. if event.Name() == "app.json" {
  100. if event.Op == watcher.Create || event.Op == watcher.Write {
  101. UpdateAppConfig()
  102. }
  103. }
  104. if event.Name() == "serial.json" {
  105. if event.Op == watcher.Create || event.Op == watcher.Write {
  106. UpdateSerialConfig()
  107. }
  108. }
  109. }
  110. case err := <-w.Error:
  111. logrus.Errorf("WatchConfConfig:发生错误:%s", err.Error())
  112. case <-w.Closed:
  113. return
  114. }
  115. }
  116. }()
  117. if err := w.Add(util.GetPath(0)); err != nil {
  118. logrus.Errorf("WatchConfConfig:Add(conf)发生错误:%s", err.Error())
  119. }
  120. if err := w.Start(time.Second); err != nil {
  121. logrus.Errorf("WatchConfConfig:Start发生错误:%s", err.Error())
  122. }
  123. return 0
  124. }
  125. func UpdateAppConfig() {
  126. if err := loadAppConfig(); err != nil {
  127. logrus.Errorf("UpdateAppConfig:重新加载app.json文件失败:%s", err.Error())
  128. return
  129. }
  130. }
  131. func UpdateSerialConfig() {
  132. if err := loadSerialConfig(); err != nil {
  133. logrus.Errorf("UpdateSerialConfig:重新加载serial.json文件失败:%s", err.Error())
  134. return
  135. }
  136. GetSerialMgr().AddSerialPorts(serialConfig.Serial)
  137. }