func main() { flag.Parse() client := etcd.NewClient([]string{etcdServer}) srvs := &services{ m: map[string]*service{}, } updates := make(chan *etcd.Response) // Perform an initial read of all services. res, err := client.Get(servicesPrefix, false, true) if err != nil { log.Fatalf("Error on initial retrieval: %s", err) } srvs.update(res.Node) srvs.persist() // Start watching for updates. go func() { res, err := client.Watch(servicesPrefix, 0, true, updates, nil) if err != nil { log.Errorln(err) } log.Infoln(res) }() // Apply updates sent on the channel. for res := range updates { if res.Action == "delete" { log.Debugf("delete: %s", res.Node.Key) srvs.delete(res.Node) } else { log.Debugf("%s: %s = %s", res.Action, res.Node.Key, res.Node.Value) srvs.update(res.Node) } srvs.persist() } }
func main() { flag.Parse() var ( client = etcd.NewClient([]string{*etcdServer}) srvs = services{} updates = make(chan *etcd.Response) ) // Perform an initial read of all services. res, err := client.Get(servicesPrefix, false, true) if err != nil { log.Fatalf("Error on initial retrieval: %s", err) } srvs.handle(res.Node, srvs.update) srvs.persist() // Start watching for updates. go func() { _, err := client.Watch(servicesPrefix, 0, true, updates, nil) if err != nil { log.Errorln(err) } }() // Apply updates sent on the channel. for res := range updates { log.Infoln(res.Action, res.Node.Key, res.Node.Value) h := srvs.update if res.Action == "delete" { h = srvs.delete } srvs.handle(res.Node, h) srvs.persist() } }