conf.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package conf
  2. import (
  3. "errors"
  4. "flag"
  5. "go-common/library/cache/redis"
  6. "go-common/library/conf"
  7. "go-common/library/database/sql"
  8. ecode "go-common/library/ecode/tip"
  9. "go-common/library/log"
  10. bm "go-common/library/net/http/blademaster"
  11. "go-common/library/net/http/blademaster/middleware/auth"
  12. "go-common/library/net/http/blademaster/middleware/verify"
  13. "go-common/library/net/rpc"
  14. "go-common/library/net/rpc/warden"
  15. "go-common/library/net/trace"
  16. "go-common/library/queue/databus"
  17. "go-common/library/time"
  18. "github.com/BurntSushi/toml"
  19. )
  20. // global var
  21. var (
  22. confPath string
  23. client *conf.Client
  24. // Conf config
  25. Conf = &Config{}
  26. )
  27. // Config config set
  28. type Config struct {
  29. // base
  30. // elk
  31. Log *log.Config
  32. // App
  33. App *bm.App
  34. // rpc server2
  35. RPCServer *rpc.ServerConfig
  36. // tracer
  37. Tracer *trace.Config
  38. // auth
  39. Auth *auth.Config
  40. // verify
  41. Verify *verify.Config
  42. // HTTPServer
  43. HTTPServer *bm.ServerConfig
  44. // Ecode
  45. Ecode *ecode.Config
  46. // rpc
  47. FavoriteRPC *rpc.ClientConfig
  48. ArchiveRPC *rpc.ClientConfig
  49. AccountRPC *rpc.ClientConfig
  50. FilterRPC *rpc.ClientConfig
  51. // databus
  52. ViewDatabus *databus.Config
  53. ShareDatabus *databus.Config
  54. // Mysql
  55. Mysql *sql.Config
  56. // Redis
  57. Redis *Redis
  58. // HTTP client
  59. HTTPClient *bm.ClientConfig
  60. // Rule
  61. Rule *Rule
  62. // Host
  63. Host *Host
  64. // Warden Client
  65. ArcClient *warden.ClientConfig
  66. AccClient *warden.ClientConfig
  67. }
  68. // Host hosts.
  69. type Host struct {
  70. Search string
  71. }
  72. // Redis redis struct
  73. type Redis struct {
  74. *redis.Config
  75. PlExpire time.Duration
  76. StatExpire time.Duration
  77. }
  78. // Rule playlist config
  79. type Rule struct {
  80. MaxNameLimit int
  81. MaxPlDescLimit int
  82. MaxVideoDescLimit int
  83. MaxArcChangeLimit int
  84. MaxVideoCnt int
  85. MaxPlCnt int
  86. MaxPlArcsPs int
  87. MaxPlsPageSize int
  88. SortStep int64
  89. MinSort int64
  90. MaxSearchArcPs int
  91. MaxSearchLimit int
  92. BeginSort int64
  93. PowerMids []int64
  94. }
  95. func init() {
  96. flag.StringVar(&confPath, "conf", "", "default config path")
  97. }
  98. // Init init conf
  99. func Init() error {
  100. if confPath != "" {
  101. return local()
  102. }
  103. return remote()
  104. }
  105. func local() (err error) {
  106. _, err = toml.DecodeFile(confPath, &Conf)
  107. return
  108. }
  109. func remote() (err error) {
  110. if client, err = conf.New(); err != nil {
  111. return
  112. }
  113. if err = load(); err != nil {
  114. return
  115. }
  116. go func() {
  117. for range client.Event() {
  118. log.Info("config reload")
  119. if load() != nil {
  120. log.Error("config reload error (%v)", err)
  121. }
  122. }
  123. }()
  124. return
  125. }
  126. func load() (err error) {
  127. var (
  128. s string
  129. ok bool
  130. tmpConf *Config
  131. )
  132. if s, ok = client.Toml2(); !ok {
  133. return errors.New("load config center error")
  134. }
  135. if _, err = toml.Decode(s, &tmpConf); err != nil {
  136. return errors.New("could not decode config")
  137. }
  138. *Conf = *tmpConf
  139. return
  140. }