func New(name, text string) (c *Conf, err error) { defer errRecover(&err) c = &Conf{ Name: name, CheckFrequency: time.Minute * 5, DefaultRunEvery: 1, HTTPListen: ":8070", StateFile: "bosun.state", LedisDir: "ledis_data", LedisBindAddr: "127.0.0.1:9565", MinGroupSize: 5, PingDuration: time.Hour * 24, ResponseLimit: 1 << 20, // 1MB SearchSince: opentsdb.Day * 3, TSDBVersion: &opentsdb.Version2_1, UnknownThreshold: 5, Vars: make(map[string]string), Templates: make(map[string]*Template), Alerts: make(map[string]*Alert), Notifications: make(map[string]*Notification), RawText: text, bodies: htemplate.New(name).Funcs(htemplate.FuncMap(defaultFuncs)), subjects: ttemplate.New(name).Funcs(defaultFuncs), Lookups: make(map[string]*Lookup), Macros: make(map[string]*Macro), } c.tree, err = parse.Parse(name, text) if err != nil { c.error(err) } saw := make(map[string]bool) for _, n := range c.tree.Root.Nodes { c.at(n) switch n := n.(type) { case *parse.PairNode: c.seen(n.Key.Text, saw) c.loadGlobal(n) case *parse.SectionNode: c.loadSection(n) default: c.errorf("unexpected parse node %s", n) } } if c.Hostname == "" { c.Hostname = c.HTTPListen if strings.HasPrefix(c.Hostname, ":") { h, err := os.Hostname() if err != nil { c.at(nil) c.error(err) } c.Hostname = h + c.Hostname } } return }
func main() { config := []byte(`notification name { email = [email protected] get = 127.0.0.1 }`) tree, err := parse.Parse("text", string(config)) if err != nil { return } log.Println(tree) log.Println(tree.Name, tree.Root.String(), tree.Root.Nodes, tree.Root.NodeType, tree.Parse(string(config))) }