truckstop/main.go

119 lines
2.0 KiB
Go

package main
import (
"errors"
"local/storage"
"local/truckstop/broker"
"local/truckstop/config"
"log"
"time"
)
func main() {
go func() {
email()
c := time.NewTicker(time.Minute)
for range c.C {
if err := email(); err != nil {
log.Print(err)
}
}
}()
if err := _main(); err != nil {
panic(err)
}
}
func email() error {
ch, err := config.Get().Emailer.ReadIMAP()
if err != nil {
return err
}
for email := range ch {
log.Printf("%+v", email)
}
return errors.New("not impl")
}
func _main() error {
for {
if err := config.Refresh(); err != nil {
return err
}
if err := once(); err != nil {
return err
}
if config.Get().Once {
break
}
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
ntg := broker.NewNTGVision()
if config.Get().Brokers.NTG.Mock {
ntg = ntg.WithMock()
}
brokers := []broker.Broker{ntg}
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
}