保存更改记录;优化同步作业日志级别
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"}},
|
Columns: []clause.Column{{Name: "macaddr"}},
|
||||||
UpdateAll: true,
|
UpdateAll: true,
|
||||||
}).Create(&batch).Error
|
}).Create(&batch).Error
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to save edges batch %d-%d: %w", i, end-1, err)
|
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 {
|
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{
|
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)
|
return fmt.Errorf("获取城市 %s:%s 的边缘设备失败: %w", city.Name, city.Hash, err)
|
||||||
}
|
}
|
||||||
var newEdges = resp.Edges
|
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 {
|
err = model.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
// 旧节点信息
|
// 旧节点信息
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"time"
|
||||||
"zzman/clients/jd"
|
"zzman/clients/jd"
|
||||||
"zzman/model"
|
"zzman/model"
|
||||||
u "zzman/util"
|
u "zzman/util"
|
||||||
@@ -29,6 +30,8 @@ func Update(args ...UpdateArgs) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func update(tx *gorm.DB, arg UpdateArgs) error {
|
func update(tx *gorm.DB, arg UpdateArgs) error {
|
||||||
|
var now = time.Now()
|
||||||
|
|
||||||
gateways, err := FindGateways(tx)
|
gateways, err := FindGateways(tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("获取所有网关失败:%w", err)
|
return fmt.Errorf("获取所有网关失败:%w", err)
|
||||||
@@ -110,6 +113,7 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
|
|||||||
// 更新网关配置
|
// 更新网关配置
|
||||||
var configs2Create []model.Config
|
var configs2Create []model.Config
|
||||||
var configs2Update []model.ConfigUpdate
|
var configs2Update []model.ConfigUpdate
|
||||||
|
var changes []model.Change
|
||||||
|
|
||||||
for iGateway, gateway := range gateways2Update {
|
for iGateway, gateway := range gateways2Update {
|
||||||
|
|
||||||
@@ -125,6 +129,13 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
|
|||||||
IsChange: u.P(0),
|
IsChange: u.P(0),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
changes = append(changes, model.Change{
|
||||||
|
Time: now,
|
||||||
|
Gateway: gateway.Macaddr,
|
||||||
|
OldEdge: oldConfig.Macaddr,
|
||||||
|
NewEdge: newConfig.Macaddr,
|
||||||
|
})
|
||||||
|
|
||||||
newConfigs[gateway][iCity] = ConfigInfo{
|
newConfigs[gateway][iCity] = ConfigInfo{
|
||||||
Type: 1, // 更新
|
Type: 1, // 更新
|
||||||
Item: jd.EdgeInfo{
|
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),
|
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{
|
newConfigs[gateway][iCity] = ConfigInfo{
|
||||||
Type: 2, // 新增
|
Type: 2, // 新增
|
||||||
Item: jd.EdgeInfo{
|
Item: jd.EdgeInfo{
|
||||||
@@ -168,6 +186,10 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("更新城市 %s 的偏移量失败:%w", city.Name, err)
|
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