forked from baidu/brcc-go-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrcc.go
executable file
·86 lines (71 loc) · 2.08 KB
/
rcc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
@Time : 2020-02-20 15:05
@Author : yakkie
*/
package rcc
import (
"context"
"github.com/BurntSushi/toml"
)
var (
defaultClient *Client
)
// StartWithConfFile run rcc-client with conf file
func StartWithConfFile(ctx context.Context, name string) error {
var ret = &Conf{}
if _, err := toml.DecodeFile(name, ret); err != nil {
return err
}
return StartWithConf(ctx, ret)
}
// StartWithConf run rcc-client with Conf
func StartWithConf(ctx context.Context, conf *Conf) error {
var err error
defaultClient, err = NewClient(ctx, conf)
if err != nil {
return err
}
return defaultClient.Start()
}
// Stop sync config
func Stop() error {
return defaultClient.Stop()
}
// Watch
func Watch(callback func(ce *ChangeEvent)) {
defaultClient.Watch(callback)
}
// GetValue from default namespace
func GetValue(key, defaultValue string) string {
return defaultClient.GetValue(key, defaultValue)
}
// Bind
func Bind(s interface{}) error {
return defaultClient.Bind(s)
}
// GetAllKeys return all config keys in given namespace
func GetAllKeys() []string {
return defaultClient.GetAllKeys()
}
// 模板变量格式:{env.变量名} 或者 {env.变量名|默认值}
// var osEnvVarReg = regexp.MustCompile(`\{rcc\.([A-Za-z0-9_\.]+)(\|[^}]+)?\}`)
// HelperConfVars 将配置文件中的 {rcc.xxx} 的内容,从rcc变量中读取并替换
//func HelperConfVars(content []byte) ([]byte, error) {
// contentNew := osEnvVarReg.ReplaceAllFunc(content, func(subStr []byte) []byte {
// // 将 {rcc.xxx} 中的 xxx 部分取出
// // 或者 将 {rcc.yyy|val} 中的 yyy|val 部分取出
//
// keyWithDefaultVal := subStr[len("{rcc.") : len(subStr)-1] // eg: xxx 或者 yyy|val
// idx := bytes.Index(keyWithDefaultVal, []byte("|"))
// if idx > 0 {
// // {env.变量名|默认值} 有默认值的格式
// key := string(keyWithDefaultVal[:idx]) // eg: yyy
// defaultVal := keyWithDefaultVal[idx+1:] // eg: val
// return []byte(GetValue(key, string(defaultVal)))
// }
//
// // {env.变量名} 无默认值的部分
// return []byte(GetValue(string(keyWithDefaultVal), ""))
// })
// return contentNew, nil
//}