simply-jobber/main.go
2025-02-20 22:59:55 -05:00

125 lines
2.5 KiB
Go

package main
import (
"fmt"
"os"
"time"
"github.com/rayaman/simply-jobber/pkg/api/queues"
"github.com/rayaman/simply-jobber/pkg/models"
)
type Data struct {
Message string `json:"message"`
}
type Data2 struct {
Msg string `json:"message"`
}
var (
Job1 models.JobType = "Test 1"
Job2 models.JobType = "Test 2"
)
func main() {
var queue models.Queue = queues.NewSimple(0)
myJob := models.Job{
Type: Job1,
Data: Data{
Message: "Job message :D",
},
}
myJob2 := models.Job{
Type: Job2,
Data: Data2{
Msg: "Job message :D",
},
}
err := queue.AddHandle(Job1, func(j models.Job) (models.JobResponse, error) {
data, err := models.GetDataFromStruct(j, Data{})
if err != nil {
return models.JobResponse{}, fmt.Errorf("cannot get data from job")
}
fmt.Printf("Got data 1 %v\n", data.Message)
time.Sleep(time.Second)
return models.JobResponse{}, nil
})
if err != nil {
panic(err)
}
err = queue.AddHandle(Job2, func(j models.Job) (models.JobResponse, error) {
data, err := models.GetDataFromStruct(j, Data2{})
if err != nil {
return models.JobResponse{}, fmt.Errorf("cannot get data from job")
}
fmt.Printf("Got data 2 %v\n", data.Msg)
time.Sleep(time.Second * 2)
return models.JobResponse{}, nil
})
if err != nil {
panic(err)
}
// queue.SetProcessor(func(j models.Job) (models.JobResponse, error) {
// switch j.Type {
// case "test":
// data, err := models.GetDataFromStruct(j, Data{})
// if err != nil {
// return models.JobResponse{}, fmt.Errorf("cannot get data from job")
// }
// include := "N/A"
// if data.Message == "Job message :D" {
// include = "Special+"
// }
// return models.JobResponse{
// Type: "test",
// Data: Data{
// Message: "Completed job :D " + include,
// },
// }, nil
// default:
// return models.JobResponse{}, fmt.Errorf("cannot process job")
// }
// })
// queue.OnJobResponse(func(jr models.JobResponse, i int) {
// data, err := models.GetDataFromStruct(models.Job(jr), Data{})
// if err != nil {
// return
// }
// fmt.Printf("JobID: %v Message: %v\n", i, data.Message)
// })
go func() {
time.Sleep(time.Second * 10)
queue.Scale(1)
time.Sleep(time.Second * 5)
queue.Scale(5)
time.Sleep(time.Second * 5)
queue.Scale(0)
time.Sleep(time.Second * 5)
queue.Scale(5)
time.Sleep(time.Second * 5)
os.Exit(0)
}()
for {
time.Sleep(time.Second * 1)
queue.Send(myJob)
time.Sleep(time.Second * 1)
queue.Send(myJob2)
}
}