diff --git a/README.md b/README.md index 962091e..e6fbf4d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ ## TODO +update 操作: +- 如果网关是禁用状态,则清空配置(目前是只查询启用的节点 + 此实现目前并不是完全并发安全的: - 目前事务等级没有对 cityhash 表的 offset 字段做防丢失,并发操作可能会出问题 \ No newline at end of file diff --git a/actions/clear.go b/actions/clear.go new file mode 100644 index 0000000..e184312 --- /dev/null +++ b/actions/clear.go @@ -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 +} diff --git a/actions/update.go b/actions/update.go index 8cc51ad..cc238d2 100644 --- a/actions/update.go +++ b/actions/update.go @@ -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] diff --git a/clients/jd/getway-config-set.go b/clients/jd/getway-config-set.go index 8cb294d..47f44c1 100644 --- a/clients/jd/getway-config-set.go +++ b/clients/jd/getway-config-set.go @@ -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"` diff --git a/main.go b/main.go index ceea2f4..fcfd043 100644 --- a/main.go +++ b/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("请输入正确的命令参数")