connect.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package services
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "path/filepath"
  7. "xg_dba/api"
  8. "xg_dba/internal/global"
  9. "github.com/spf13/viper"
  10. )
  11. // 设置连接信息
  12. func SetConnectInfo_service(connectInfos []api.ConnectInfoRequest, saveFilePath string) error {
  13. // 创建目录(如果不存在)
  14. dirPath := filepath.Dir(saveFilePath)
  15. if err := os.MkdirAll(dirPath, os.ModePerm); err != nil {
  16. log.Println("创建目录失败", err)
  17. return err
  18. }
  19. // 创建空的配置文件(如果文件不存在)
  20. if _, err := os.Stat(saveFilePath); os.IsNotExist(err) {
  21. file, err := os.Create(saveFilePath)
  22. if err != nil {
  23. log.Println("创建文件失败", err)
  24. return err
  25. }
  26. defer file.Close()
  27. }
  28. // 设置 Viper 配置文件路径
  29. viper.SetConfigFile(saveFilePath)
  30. viper.SetConfigType("toml")
  31. // 读取配置文件(忽略不存在的文件错误)
  32. if err := viper.ReadInConfig(); err != nil {
  33. if _, ok := err.(viper.ConfigFileNotFoundError); !ok {
  34. log.Println("读取配置文件失败", err)
  35. return err
  36. }
  37. }
  38. // 遍历每个连接信息
  39. for idx, connectInfo := range connectInfos {
  40. // 连接测试
  41. // sshClient, err := remote.NewSSHClient(connectInfo.Id, connectInfo.Ssh.Username, connectInfo.Ssh.Password, connectInfo.Ssh.Host, connectInfo.Ssh.Port)
  42. // if err != nil {
  43. // log.Println("连接失败", err)
  44. // return err
  45. // }
  46. // defer sshClient.Close()
  47. // 定义组和默认值
  48. group := map[string]interface{}{
  49. "db_database": connectInfo.Db.Database,
  50. "db_password": connectInfo.Db.Password,
  51. "db_port": connectInfo.Db.Port,
  52. "db_user": connectInfo.Db.User,
  53. "ssh_ip": connectInfo.Ssh.Host,
  54. "ssh_password": connectInfo.Ssh.Password,
  55. "ssh_port": connectInfo.Ssh.Port,
  56. "ssh_username": connectInfo.Ssh.Username,
  57. }
  58. // 将组写入 Viper 配置,使用 server_db.idx 的方式
  59. for key, value := range group {
  60. viper.Set(fmt.Sprintf("server_db.%d.%s", idx+1, key), value)
  61. }
  62. }
  63. // 保存到文件
  64. if err := viper.WriteConfigAs(saveFilePath); err != nil {
  65. log.Println("写入配置文件失败", err)
  66. return err
  67. }
  68. //更新缓存
  69. if err := global.Cache.RefreshCache(); err != nil {
  70. log.Println("写入缓存失败", err)
  71. return err
  72. }
  73. fmt.Println("缓存刷新: ", global.Cache.Cache)
  74. return nil
  75. }