保存更改记录;优化同步作业日志级别

This commit is contained in:
2025-08-21 15:58:34 +08:00
parent 261ee88a4b
commit 89adb4f8a4
5 changed files with 66 additions and 2 deletions

24
actions/changes.go Normal file
View File

@@ -0,0 +1,24 @@
package actions
import (
"zzman/model"
"gorm.io/gorm"
)
func RecordChange(tx *gorm.DB, changes []model.Change) error {
if len(changes) == 0 {
return nil
}
batchSize := 1000
for i := 0; i < len(changes); i += batchSize {
end := min(i+batchSize, len(changes))
batch := changes[i:end]
err := tx.Create(&batch).Error
if err != nil {
return err
}
}
return nil
}

View File

@@ -42,6 +42,7 @@ func SaveEdges(tx *gorm.DB, edges []model.Edge) error {
Columns: []clause.Column{{Name: "macaddr"}},
UpdateAll: true,
}).Create(&batch).Error
if err != nil {
return fmt.Errorf("failed to save edges batch %d-%d: %w", i, end-1, err)
}

View File

@@ -25,7 +25,7 @@ func Sync() (err error) {
// 获取所有城市的节点数据
for i, city := range cities {
slog.Info(fmt.Sprintf("正在同步城市,城市:%s哈希%s", city.Name, city.Hash))
slog.Debug(fmt.Sprintf("正在同步城市,城市:%s哈希%s", city.Name, city.Hash))
// 新节点信息
resp, err := jd.EdgeDevice(jd.EdgeDeviceReq{
@@ -37,7 +37,7 @@ func Sync() (err error) {
return fmt.Errorf("获取城市 %s:%s 的边缘设备失败: %w", city.Name, city.Hash, err)
}
var newEdges = resp.Edges
slog.Info(fmt.Sprintf("获取节点数据完成,城市:%s节点数%d", city.Name, len(newEdges)))
slog.Debug(fmt.Sprintf("获取节点数据完成,城市:%s节点数%d", city.Name, len(newEdges)))
err = model.DB.Transaction(func(tx *gorm.DB) error {
// 旧节点信息

View File

@@ -4,6 +4,7 @@ import (
"fmt"
"log/slog"
"strconv"
"time"
"zzman/clients/jd"
"zzman/model"
u "zzman/util"
@@ -29,6 +30,8 @@ func Update(args ...UpdateArgs) error {
}
func update(tx *gorm.DB, arg UpdateArgs) error {
var now = time.Now()
gateways, err := FindGateways(tx)
if err != nil {
return fmt.Errorf("获取所有网关失败:%w", err)
@@ -110,6 +113,7 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
// 更新网关配置
var configs2Create []model.Config
var configs2Update []model.ConfigUpdate
var changes []model.Change
for iGateway, gateway := range gateways2Update {
@@ -125,6 +129,13 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
IsChange: u.P(0),
})
changes = append(changes, model.Change{
Time: now,
Gateway: gateway.Macaddr,
OldEdge: oldConfig.Macaddr,
NewEdge: newConfig.Macaddr,
})
newConfigs[gateway][iCity] = ConfigInfo{
Type: 1, // 更新
Item: jd.EdgeInfo{
@@ -146,6 +157,13 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
InnerIp: fmt.Sprintf("172.16.%d.%d", gateway.Id, iCity+2),
})
changes = append(changes, model.Change{
Time: now,
Gateway: gateway.Macaddr,
OldEdge: "",
NewEdge: newConfig.Macaddr,
})
newConfigs[gateway][iCity] = ConfigInfo{
Type: 2, // 新增
Item: jd.EdgeInfo{
@@ -168,6 +186,10 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
if err != nil {
return fmt.Errorf("更新城市 %s 的偏移量失败:%w", city.Name, err)
}
err = RecordChange(tx, changes)
if err != nil {
return fmt.Errorf("记录变更失败:%w", err)
}
}
// 提交所有网关配置到云端

17
model/change.go Normal file
View File

@@ -0,0 +1,17 @@
package model
import "time"
type Change struct {
Id int `gorm:"column:id;primaryKey"`
Time time.Time `gorm:"column:time"`
Gateway string `gorm:"column:macaddr"`
OldEdge string `gorm:"column:edge_old"`
NewEdge string `gorm:"column:edge_new"`
Network string `gorm:"column:network"`
Info string `gorm:"column:info"`
}
func (Change) TableName() string {
return "change"
}