| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- package jobs
- import (
- "encoding/json"
- "fmt"
- "fwh-toolbox-server/ext/api/fwh_pro"
- "fwh-toolbox-server/logger"
- "fwh-toolbox-server/types"
- "fwh-toolbox-server/utils/files"
- "io"
- "net/http"
- "os"
- "go.uber.org/zap"
- )
- type AlarmSnapshotInfo struct {
- Id uint64 `json:"id"`
- CodeType int `json:"codeType"` // 作用未知
- FileName string `json:"fileName"`
- FileUrl string `json:"fileUrl"`
- LinkId string `json:"linkId"` // site SN
- LogTime string `json:"logTime"` // format YYYY-MM-DD
- SerialNumber string `json:"serialNumber"`
- StartTime string `json:"startTime"` // format YYYY-MM-DD HH:mm:SS
- EndTime string `json:"endTime"` // format YYYY-MM-DD HH:mm:SS
- Status int `json:"status"` // 1-完成
- CompleteTime string `json:"completeTime"` // format YYYY-MM-DD HH:mm:SS
- }
- type AlarmSnapshotListResponse = types.FwhPageResponse[AlarmSnapshotInfo]
- // 解析
- func handleAlarmSnapshot(sn string, logTime string, page int) (uint64, []AlarmSnapshotInfo, error) {
- // 查询告警快照数据
- resByte, err := fwh_pro.QueryAlarmSnapshotInfo(sn, logTime, page)
- if err != nil {
- return 0, nil, fmt.Errorf("[handleAlarmSnapshot] %s", err.Error())
- }
- var alarmSnapshotRes AlarmSnapshotListResponse
- // 反序列化(unmarshal)
- jsonErr := json.Unmarshal(resByte, &alarmSnapshotRes)
- if jsonErr != nil {
- return 0, nil, fmt.Errorf("[handleAlarmSnapshot] %s", jsonErr)
- }
- return alarmSnapshotRes.Total, alarmSnapshotRes.Result, nil
- }
- // 获取告警快照
- // 从FHW后端请求快照文件后,处理并放入数据库
- // logTime 格式 YYYY-MM-DD
- func GetAlarmSnapshot(sn, logTime string) error {
- // 请求快照信息列表
- var page int = 1
- snapshotList := make([]AlarmSnapshotInfo, 0)
- total, dataList, err := handleAlarmSnapshot(sn, logTime, page)
- if err != nil {
- return fmt.Errorf("[GetAlarmSnapshot] %s", err.Error())
- }
- snapshotList = append(snapshotList, dataList...)
- for uint64(len(snapshotList)) < total {
- page = page + 1
- _, dataList, err = handleAlarmSnapshot(sn, logTime, page)
- if err != nil {
- return fmt.Errorf("[GetAlarmSnapshot] %s", err.Error())
- }
- snapshotList = append(snapshotList, dataList...)
- }
- // 创建临时目录存储下载和解压数据
- tempDir, err := os.MkdirTemp("", "fwhtb-alarmSnapshot-*")
- if err != nil {
- logger.Std.Printf("创建临时目录失败: %v\n", err)
- return err
- }
- defer os.RemoveAll(tempDir) // 程序结束时清理临时目录
- for _, info := range snapshotList {
- // 下载快照文件
- if err = files.DownloadFile(info.FileUrl, tempDir+"/"+info.FileName); err != nil {
- return err
- }
- // 解析文件并写入数据库
- }
- return nil
- }
- func downloadAlarmSnapshotFile(url, filepath string) error {
- // 发送 HTTP GET 请求
- resp, err := http.Get(url)
- if err != nil {
- return err
- }
- defer resp.Body.Close()
- // 创建本地文件
- out, err := os.Create(filepath)
- if err != nil {
- return err
- }
- defer out.Close()
- // 将响应内容写入文件
- _, err = io.Copy(out, resp.Body)
- return err
- }
|