// Start method fetches and builds Sensu data from each datacenter every Refresh seconds func (d *Daemon) Start(interval int, data chan *structs.Data) { // immediately fetch the first set of data and send it over the data channel d.fetchData() d.buildData() select { case data <- d.Data: logger.Trace("Sending initial results on the 'data' channel") default: logger.Trace("Could not send initial results on the 'data' channel") } // fetch new data every interval duration := time.Duration(interval) * time.Second for _ = range time.Tick(duration) { d.resetData() d.fetchData() d.buildData() // send the result over the data channel select { case data <- d.Data: logger.Trace("Sending results on the 'data' channel") default: logger.Trace("Could not send results on the 'data' channel") } } }
// listener listens on the data channel for messages from the daemon // and updates the Data struct with latest results from the Sensu datacenters func (u *Uchiwa) listener(interval int, data chan *structs.Data) { for { select { case result := <-data: logger.Trace("Received results on the 'data' channel") u.Mu.Lock() u.Data = result u.Mu.Unlock() // sleep during the interval timer := time.NewTimer(time.Second * time.Duration(interval)) <-timer.C default: // sleep during 1 second timer := time.NewTimer(time.Second * 1) <-timer.C } } }