添加清空网关配置功能,更新主程序以支持清空命令

This commit is contained in:
2025-08-11 09:34:13 +08:00
parent 3782feaf85
commit 74ac39a926
5 changed files with 74 additions and 8 deletions

View File

@@ -1,4 +1,7 @@
## TODO
update 操作:
- 如果网关是禁用状态,则清空配置(目前是只查询启用的节点
此实现目前并不是完全并发安全的:
- 目前事务等级没有对 cityhash 表的 offset 字段做防丢失,并发操作可能会出问题

24
actions/clear.go Normal file
View File

@@ -0,0 +1,24 @@
package actions
import (
"fmt"
"zzman/clients/jd"
"zzman/model"
)
func Clear() error {
gateways, err := FindGateways(model.DB)
if err != nil {
return fmt.Errorf("清空网关数据失败:%w", err)
}
for _, gateway := range gateways {
err := jd.GatewayConfigClear(gateway.Macaddr)
if err != nil {
return fmt.Errorf("清空网关 %s 配置失败:%w", gateway.Macaddr, err)
}
}
return nil
}

View File

@@ -7,15 +7,14 @@ import (
"zzman/clients/jd"
"zzman/model"
u "zzman/util"
"gorm.io/gorm"
)
type UpdateArgs struct {
Mock bool
}
func Update(tx *gorm.DB, args ...UpdateArgs) error {
func Update(args ...UpdateArgs) error {
var tx = model.DB
var arg UpdateArgs
if len(args) > 0 {
arg = args[0]

View File

@@ -43,6 +43,33 @@ func GatewayConfigSet(version int, macaddr string, edges []EdgeInfo) error {
return nil
}
func GatewayConfigClear(macaddr string) error {
if macaddr == "" {
return fmt.Errorf("macaddr 不能为空")
}
req := GatewayConfigSetReq{
Macaddr: macaddr,
Config: GateConfigSetReqConfig{
Id: 1,
Rules: []GateConfigSetReqRule{
{
Enable: false,
Edge: []string{"", "", "", ""},
Network: []string{},
Cityhash: "",
},
},
},
}
if _, err := Post("/gateway/config/set", req); err != nil {
return fmt.Errorf("设置网关配置失败: %v", err)
}
return nil
}
type GatewayConfigSetReq struct {
Macaddr string `json:"macaddr"`
Config GateConfigSetReqConfig `json:"config"`

23
main.go
View File

@@ -37,8 +37,10 @@ func main() {
println("缺少命令参数")
return
}
switch {
case os.Args[1] == "sync":
switch os.Args[1] {
// 同步城市节点
case "sync":
err := actions.Sync()
if err != nil {
slog.Error(fmt.Sprintf("同步城市节点数据失败:%s", err.Error()))
@@ -47,8 +49,8 @@ func main() {
}
return
case os.Args[1] == "update":
// 更新网关
case "update":
var args actions.UpdateArgs
if len(os.Args) >= 3 {
if slices.Contains(os.Args, "--mock") {
@@ -56,12 +58,23 @@ func main() {
}
}
err := actions.Update(model.DB, args)
err := actions.Update(args)
if err != nil {
slog.Error(fmt.Sprintf("更新节点失败:%s", err.Error()))
} else {
slog.Info("更新节点成功")
}
return
// 清空网关
case "clear":
err := actions.Clear()
if err != nil {
slog.Error(fmt.Sprintf("清空节点失败:%s", err.Error()))
} else {
slog.Info("清空节点成功")
}
return
}
println("请输入正确的命令参数")