default.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package paladin
  2. import (
  3. "context"
  4. "flag"
  5. "go-common/library/log"
  6. )
  7. var (
  8. // DefaultClient default client.
  9. DefaultClient Client
  10. confPath string
  11. vars = make(map[string][]Setter) // NOTE: no thread safe
  12. )
  13. func init() {
  14. flag.StringVar(&confPath, "conf", "", "default config path")
  15. }
  16. // Init init config client.
  17. func Init() (err error) {
  18. if confPath != "" {
  19. DefaultClient, err = NewFile(confPath)
  20. } else {
  21. DefaultClient, err = NewSven()
  22. }
  23. if err != nil {
  24. return
  25. }
  26. go func() {
  27. for event := range DefaultClient.WatchEvent(context.Background()) {
  28. if event.Event != EventUpdate && event.Event != EventAdd {
  29. continue
  30. }
  31. if sets, ok := vars[event.Key]; ok {
  32. for _, s := range sets {
  33. if err := s.Set(event.Value); err != nil {
  34. log.Error("paladin: vars:%v event:%v error(%v)", s, event, err)
  35. }
  36. }
  37. }
  38. }
  39. }()
  40. return
  41. }
  42. // Watch watch on a key. The configuration implements the setter interface, which is invoked when the configuration changes.
  43. func Watch(key string, s Setter) error {
  44. v := DefaultClient.Get(key)
  45. str, err := v.Raw()
  46. if err != nil {
  47. return err
  48. }
  49. if err := s.Set(str); err != nil {
  50. return err
  51. }
  52. vars[key] = append(vars[key], s)
  53. return nil
  54. }
  55. // WatchEvent watch on multi keys. Events are returned when the configuration changes.
  56. func WatchEvent(ctx context.Context, keys ...string) <-chan Event {
  57. return DefaultClient.WatchEvent(ctx, keys...)
  58. }
  59. // Get return value by key.
  60. func Get(key string) *Value {
  61. return DefaultClient.Get(key)
  62. }
  63. // GetAll return all config map.
  64. func GetAll() *Map {
  65. return DefaultClient.GetAll()
  66. }
  67. // Keys return values key.
  68. func Keys() []string {
  69. return DefaultClient.GetAll().Keys()
  70. }
  71. // Close close watcher.
  72. func Close() error {
  73. return DefaultClient.Close()
  74. }