A lot more to go, but this is the core. Need to think about how to test the queue handlers.
40 lines
988 B
Go
40 lines
988 B
Go
package engine
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"git.jadud.com/jadudm/grosbeak/internal/liteq"
|
|
base "git.jadud.com/jadudm/grosbeak/internal/types"
|
|
)
|
|
|
|
func Entre(queue *liteq.JobQueue, ej *base.EntreJob) error {
|
|
n := time.Now()
|
|
|
|
var ignore_tag string
|
|
|
|
switch ej.UpdateFrequency {
|
|
case base.UPDATE_DAILY:
|
|
ignore_tag = fmt.Sprintf("%s|y%d-yd%d", ej.URL, n.Year(), n.YearDay())
|
|
case base.UPDATE_WEEKLY:
|
|
ignore_tag = fmt.Sprintf("%s|y%d-w%d", ej.URL, n.Year(), n.YearDay()/7)
|
|
case base.UPDATE_MONTHLY:
|
|
ignore_tag = fmt.Sprintf("%s|y%d-m%d", ej.URL, n.Year(), n.Month())
|
|
default:
|
|
ignore_tag = fmt.Sprintf("%s|y%d-yd%d", ej.URL, n.Year(), n.YearDay())
|
|
}
|
|
|
|
err := queue.QueueJob(context.Background(), liteq.QueueJobParams{
|
|
Queue: "fetch",
|
|
// This only works for things in the `queued` state
|
|
DedupingKey: liteq.IgnoreDuplicate(ignore_tag),
|
|
Job: ej.AsJson(),
|
|
})
|
|
if err != nil {
|
|
log.Printf("entre err %s: %s\n", ej.URL, err.Error())
|
|
}
|
|
return err
|
|
}
|