添加清空网关配置功能,更新主程序以支持清空命令
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
|
update 操作:
|
||||||
|
- 如果网关是禁用状态,则清空配置(目前是只查询启用的节点
|
||||||
|
|
||||||
此实现目前并不是完全并发安全的:
|
此实现目前并不是完全并发安全的:
|
||||||
- 目前事务等级没有对 cityhash 表的 offset 字段做防丢失,并发操作可能会出问题
|
- 目前事务等级没有对 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/clients/jd"
|
||||||
"zzman/model"
|
"zzman/model"
|
||||||
u "zzman/util"
|
u "zzman/util"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type UpdateArgs struct {
|
type UpdateArgs struct {
|
||||||
Mock bool
|
Mock bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func Update(tx *gorm.DB, args ...UpdateArgs) error {
|
func Update(args ...UpdateArgs) error {
|
||||||
|
var tx = model.DB
|
||||||
var arg UpdateArgs
|
var arg UpdateArgs
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
arg = args[0]
|
arg = args[0]
|
||||||
|
|||||||
@@ -43,6 +43,33 @@ func GatewayConfigSet(version int, macaddr string, edges []EdgeInfo) error {
|
|||||||
return nil
|
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 {
|
type GatewayConfigSetReq struct {
|
||||||
Macaddr string `json:"macaddr"`
|
Macaddr string `json:"macaddr"`
|
||||||
Config GateConfigSetReqConfig `json:"config"`
|
Config GateConfigSetReqConfig `json:"config"`
|
||||||
|
|||||||
23
main.go
23
main.go
@@ -37,8 +37,10 @@ func main() {
|
|||||||
println("缺少命令参数")
|
println("缺少命令参数")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch {
|
switch os.Args[1] {
|
||||||
case os.Args[1] == "sync":
|
|
||||||
|
// 同步城市节点
|
||||||
|
case "sync":
|
||||||
err := actions.Sync()
|
err := actions.Sync()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(fmt.Sprintf("同步城市节点数据失败:%s", err.Error()))
|
slog.Error(fmt.Sprintf("同步城市节点数据失败:%s", err.Error()))
|
||||||
@@ -47,8 +49,8 @@ func main() {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
||||||
case os.Args[1] == "update":
|
// 更新网关
|
||||||
|
case "update":
|
||||||
var args actions.UpdateArgs
|
var args actions.UpdateArgs
|
||||||
if len(os.Args) >= 3 {
|
if len(os.Args) >= 3 {
|
||||||
if slices.Contains(os.Args, "--mock") {
|
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 {
|
if err != nil {
|
||||||
slog.Error(fmt.Sprintf("更新节点失败:%s", err.Error()))
|
slog.Error(fmt.Sprintf("更新节点失败:%s", err.Error()))
|
||||||
} else {
|
} else {
|
||||||
slog.Info("更新节点成功")
|
slog.Info("更新节点成功")
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
|
||||||
|
// 清空网关
|
||||||
|
case "clear":
|
||||||
|
err := actions.Clear()
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(fmt.Sprintf("清空节点失败:%s", err.Error()))
|
||||||
|
} else {
|
||||||
|
slog.Info("清空节点成功")
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
println("请输入正确的命令参数")
|
println("请输入正确的命令参数")
|
||||||
|
|||||||
Reference in New Issue
Block a user