config.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package utils
  2. import (
  3. "fmt"
  4. "math"
  5. "strconv"
  6. "strings"
  7. beeLogger "github.com/beego/bee/v2/logger"
  8. "github.com/beego/beego/v2/server/web"
  9. "github.com/qiniu/qmgo"
  10. "github.com/shopspring/decimal"
  11. )
  12. var (
  13. RunMode string //运行模式
  14. MYSQL_URL string //数据库连接
  15. MYSQL_URL_DATA string
  16. MYSQL_URL_EDB string
  17. DbDriverName string // 数据库驱动名称
  18. MgoUrlData string // mongodb数据库连接配置
  19. REDIS_CACHE string //缓存地址
  20. //Rc *cache.Cache //redis缓存
  21. Re error //redis错误
  22. Rc RedisClient //redis缓存
  23. MgoDataCli *qmgo.Client // mongodb客户端连接
  24. MgoDataDbName string // mongodb指标数据的库名
  25. )
  26. // 基础配置
  27. var (
  28. // APPNAME 项目中文名称
  29. APPNAME string
  30. // APP_NAME_EN 项目英文名称
  31. APP_NAME_EN string
  32. // Md5Key 签名秘钥
  33. Md5Key string
  34. // EmailSendToUsers 邮件提醒人员
  35. EmailSendToUsers string
  36. // AlarmMsgUrl 报警服务地址
  37. AlarmMsgUrl string
  38. DesKey string // 接口返回加密KEY
  39. )
  40. // 公共api内部服务调用
  41. var (
  42. // EDB_LIB_URL 公共指标库
  43. EDB_LIB_URL string
  44. APP_EDB_LIB_NAME_EN string
  45. EDB_LIB_Md5_KEY string
  46. ETA_MINI_URL string
  47. ETA_MINI_DES_KEY string
  48. )
  49. var (
  50. LogPath string
  51. LogFile string
  52. BinLogPath string
  53. BinLogFile string
  54. ApiLogPath string
  55. ApiLogFile string
  56. LogMaxDays int //日志最大保留天数
  57. )
  58. var (
  59. UseMongo bool // 是否使用mongo
  60. )
  61. // eta_forum_hub ETA社区桥接服务地址
  62. var (
  63. ETA_FORUM_HUB_URL string
  64. ETA_FORUM_HUB_NAME_EN string
  65. ETA_FORUM_HUB_MD5_KEY string
  66. )
  67. func init() {
  68. tmpRunMode, err := web.AppConfig.String("run_mode")
  69. if err != nil {
  70. panic("配置文件读取run_mode错误 " + err.Error())
  71. }
  72. RunMode = tmpRunMode
  73. if RunMode == "" {
  74. localIp, err := GetLocalIP()
  75. if localIp == "10.0.0.123" {
  76. RunMode = "debug"
  77. } else {
  78. RunMode = "release"
  79. }
  80. configPath := `/home/code/config/eta_chart_lib/conf/app.conf`
  81. err = web.LoadAppConfig("ini", configPath)
  82. if err != nil {
  83. fmt.Println("web.LoadAppConfig Err:" + err.Error())
  84. }
  85. }
  86. config, err := web.AppConfig.GetSection(RunMode)
  87. if err != nil {
  88. panic("配置文件读取错误 " + err.Error())
  89. }
  90. beeLogger.Log.Info(RunMode + " 模式")
  91. APP_NAME_EN = config["app_name_en"]
  92. // 签名秘钥
  93. Md5Key = config["md5_key"]
  94. MYSQL_URL = config["mysql_url"]
  95. MYSQL_URL_DATA = config["mysql_url_data"]
  96. MYSQL_URL_EDB = config["mysql_url_edb"]
  97. // 数据库驱动名称
  98. DbDriverName = config["db_driver_name"]
  99. if DbDriverName == "" {
  100. DbDriverName = "mysql"
  101. }
  102. // mongodb数据库连接配置
  103. MgoUrlData = config["mgo_url_data"]
  104. REDIS_CACHE = config["beego_cache"]
  105. if len(REDIS_CACHE) <= 0 {
  106. panic("redis链接参数没有配置")
  107. }
  108. //Rc, Re = cache.NewCache(REDIS_CACHE) //初始化缓存
  109. //if Re != nil {
  110. // fmt.Println(Re)
  111. // panic(Re)
  112. //}
  113. // 初始化缓存
  114. redisClient, err := initRedis(config["redis_type"], config["beego_cache"])
  115. if err != nil {
  116. fmt.Println("redis链接异常:", err)
  117. panic(any(Re))
  118. }
  119. Rc = redisClient
  120. // 项目中文名称
  121. appNameCn, err := web.AppConfig.String("app_name_cn")
  122. if err != nil {
  123. panic(any("配置文件读取app_name_cn错误 " + err.Error()))
  124. }
  125. APPNAME = appNameCn
  126. // 邮件提醒人员
  127. EmailSendToUsers = config["email_send_to_users"]
  128. // 报警服务地址
  129. AlarmMsgUrl = config["alarm_msg_url"]
  130. // 公共api内部服务调用
  131. {
  132. // 公共指标库相关
  133. EDB_LIB_URL = config["edb_lib_url"]
  134. APP_EDB_LIB_NAME_EN = config["app_edb_lib_name_en"]
  135. EDB_LIB_Md5_KEY = config["edb_lib_md5_key"]
  136. ETA_MINI_URL = config["eta_mini_url"]
  137. ETA_MINI_DES_KEY = config["eta_mini_des_key"]
  138. }
  139. //日志配置
  140. {
  141. LogPath = config["log_path"]
  142. LogFile = config["log_file"]
  143. BinLogPath = config["binlog_path"]
  144. BinLogFile = config["binlog_file"]
  145. ApiLogPath = config["apilog_path"]
  146. ApiLogFile = config["apilog_file"]
  147. logMaxDaysStr := config["log_max_day"]
  148. LogMaxDays, _ = strconv.Atoi(logMaxDaysStr)
  149. }
  150. // eta_forum_hub ETA社区桥接服务地址
  151. {
  152. ETA_FORUM_HUB_URL = config["eta_forum_hub_url"]
  153. ETA_FORUM_HUB_NAME_EN = config["eta_forum_hub_name_en"]
  154. ETA_FORUM_HUB_MD5_KEY = config["eta_forum_hub_md5_key"]
  155. }
  156. // 接口返回加密KEY
  157. DesKey = config["des_key"]
  158. }
  159. // FormatMixTableDataShowValue 格式化自定表格显示数据
  160. func FormatMixTableDataShowValue(x float64) (res string) {
  161. res = strconv.FormatFloat(x, 'f', -1, 64)
  162. return
  163. }
  164. //http://8.136.199.33:8608/swagger/
  165. //http://8.136.199.33:8608/v1
  166. // FormatTableDataShowValue 格式化自定表格显示数据
  167. func FormatTableDataShowValue(x float64) (res string) {
  168. if x > 1 || x < -1 {
  169. res = decimal.NewFromFloat(x).Round(2).String()
  170. return
  171. }
  172. // 介于-1到1之间
  173. xStr := strconv.FormatFloat(x, 'f', -10, 64)
  174. // 使用 strings.Split 函数将小数拆分为整数部分和小数部分
  175. xParts := strings.Split(xStr, ".")
  176. if len(xParts) < 2 {
  177. res = fmt.Sprint(x)
  178. return
  179. }
  180. // 计算小数部分的长度,即小数点后面的位数
  181. xDecimals := len(xParts[1])
  182. if xDecimals > 2 {
  183. parts := xParts[1]
  184. // 小数点后小于等于两位, 直接拼接返回
  185. partLen := len(xParts[1])
  186. if partLen <= 2 {
  187. res = xParts[0] + "." + parts
  188. return
  189. }
  190. // 找出第一个有效数字, 算出n
  191. one := 0
  192. for k, p := range parts {
  193. // 48->0
  194. if p != 48 {
  195. if one == 0 {
  196. one = k + 1
  197. }
  198. }
  199. }
  200. n := partLen - one
  201. if n >= 1 {
  202. n -= 1
  203. } else {
  204. one -= 1
  205. }
  206. var partFloat float64
  207. partInt, _ := strconv.Atoi(parts)
  208. partFloat, _ = decimal.NewFromInt(int64(partInt)).Div(decimal.NewFromFloat(math.Pow(10, float64(n)))).Float64()
  209. partFloat = math.Round(partFloat)
  210. partFloat, _ = decimal.NewFromFloat(partFloat).Div(decimal.NewFromFloat(math.Pow(10, float64(one+1)))).Float64()
  211. resParts := strings.Split(fmt.Sprint(partFloat), ".")
  212. resPart := ""
  213. if len(resParts) > 1 {
  214. resPart = resParts[1]
  215. } else {
  216. resPart = resParts[0]
  217. }
  218. res = xParts[0] + "." + resPart
  219. }
  220. if xDecimals <= 2 {
  221. xDecimalsStr := xParts[1]
  222. x, _ = strconv.ParseFloat(xParts[0]+"."+xDecimalsStr, 64)
  223. res = xParts[0] + "." + xDecimalsStr
  224. }
  225. return
  226. }
  227. func GetMiniUrl(source string) string {
  228. config, err := web.AppConfig.GetSection(RunMode)
  229. if err != nil {
  230. panic("配置文件读取错误 " + err.Error())
  231. }
  232. urlName := fmt.Sprintf("mini_url_%s", source)
  233. return config[urlName]
  234. }