diff --git a/broker/job.go b/broker/job.go index 0224096..6225cf1 100644 --- a/broker/job.go +++ b/broker/job.go @@ -1,6 +1,7 @@ package broker import ( + "encoding/base64" "fmt" "local/truckstop/config" "local/truckstop/logtr" @@ -26,6 +27,18 @@ type JobLocation struct { State string } +func (j Job) UID() string { + return fmt.Sprintf( + "%v-%s-%s-%s-%s-%v", + j.ID, + j.Pickup.State, + base64.StdEncoding.EncodeToString([]byte(j.Pickup.City)), + j.Dropoff.State, + base64.StdEncoding.EncodeToString([]byte(j.Dropoff.City)), + j.Pickup.Date.Unix(), + ) +} + func (j *Job) Secrets() { if j.secrets == nil { return diff --git a/main.go b/main.go index e9110b2..215d15b 100644 --- a/main.go +++ b/main.go @@ -291,12 +291,13 @@ func once() error { jobs[i].Secrets() } logtr.Infof("once: sending jobs: %+v", jobs) + db := config.Get().DB() for i := range jobs { if ok, err := sendJob(jobs[i]); err != nil { return err } else if ok { logtr.Debugf("sent job", jobs[i]) - if err := config.Get().DB().Set(jobs[i].ID, []byte(`sent`)); err != nil { + if err := db.Set(jobs[i].UID(), []byte(`sent`)); err != nil { return err } } @@ -368,7 +369,7 @@ func updateDeadJobs(jobs []broker.Job) error { 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 { + if _, err := db.Get(jobs[i].UID()); err == storage.ErrNotFound { } else if err != nil { return nil, err } else {