Files
jh-zz/main.go

108 lines
2.1 KiB
Go

package main
import (
"fmt"
"jhman/actions"
"jhman/clients"
"jhman/model"
"log/slog"
"os"
"path/filepath"
"slices"
"strings"
"github.com/joho/godotenv"
slogjournal "github.com/systemd/slog-journal"
)
func main() {
// 初始化环境
slog.Debug("初始化环境变量")
ex, err := os.Executable()
if err != nil {
panic(err)
}
exPath := filepath.Dir(ex)
file := filepath.Join(exPath, ".env")
println("加载环境变量文件:", file)
err = godotenv.Load(file)
if err != nil {
slog.Error(fmt.Errorf("初始化变量失败:%w", err).Error())
}
// 初始化日志
handler, err := slogjournal.NewHandler(&slogjournal.Options{
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
a.Key = strings.ToUpper(a.Key)
a.Key = strings.ReplaceAll(a.Key, "-", "_")
return a
},
})
slog.SetDefault(slog.New(handler))
// 初始化数据库和 Redis
model.Init()
defer model.Close()
clients.InitRedis()
defer clients.CloseRedis()
// 执行命令
if len(os.Args) < 2 {
println("缺少命令参数")
return
}
switch os.Args[1] {
// 同步城市节点
case "sync":
err := actions.Sync()
if err != nil {
slog.Error(fmt.Sprintf("同步城市节点数据失败:%s", err.Error()))
} else {
slog.Info("同步城市节点数据成功")
}
return
// 更新网关
case "update":
var args actions.UpdateArgs
if len(os.Args) >= 3 {
if slices.Contains(os.Args, "--mock") {
args.Mock = true
}
}
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
// 新增混拨配置(临时)
case "gen-mix":
err := actions.GenConfig(model.DB)
if err != nil {
slog.Error(fmt.Sprintf("生成混拨配置失败:%s", err.Error()))
} else {
slog.Info("生成混拨配置成功")
}
return
}
println("请输入正确的命令参数")
}