添加清空网关配置功能,更新主程序以支持清空命令
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
## TODO
|
||||
|
||||
update 操作:
|
||||
- 如果网关是禁用状态,则清空配置(目前是只查询启用的节点
|
||||
|
||||
此实现目前并不是完全并发安全的:
|
||||
- 目前事务等级没有对 cityhash 表的 offset 字段做防丢失,并发操作可能会出问题
|
||||
24
actions/clear.go
Normal file
24
actions/clear.go
Normal 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
|
||||
}
|
||||
@@ -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]
|
||||
|
||||
@@ -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
23
main.go
@@ -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("请输入正确的命令参数")
|
||||
|
||||
Reference in New Issue
Block a user