保存更改记录;优化同步作业日志级别
This commit is contained in:
24
actions/changes.go
Normal file
24
actions/changes.go
Normal 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
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
// 旧节点信息
|
||||
|
||||
@@ -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
17
model/change.go
Normal 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"
|
||||
}
|
||||
Reference in New Issue
Block a user