// Start implements the Unit interface. func (this *BaseUnit) Start(ch chan<- model.Metric) { this.RLock() fetchInterval := this.fetchInterval this.RUnlock() log.Debugf("Starting fetch for unit %v...", this) ticker := time.NewTicker(fetchInterval) defer ticker.Stop() c := reflect.ValueOf(this.unit) methodFetch := c.MethodByName("Fetch") methodFetch.Call([]reflect.Value{reflect.ValueOf(ch)}) for { select { case <-this.fetchStop: return case <-ticker.C: methodFetch.Call([]reflect.Value{reflect.ValueOf(ch)}) } } }
// Stop implements the Unit interface. func (this *BaseUnit) Stop() { log.Debugf("Stopping fetch for unit %v...", this) close(this.fetchStop) log.Debugf("Fetch for unit %v stopped.", this) }