getAlarmSnapshot.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package jobs
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "fwh-toolbox-server/ext/api/fwh_pro"
  6. "fwh-toolbox-server/types"
  7. "io"
  8. "net/http"
  9. "os"
  10. )
  11. type AlarmSnapshotInfo struct {
  12. Id uint64 `json:"id"`
  13. CodeType int `json:"codeType"` // 作用未知
  14. FileName string `json:"fileName"`
  15. FileUrl string `json:"fileUrl"`
  16. LinkId string `json:"linkId"` // site SN
  17. LogTime string `json:"logTime"` // format YYYY-MM-DD
  18. SerialNumber string `json:"serialNumber"`
  19. StartTime string `json:"startTime"` // format YYYY-MM-DD HH:mm:SS
  20. EndTime string `json:"endTime"` // format YYYY-MM-DD HH:mm:SS
  21. Status int `json:"status"` // 1-完成
  22. CompleteTime string `json:"completeTime"` // format YYYY-MM-DD HH:mm:SS
  23. }
  24. type AlarmSnapshotListResponse = types.FwhPageResponse[AlarmSnapshotInfo]
  25. // 解析
  26. func handleAlarmSnapshot(sn, logTime, page) (uint64, []AlarmSnapshotInfo, error) {
  27. // 查询告警快照数据
  28. resByte, err := fwh_pro.QueryAlarmSnapshotInfo(sn, logTime, page)
  29. if err != nil {
  30. return 0, nil, fmt.Errorf("[handleAlarmSnapshot] %s", err.Error())
  31. }
  32. var alarmSnapshotRes AlarmSnapshotListResponse
  33. // 反序列化(unmarshal)
  34. jsonErr := json.Unmarshal(resByte, &alarmSnapshotRes)
  35. if jsonErr != nil {
  36. return 0, nil, fmt.Errorf("[handleAlarmSnapshot] %s", jsonErr)
  37. }
  38. return alarmSnapshotRes.Total, alarmSnapshotRes.Result, nil
  39. }
  40. // 获取告警快照
  41. // 从FHW后端请求快照文件后,处理并放入数据库
  42. // logTime 格式 YYYY-MM-DD
  43. func GetAlarmSnapshot(sn, logTime string) error {
  44. // 请求快照信息列表
  45. var page int = 1
  46. snapshotList := make([]AlarmSnapshotInfo, 0)
  47. total, dataList, err := handleAlarmSnapshot(sn, logTime, page)
  48. if err != nil {
  49. return fmt.Errorf("[GetAlarmSnapshot] %s", err.Error())
  50. }
  51. snapshotList = append(snapshotList, dataList...)
  52. for uint64(len(snapshotList)) < total {
  53. page = page + 1
  54. _, dataList, err = handleAlarmSnapshot(sn, logTime, page)
  55. if err != nil {
  56. return fmt.Errorf("[GetAlarmSnapshot] %s", err.Error())
  57. }
  58. snapshotList = append(snapshotList, dataList...)
  59. }
  60. // 下载快照文件
  61. // 解析文件并写入数据库
  62. return nil
  63. }
  64. func downloadAlarmSnapshotFile(url, filepath string) error {
  65. // 发送 HTTP GET 请求
  66. resp, err := http.Get(url)
  67. if err != nil {
  68. return err
  69. }
  70. defer resp.Body.Close()
  71. // 创建本地文件
  72. out, err := os.Create(filepath)
  73. if err != nil {
  74. return err
  75. }
  76. defer out.Close()
  77. // 将响应内容写入文件
  78. _, err = io.Copy(out, resp.Body)
  79. return err
  80. }