package main import ( "errors" "local/storage" "local/truckstop/broker" "local/truckstop/config" "log" "time" ) func main() { if err := _main(); err != nil { panic(err) } } func _main() error { for { if err := config.Refresh(); err != nil { return err } if err := once(); err != nil { return err } time.Sleep(config.Get().Interval.Get()) } return nil } func once() error { alljobs, err := getJobs() if err != nil { return err } newjobs, err := dropStaleJobs(alljobs) if err != nil { return err } jobs, err := dropBanlistJobs(newjobs) if err != nil { return err } for i := range jobs { if err := sendJob(jobs[i]); err != nil { return err } if err := config.Get().DB().Set(jobs[i].ID, []byte(`sent`)); err != nil { return err } } return nil } func getJobs() ([]broker.Job, error) { states := config.Get().States brokers := []broker.Broker{broker.NewNTGVision().WithMock()} jobs := []broker.Job{} for _, broker := range brokers { somejobs, err := broker.Search(states) if err != nil { return nil, err } jobs = append(jobs, somejobs...) } return jobs, nil } func dropStaleJobs(jobs []broker.Job) ([]broker.Job, error) { db := config.Get().DB() for i := len(jobs) - 1; i >= 0; i-- { if _, err := db.Get(jobs[i].ID); err == storage.ErrNotFound { } else if err != nil { return nil, err } else { jobs = append(jobs[:i], jobs[i+1:]...) } } return jobs, nil } func dropBanlistJobs(jobs []broker.Job) ([]broker.Job, error) { // TODO return jobs, nil } func sendJob(job broker.Job) error { // TODO log.Printf("found job: %s", job) return nil return errors.New("not impl: sendJob") }