临时添加混拨配置创建功能
This commit is contained in:
52
README.md
52
README.md
@@ -3,43 +3,23 @@
|
|||||||
此实现目前并不是完全并发安全的:
|
此实现目前并不是完全并发安全的:
|
||||||
- 目前事务等级没有对 cityhash 表的 offset 字段做防丢失,并发操作可能会出问题
|
- 目前事务等级没有对 cityhash 表的 offset 字段做防丢失,并发操作可能会出问题
|
||||||
|
|
||||||
## 模块逻辑
|
|
||||||
|
|
||||||
**更新网关配置**
|
|
||||||
|
|
||||||
```
|
|
||||||
获取所有网关
|
|
||||||
获取所有配置
|
|
||||||
|
|
||||||
构建配置表 `map[网关][配置]`
|
|
||||||
|
|
||||||
循环配置:
|
|
||||||
如果配置项需要更新,记录更新信息
|
|
||||||
|
|
||||||
循环更新信息(加速数据库查询)
|
|
||||||
|
|
||||||
上传配置到云端
|
|
||||||
```
|
|
||||||
|
|
||||||
**同步节点信息(全量更新)**
|
|
||||||
|
|
||||||
```
|
|
||||||
获取所有启用城市
|
|
||||||
循环城市:
|
|
||||||
获取云端节点信息
|
|
||||||
获取本地节点信息
|
|
||||||
|
|
||||||
更新列表 = 空
|
|
||||||
删除列表 = 本地节点
|
|
||||||
循环云端节点:
|
|
||||||
更新列表 <= 云端节点
|
|
||||||
删除列表 x= 本地节点(同云端 macaddr)
|
|
||||||
|
|
||||||
更新并(软)删除节点信息
|
|
||||||
```
|
|
||||||
|
|
||||||
### 统一节点调度
|
### 统一节点调度
|
||||||
|
|
||||||
节点上下线:
|
节点上下线:
|
||||||
|
|
||||||
提供一个接口用来为节点加解锁
|
提供一个接口用来为节点加解锁
|
||||||
|
|
||||||
|
## 目录结构
|
||||||
|
|
||||||
|
整体是一个 go 项目,编译后在服务器执行
|
||||||
|
|
||||||
|
```
|
||||||
|
docs/ 相关文档
|
||||||
|
|
||||||
|
actions/ 程序功能
|
||||||
|
clients/ 外部 api 调用
|
||||||
|
model/ 数据库模型
|
||||||
|
util/ 工具类
|
||||||
|
|
||||||
|
scripts/ shell 脚本
|
||||||
|
```
|
||||||
@@ -33,3 +33,16 @@ func UpdateConfigs(tx *gorm.DB, configs []model.ConfigUpdate) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CreateConfigs(tx *gorm.DB, configs []model.ConfigCreate) error {
|
||||||
|
if len(configs) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
err := tx.CreateInBatches(&configs, 500).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
55
actions/gen.go
Normal file
55
actions/gen.go
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
package actions
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"zzman/model"
|
||||||
|
|
||||||
|
u "zzman/util"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GenConfig(tx *gorm.DB) error {
|
||||||
|
|
||||||
|
gateways, err := FindGateways(tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cities, err := FindCitiesWithEdgesCount(tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
configs := make([]model.ConfigCreate, len(gateways)*30)
|
||||||
|
for iGateway := range gateways {
|
||||||
|
for j := range 30 {
|
||||||
|
n := iGateway*30 + j
|
||||||
|
iCity := (iGateway*30 + j) % len(cities)
|
||||||
|
gateway := gateways[iGateway]
|
||||||
|
city := cities[iCity]
|
||||||
|
|
||||||
|
configs[n] = model.ConfigCreate{
|
||||||
|
Table: u.P(strconv.Itoa(j + 221)),
|
||||||
|
Cityhash: &city.Hash,
|
||||||
|
CityLabel: &city.Label,
|
||||||
|
Network: u.P(fmt.Sprintf("172.30.168.%d", j+222)),
|
||||||
|
GatewayMac: &gateway.Macaddr,
|
||||||
|
User: u.P(fmt.Sprintf("jdzz%ddt%d", iGateway+1, j+221)),
|
||||||
|
InnerIp: u.P(fmt.Sprintf("%s%d", gateway.ProxyIp, j+222)),
|
||||||
|
EdgeMac: u.P(""),
|
||||||
|
IsChange: u.P(1),
|
||||||
|
IsOnline: u.P(0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println(fmt.Sprintf("生成配置:%d 条", len(configs)))
|
||||||
|
err = CreateConfigs(tx, configs)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
10
main.go
10
main.go
@@ -91,6 +91,16 @@ func main() {
|
|||||||
slog.Info("清空节点成功")
|
slog.Info("清空节点成功")
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
||||||
|
// 新增混拨配置(临时)
|
||||||
|
case "gen-mix":
|
||||||
|
err := actions.GenConfig(model.DB)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(fmt.Sprintf("生成混拨配置失败:%s", err.Error()))
|
||||||
|
} else {
|
||||||
|
slog.Info("生成混拨配置成功")
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
println("请输入正确的命令参数")
|
println("请输入正确的命令参数")
|
||||||
|
|||||||
@@ -39,3 +39,20 @@ type ConfigUpdate struct {
|
|||||||
func (ConfigUpdate) TableName() string {
|
func (ConfigUpdate) TableName() string {
|
||||||
return "gateway"
|
return "gateway"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ConfigCreate struct {
|
||||||
|
GatewayMac *string `gorm:"column:macaddr"`
|
||||||
|
Table *string `gorm:"column:table"`
|
||||||
|
EdgeMac *string `gorm:"column:edge"`
|
||||||
|
Network *string `gorm:"column:network"`
|
||||||
|
Cityhash *string `gorm:"column:cityhash"`
|
||||||
|
CityLabel *string `gorm:"column:label"`
|
||||||
|
User *string `gorm:"column:user"`
|
||||||
|
InnerIp *string `gorm:"column:inner_ip"`
|
||||||
|
IsChange *int `gorm:"column:ischange"`
|
||||||
|
IsOnline *int `gorm:"column:isonline"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ConfigCreate) TableName() string {
|
||||||
|
return "gateway"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user