예제 #1
0
파일: unit.go 프로젝트: ultimatums/ultimate
// 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)})
		}
	}
}
예제 #2
0
파일: unit.go 프로젝트: ultimatums/ultimate
// 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)
}