auto_reload.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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 err := <-w.Error:
  39. logrus.Errorf("WatchDevConfig:发生错误:%s", err.Error())
  40. case <-w.Closed:
  41. return
  42. }
  43. }
  44. }()
  45. if err := w.Add(util.GetPath(1)); err != nil {
  46. logrus.Errorf("WatchDevConfig:Add(conf)发生错误:%s", err.Error())
  47. }
  48. if err := w.Start(time.Second); err != nil {
  49. logrus.Errorf("WatchDevConfig:Start发生错误:%s", err.Error())
  50. }
  51. return 0
  52. }
  53. func WatchModelConfig(args ...interface{}) interface{} {
  54. w := watcher.New()
  55. w.SetMaxEvents(20)
  56. w.FilterOps(watcher.Create, watcher.Write, watcher.Remove)
  57. go func() {
  58. for {
  59. select {
  60. case event := <-w.Event:
  61. if !event.IsDir() {
  62. ok, _ := regexp.MatchString(`[1-9].*json`, event.Name())
  63. if ok {
  64. strList := strings.Split(event.Name(), ".")
  65. tid, _ := strconv.Atoi(strList[0])
  66. switch event.Op {
  67. case watcher.Create:
  68. GetDeviceMgr().UpdateModel(uint16(tid), 2)
  69. case watcher.Write:
  70. GetDeviceMgr().UpdateModel(uint16(tid), 1)
  71. case watcher.Remove:
  72. GetDeviceMgr().UpdateModel(uint16(tid), 0)
  73. default:
  74. }
  75. }
  76. }
  77. case err := <-w.Error:
  78. logrus.Errorf("WatchModelConfig:发生错误:%s", err.Error())
  79. case <-w.Closed:
  80. return
  81. }
  82. }
  83. }()
  84. if err := w.Add(util.GetPath(2)); err != nil {
  85. logrus.Errorf("WatchModelConfig:Add(conf)发生错误:%s", err.Error())
  86. }
  87. if err := w.Start(time.Second); err != nil {
  88. logrus.Errorf("WatchModelConfig:Start发生错误:%s", err.Error())
  89. }
  90. return 0
  91. }
  92. func WatchConfConfig(args ...interface{}) interface{} {
  93. w := watcher.New()
  94. w.SetMaxEvents(20)
  95. w.FilterOps(watcher.Create, watcher.Write)
  96. go func() {
  97. for {
  98. select {
  99. case event := <-w.Event:
  100. if !event.IsDir() {
  101. if event.Name() == "app.json" {
  102. if event.Op == watcher.Create || event.Op == watcher.Write {
  103. UpdateAppConfig()
  104. }
  105. }
  106. if event.Name() == "serial.json" {
  107. if event.Op == watcher.Create || event.Op == watcher.Write {
  108. UpdateSerialConfig()
  109. }
  110. }
  111. }
  112. case err := <-w.Error:
  113. logrus.Errorf("WatchConfConfig:发生错误:%s", err.Error())
  114. case <-w.Closed:
  115. return
  116. }
  117. }
  118. }()
  119. if err := w.Add(util.GetPath(0)); err != nil {
  120. logrus.Errorf("WatchConfConfig:Add(conf)发生错误:%s", err.Error())
  121. }
  122. if err := w.Start(time.Second); err != nil {
  123. logrus.Errorf("WatchConfConfig:Start发生错误:%s", err.Error())
  124. }
  125. return 0
  126. }
  127. func UpdateAppConfig() {
  128. if err := loadAppConfig(); err != nil {
  129. logrus.Errorf("UpdateAppConfig:重新加载app.json文件失败:%s", err.Error())
  130. return
  131. }
  132. }
  133. func UpdateSerialConfig() {
  134. if err := loadSerialConfig(); err != nil {
  135. logrus.Errorf("UpdateSerialConfig:重新加载serial.json文件失败:%s", err.Error())
  136. return
  137. }
  138. GetSerialMgr().AddSerialPorts(serialConfig.Serial)
  139. }