config.go 4.8 KB

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