setting.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package setting
  2. import (
  3. "errors"
  4. "log"
  5. "os"
  6. "os/exec"
  7. "path/filepath"
  8. "runtime"
  9. "strings"
  10. "time"
  11. "github.com/go-ini/ini"
  12. "github.com/jacobsa/go-serial/serial"
  13. )
  14. var (
  15. AppSetting = &App{}
  16. ServerSetting = &Server{}
  17. CommSetting = &serial.OpenOptions{}
  18. SnowIds *IdWorker
  19. DatabaseSetting = &Database{}
  20. SQlserverSetting = &SQlserver{}
  21. YynserverSetting = &Yyn{}
  22. cfg *ini.File
  23. CurrentPath string
  24. )
  25. type App struct {
  26. JwtSecret string
  27. PageSize int
  28. PrefixUrl string
  29. RuntimeRootPath string
  30. FileSavePath string
  31. FileMaxSize int // 普通文件上传的限制大小,单位byte, 最大单位1GB
  32. FileAllowType []string // 允许上传的文件后缀名
  33. ImageSavePath string
  34. ImageMaxSize int
  35. ImageAllowExts []string
  36. ThumbnailSavePath string
  37. ThumbnailMaxWidth int
  38. ThumbnailMaxHeight int
  39. ExportSavePath string
  40. QrCodeSavePath string
  41. FontSavePath string
  42. LogSavePath string
  43. LogSaveName string
  44. LogFileExt string
  45. TimeFormat string
  46. }
  47. type Server struct {
  48. RunMode string
  49. HttpPort int
  50. ReadTimeout time.Duration
  51. WriteTimeout time.Duration
  52. NoAuth int
  53. Mdns_servicename string
  54. Mdns_serviceport int
  55. HttpsPort int
  56. Https int
  57. CrtPath string
  58. KeyPath string
  59. ServerName string
  60. DisplayName string
  61. Description string
  62. GRFD string
  63. GRFDURL string
  64. }
  65. type Database struct {
  66. Type string
  67. User string
  68. Password string
  69. Host string
  70. Name string
  71. ShowXormlog bool
  72. ShowGetSqllog bool
  73. CacheApiSql bool
  74. TablePrefix string
  75. }
  76. type SQlserver struct {
  77. Host string
  78. User string
  79. Password string
  80. Name string
  81. }
  82. type Yyn struct {
  83. FarmId string
  84. ProductKey string
  85. DeviceName string
  86. DeviceSecret string
  87. HeartBeat string
  88. }
  89. func Setup(dir string) {
  90. var err error
  91. if strings.Trim(dir, " ") == "" {
  92. CurrentPath, err = GetCurrentPath()
  93. } else {
  94. CurrentPath = dir
  95. }
  96. cfg, err = ini.Load(CurrentPath + "conf/app.ini")
  97. if err != nil {
  98. log.Fatalf("setting.Setup, fail to parse 'conf/app.ini': %v", err)
  99. }
  100. SnowIds, err = NewIdWorker(1)
  101. if err != nil {
  102. log.Fatalf("setting.Setup, fail to create SnowIds: %v", err)
  103. }
  104. DatabaseSetting.ShowXormlog = false
  105. DatabaseSetting.ShowGetSqllog = false
  106. DatabaseSetting.CacheApiSql = false
  107. mapTo("app", AppSetting)
  108. mapTo("server", ServerSetting)
  109. mapTo("database", DatabaseSetting)
  110. mapTo("comm", CommSetting)
  111. mapTo("sqlserver", SQlserverSetting)
  112. mapTo("yyn", YynserverSetting)
  113. AppSetting.ImageMaxSize = AppSetting.ImageMaxSize * 1024 * 1024
  114. ServerSetting.ReadTimeout = ServerSetting.ReadTimeout * time.Second
  115. ServerSetting.WriteTimeout = ServerSetting.ReadTimeout * time.Second
  116. ServerSetting.CrtPath = CurrentPath + ServerSetting.CrtPath
  117. ServerSetting.KeyPath = CurrentPath + ServerSetting.KeyPath
  118. }
  119. func GetCurrentPath() (string, error) {
  120. file, err := exec.LookPath(os.Args[0])
  121. if err != nil {
  122. return "", err
  123. }
  124. path, err := filepath.Abs(file)
  125. if err != nil {
  126. return "", err
  127. }
  128. if runtime.GOOS == "windows" {
  129. path = strings.Replace(path, "\\", "/", -1)
  130. }
  131. i := strings.LastIndex(path, "/")
  132. if i < 0 {
  133. return "", errors.New(`Can't find "/" or "\".`)
  134. }
  135. return path[0 : i+1], nil
  136. }
  137. func mapTo(section string, v interface{}) {
  138. err := cfg.Section(section).MapTo(v)
  139. if err != nil {
  140. log.Fatalf("Cfg.MapTo RedisSetting err: %v", err)
  141. }
  142. }