66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package scheduler
 | 
						|
 | 
						|
import (
 | 
						|
	"loafle.com/overflow/collector_go/scheduler/cron"
 | 
						|
	c "loafle.com/overflow/crawler_go"
 | 
						|
	"log"
 | 
						|
	"strconv"
 | 
						|
	"sync"
 | 
						|
)
 | 
						|
 | 
						|
const DEFAULT_INTERVAL = 5
 | 
						|
 | 
						|
type Scheduler struct {
 | 
						|
	crawler  *c.CrawlerImpl
 | 
						|
	once     sync.Once
 | 
						|
	cronChan chan bool
 | 
						|
}
 | 
						|
 | 
						|
func (s *Scheduler) Init() {
 | 
						|
	s.once.Do(func() {
 | 
						|
		s.cronChan = cron.Start()
 | 
						|
		s.crawler = &c.CrawlerImpl{}
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
func (s *Scheduler) Stop() {
 | 
						|
	s.cronChan <- false
 | 
						|
}
 | 
						|
 | 
						|
func (s *Scheduler) NewSchedule(id, interval string, fn interface{}) error {
 | 
						|
	return s.newSchedule(id, interval, fn)
 | 
						|
}
 | 
						|
 | 
						|
func (s *Scheduler) RemoveSchedule(id string) error {
 | 
						|
	return cron.Remove(id)
 | 
						|
}
 | 
						|
 | 
						|
func (s *Scheduler) RemoveAllSchedule() error {
 | 
						|
	return cron.RemoveAll()
 | 
						|
}
 | 
						|
 | 
						|
func (s *Scheduler) UpdateSchedule(id string, interval string) {
 | 
						|
	i, err := strconv.Atoi(interval)
 | 
						|
	if err != nil {
 | 
						|
		i = DEFAULT_INTERVAL
 | 
						|
	}
 | 
						|
	cron.UpdateTask(id, uint64(i-1))
 | 
						|
}
 | 
						|
 | 
						|
func (s *Scheduler) newSchedule(id string, interval string, fn interface{}) error {
 | 
						|
	i, err := strconv.Atoi(interval)
 | 
						|
	if err != nil {
 | 
						|
		i = DEFAULT_INTERVAL
 | 
						|
	}
 | 
						|
	return cron.AddTask(id, uint64(i-1)).Invoke(fn, id)
 | 
						|
}
 | 
						|
 | 
						|
func (s *Scheduler) requestGet(id string) {
 | 
						|
	data, err := s.crawler.Get(id)
 | 
						|
	if err != nil {
 | 
						|
		log.Printf("[ID: %s] An error has occurred. %s", id, err.Error())
 | 
						|
		return
 | 
						|
	}
 | 
						|
	log.Println(data)
 | 
						|
}
 |