conf.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package conf
  2. import (
  3. "context"
  4. "fmt"
  5. "sync"
  6. "go-common/app/interface/openplatform/monitor-end/model/kafka"
  7. "go-common/app/interface/openplatform/monitor-end/model/monitor"
  8. "go-common/library/cache/redis"
  9. "go-common/library/conf/paladin"
  10. "go-common/library/database/sql"
  11. "go-common/library/log"
  12. "go-common/library/log/infoc"
  13. bm "go-common/library/net/http/blademaster"
  14. "github.com/BurntSushi/toml"
  15. )
  16. var (
  17. confPath string
  18. // Conf is global config
  19. Conf = &Config{Prom: &Prom{}}
  20. )
  21. // Config service config
  22. type Config struct {
  23. // http
  24. BM *bm.ServerConfig
  25. // XLog
  26. Log *log.Config
  27. // monitor
  28. Monitor *monitor.MonitorConfig
  29. // kafka
  30. Kafka *kafka.Config
  31. NeedConsume bool
  32. // Prometheus
  33. Prom *Prom
  34. mutex sync.Mutex
  35. // mysql
  36. MySQL *sql.Config
  37. // redis
  38. Redis *redis.Config
  39. // infoc
  40. CollectInfoc *infoc.Config
  41. // collect fronend log
  42. CollectFE bool
  43. // products
  44. Products string
  45. }
  46. // Prom .
  47. type Prom struct {
  48. Promed bool
  49. IgnoreNA bool
  50. Factor int
  51. Limit uint64
  52. }
  53. // Set .
  54. func (e *Config) Set(text string) error {
  55. var ec Config
  56. if err := toml.Unmarshal([]byte(text), &ec); err != nil {
  57. return err
  58. }
  59. if ec.Prom == nil {
  60. e.Prom = &Prom{}
  61. return nil
  62. }
  63. e.mutex.Lock()
  64. e.Prom = &Prom{
  65. Factor: ec.Prom.Factor,
  66. Promed: ec.Prom.Promed,
  67. Limit: ec.Prom.Limit,
  68. IgnoreNA: ec.Prom.IgnoreNA,
  69. }
  70. e.CollectFE = ec.CollectFE
  71. e.Products = ec.Products
  72. e.mutex.Unlock()
  73. // *e = ec
  74. return nil
  75. }
  76. // Init .
  77. func Init() {
  78. if err := paladin.Init(); err != nil {
  79. panic(err)
  80. }
  81. // var ec exampleConf
  82. // var setter
  83. if err := paladin.Watch("monitor-end.toml", Conf); err != nil {
  84. panic(err)
  85. }
  86. if err := paladin.Get("monitor-end.toml").UnmarshalTOML(Conf); err != nil {
  87. panic(err)
  88. }
  89. // use exampleConf
  90. // watch key
  91. go func() {
  92. for event := range paladin.WatchEvent(context.TODO(), "monitor-end.toml") {
  93. fmt.Println(event, Conf)
  94. }
  95. }()
  96. }
  97. // func init() {
  98. // flag.StringVar(&confPath, "conf", "", "config path")
  99. // }
  100. // func local() (err error) {
  101. // _, err = toml.DecodeFile(confPath, &Conf)
  102. // return
  103. // }
  104. // Init int config
  105. // func Init() error {
  106. // if confPath != "" {
  107. // return local()
  108. // }
  109. // return remote()
  110. // }
  111. // func remote() (err error) {
  112. // if client, err = conf.New(); err != nil {
  113. // return
  114. // }
  115. // if err = load(); err != nil {
  116. // return
  117. // }
  118. // go func() {
  119. // for range client.Event() {
  120. // log.Info("config reload")
  121. // if load() != nil {
  122. // log.Error("config reload error (%v)", err)
  123. // }
  124. // }
  125. // }()
  126. // return
  127. // }
  128. // func load() (err error) {
  129. // var (
  130. // s string
  131. // ok bool
  132. // tmpConf *Config
  133. // )
  134. // if s, ok = client.Toml2(); !ok {
  135. // return errors.New("load config center error")
  136. // }
  137. // if _, err = toml.Decode(s, &tmpConf); err != nil {
  138. // return errors.New("could not decode config")
  139. // }
  140. // *Conf = *tmpConf
  141. // return
  142. // }