init.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/spf13/viper"
  5. "go.uber.org/zap"
  6. "gorm.io/driver/clickhouse"
  7. "gorm.io/driver/mysql"
  8. "gorm.io/gorm"
  9. "gorm.io/gorm/logger"
  10. "jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
  11. "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
  12. "net/url"
  13. "os"
  14. "time"
  15. )
  16. var GF GlobalConf
  17. func InitConfig() (err error) {
  18. viper.SetConfigFile("config.toml") // 指定配置文件路径
  19. viper.SetConfigName("config") // 配置文件名称(无扩展名)
  20. viper.SetConfigType("toml") // 如果配置文件的名称中没有扩展名,则需要配置此项
  21. viper.AddConfigPath("./")
  22. viper.AddConfigPath("./conf/") // 还可以在工作目录中查找配置
  23. viper.AddConfigPath("../conf/") // 还可以在工作目录中查找配置
  24. err = viper.ReadInConfig() // 查找并读取配置文件
  25. if err != nil { // 处理读取配置文件的错误
  26. return
  27. }
  28. err = viper.Unmarshal(&GF)
  29. return err
  30. }
  31. func init() {
  32. err := InitConfig()
  33. if err != nil {
  34. fmt.Println("InitConfig err", err)
  35. os.Exit(1)
  36. }
  37. InitLog()
  38. //InitMgo()
  39. //InitEs()
  40. InitMysql()
  41. InitClickhouse()
  42. //
  43. }
  44. func InitLog() {
  45. now := time.Now()
  46. err := log.InitLog(
  47. log.Path(GF.Log.LogPath),
  48. log.Level(GF.Log.LogLevel),
  49. log.Compress(GF.Log.Compress),
  50. log.MaxSize(GF.Log.MaxSize),
  51. log.MaxBackups(GF.Log.MaxBackups),
  52. log.MaxAge(GF.Log.MaxAge),
  53. log.Format(GF.Log.Format),
  54. )
  55. if err != nil {
  56. fmt.Printf("InitLog failed: %v\n", err)
  57. os.Exit(1)
  58. }
  59. log.Info("InitLog", zap.Any("duration", time.Since(now).Seconds()))
  60. }
  61. func InitMysql() {
  62. now := time.Now()
  63. username := GF.Mysql.Username
  64. password := GF.Mysql.Password
  65. host := GF.Mysql.Address // 本地
  66. //host := "172.17.162.27:14000" //线上
  67. database := GF.Mysql.Dbname
  68. dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, database)
  69. // 连接到数据库
  70. var err error
  71. AnalysisDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
  72. Logger: logger.Default.LogMode(logger.Error), //不打印日志
  73. })
  74. if err != nil {
  75. log.Info("InitMysql", zap.String("初始化MySQL", "data_analysis数据库失败"), zap.Error(err))
  76. return
  77. } else {
  78. log.Info("InitMysql", zap.String("初始化MySQL", "data_analysis数据库成功"))
  79. }
  80. dsn2 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, GF.Mysql.Dbname2)
  81. JianyuDB, err = gorm.Open(mysql.Open(dsn2), &gorm.Config{
  82. Logger: logger.Default.LogMode(logger.Error), //不打印日志
  83. })
  84. if err != nil {
  85. log.Info("InitMysql", zap.String("初始化MySQL", "jianyu 数据库失败"), zap.Error(err))
  86. return
  87. } else {
  88. log.Info("InitMysql", zap.String("初始化MySQL", "jianyu 数据库成功"))
  89. }
  90. dsn3 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, GF.Mysql.Dbname3)
  91. JianyuSubjectDB, err = gorm.Open(mysql.Open(dsn3), &gorm.Config{
  92. Logger: logger.Default.LogMode(logger.Error), //不打印日志
  93. })
  94. if err != nil {
  95. log.Info("InitMysql", zap.String("初始化MySQL", "Jianyu_subjectdb 数据库失败"), zap.Error(err))
  96. return
  97. } else {
  98. log.Info("InitMysql", zap.String("初始化MySQL", "Jianyu_subjectdb 数据库成功"))
  99. }
  100. log.Info("InitMysql", zap.Any("duration", time.Since(now).Seconds()))
  101. }
  102. //func InitEs() {
  103. // now := time.Now()
  104. // //Es = &elastic.Elastic{
  105. // // //S_esurl: "http://127.0.0.1:19805",
  106. // // S_esurl: GF.EsP.URL,
  107. // // I_size: 5,
  108. // // Username: GF.EsP.Username,
  109. // // Password: GF.EsP.Password,
  110. // //}
  111. // //Es.InitElasticSize()
  112. //
  113. // EsClient, _ = es.NewClient(
  114. // es.SetURL(GF.EsP.URL),
  115. // es.SetBasicAuth(GF.EsP.Username, GF.EsP.Password),
  116. // es.SetSniff(false),
  117. // )
  118. //
  119. // log.Info("InitEs", zap.Any("duration", time.Since(now).Seconds()))
  120. //}
  121. func InitMgo() {
  122. now := time.Now()
  123. Mgo = &mongodb.MongodbSim{
  124. MongodbAddr: GF.Mongob.Host,
  125. DbName: GF.Mongob.DB,
  126. Size: 10,
  127. UserName: GF.Mongob.Username,
  128. Password: GF.Mongob.Password,
  129. }
  130. Mgo.InitPool()
  131. MgoP = &mongodb.MongodbSim{
  132. MongodbAddr: GF.Mongop.Host,
  133. DbName: GF.Mongop.DB,
  134. Size: 10,
  135. UserName: GF.Mongop.Username,
  136. Password: GF.Mongop.Password,
  137. }
  138. MgoP.InitPool()
  139. MgoSpider = &mongodb.MongodbSim{
  140. MongodbAddr: GF.Mongospider.Host,
  141. DbName: GF.Mongospider.DB,
  142. Size: 10,
  143. UserName: GF.Mongospider.Username,
  144. Password: GF.Mongospider.Password,
  145. }
  146. MgoSpider.InitPool()
  147. log.Info("InitMgo", zap.Any("duration", time.Since(now).Seconds()))
  148. }
  149. // InitClickhouse 初始化Clickhouse
  150. func InitClickhouse() {
  151. username := GF.Clickhouse.Username
  152. password := GF.Clickhouse.Password
  153. host := GF.Clickhouse.Host
  154. dbname := GF.Clickhouse.DB
  155. var err error
  156. // 设置时区为 Asia/Shanghai
  157. loc, err := time.LoadLocation("Asia/Shanghai")
  158. if err != nil {
  159. log.Info("failed to load location: ", zap.Error(err))
  160. }
  161. encodedPassword := url.QueryEscape(password)
  162. // 移除连接字符串中的 loc 参数
  163. dn := fmt.Sprintf("clickhouse://%s:%s@%s/%s?dial_timeout=10s&read_timeout=20s", username, encodedPassword, host, dbname)
  164. ClickhouseDB, err = gorm.Open(clickhouse.Open(dn), &gorm.Config{
  165. Logger: logger.Default.LogMode(logger.Silent),
  166. })
  167. if err != nil {
  168. log.Info("打开数据库失败:", zap.Error(err))
  169. } else {
  170. log.Info("连接数据库成功", zap.String("", ClickhouseDB.Name()))
  171. }
  172. // 确保 GORM 使用本地时区
  173. ClickhouseDB = ClickhouseDB.Set("gorm:time_loc", loc)
  174. // 检查时间是否正确
  175. now := time.Now().In(loc) // 使用本地时间
  176. log.Info("Current local time: ", zap.String("time", now.String()))
  177. }