d_service.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package domain
  2. import (
  3. "cicv-data-closedloop/common/config/c_log"
  4. "cicv-data-closedloop/common/entity"
  5. "cicv-data-closedloop/common/util"
  6. "os"
  7. "strings"
  8. "time"
  9. )
  10. func MoveFromDataToCopy(faultTime string, bagDataDir string, sourceBag string, bagCopyDir string) {
  11. dir := GetCopyDir(bagCopyDir, faultTime)
  12. util.CreateDir(dir)
  13. targetBag := strings.Replace(sourceBag, bagDataDir, dir, 1)
  14. err := os.Rename(sourceBag, targetBag)
  15. if err != nil {
  16. return
  17. }
  18. c_log.GlobalLogger.Infof("移动bag包 【%v】->【%v】", sourceBag, targetBag)
  19. }
  20. func GetCopyDir(bagDataDir string, faultTime string) string {
  21. return bagDataDir + faultTime + "/"
  22. }
  23. // 如果 Copy目录下的包不够,则补充一些
  24. func SupplyCopyBags(bagDataDir string, bagCopyDir string, currentTimeWindow entity.TimeWindow) {
  25. // 如果bag包没有达到length,补充几个
  26. copyBags, _ := util.ListAbsolutePathWithSuffixAndSort(GetCopyDir(bagCopyDir, currentTimeWindow.FaultTime), ".bag")
  27. copyBagsLength := len(copyBags)
  28. if copyBagsLength >= currentTimeWindow.Length {
  29. return
  30. }
  31. // 等待差距时间
  32. gap := currentTimeWindow.Length - copyBagsLength
  33. time.Sleep(time.Duration(gap) * time.Second)
  34. // 获取data目录下的包列表
  35. dataBags, _ := util.ListAbsolutePathWithSuffixAndSort(bagDataDir, ".bag")
  36. c_log.GlobalLogger.Info("故障 ", currentTimeWindow.FaultTime, "需要从data目录找回 ", gap, " 个 bag 包")
  37. for _, bag := range dataBags {
  38. bagTime := util.GetBagTime(bag)
  39. // 必须在区间内
  40. if util.TimeCustom1GreaterEqualThanTimeCustom2(bagTime, currentTimeWindow.FaultTime) {
  41. MoveFromDataToCopy(currentTimeWindow.FaultTime, bagDataDir, bag, bagCopyDir)
  42. gap = gap - 1
  43. if gap == 0 {
  44. break
  45. }
  46. }
  47. }
  48. }