12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package services
- import (
- "fmt"
- "log"
- "os"
- "path/filepath"
- "xg_dba/api"
- "xg_dba/internal/global"
- "github.com/spf13/viper"
- )
- // 设置连接信息
- func SetConnectInfo_service(connectInfos []api.ConnectInfoRequest, saveFilePath string) error {
- // 创建目录(如果不存在)
- dirPath := filepath.Dir(saveFilePath)
- if err := os.MkdirAll(dirPath, os.ModePerm); err != nil {
- log.Println("创建目录失败", err)
- return err
- }
- // 创建空的配置文件(如果文件不存在)
- if _, err := os.Stat(saveFilePath); os.IsNotExist(err) {
- file, err := os.Create(saveFilePath)
- if err != nil {
- log.Println("创建文件失败", err)
- return err
- }
- defer file.Close()
- }
- // 设置 Viper 配置文件路径
- viper.SetConfigFile(saveFilePath)
- viper.SetConfigType("toml")
- // 读取配置文件(忽略不存在的文件错误)
- if err := viper.ReadInConfig(); err != nil {
- if _, ok := err.(viper.ConfigFileNotFoundError); !ok {
- log.Println("读取配置文件失败", err)
- return err
- }
- }
- // 遍历每个连接信息
- for idx, connectInfo := range connectInfos {
- // 连接测试
- // sshClient, err := remote.NewSSHClient(connectInfo.Id, connectInfo.Ssh.Username, connectInfo.Ssh.Password, connectInfo.Ssh.Host, connectInfo.Ssh.Port)
- // if err != nil {
- // log.Println("连接失败", err)
- // return err
- // }
- // defer sshClient.Close()
- // 定义组和默认值
- group := map[string]interface{}{
- "db_database": connectInfo.Db.Database,
- "db_password": connectInfo.Db.Password,
- "db_port": connectInfo.Db.Port,
- "db_user": connectInfo.Db.User,
- "ssh_ip": connectInfo.Ssh.Host,
- "ssh_password": connectInfo.Ssh.Password,
- "ssh_port": connectInfo.Ssh.Port,
- "ssh_username": connectInfo.Ssh.Username,
- }
- // 将组写入 Viper 配置,使用 server_db.idx 的方式
- for key, value := range group {
- viper.Set(fmt.Sprintf("server_db.%d.%s", idx+1, key), value)
- }
- }
- // 保存到文件
- if err := viper.WriteConfigAs(saveFilePath); err != nil {
- log.Println("写入配置文件失败", err)
- return err
- }
- //更新缓存
- if err := global.Cache.RefreshCache(); err != nil {
- log.Println("写入缓存失败", err)
- return err
- }
- fmt.Println("缓存刷新: ", global.Cache.Cache)
- return nil
- }
|