mirror of
https://github.com/imjasonh/delay
synced 2026-07-07 00:33:26 +00:00
57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/chainguard-dev/clog"
|
|
_ "github.com/chainguard-dev/clog/gcp/init"
|
|
"github.com/imjasonh/delay"
|
|
)
|
|
|
|
func main() {
|
|
delay.Init()
|
|
|
|
http.HandleFunc("/start", handler)
|
|
if err := http.ListenAndServe(":8080", nil); err != nil {
|
|
clog.Fatalf("ListenAndServe: %v", err)
|
|
}
|
|
}
|
|
|
|
var delayFunc = delay.Func(func(ctx context.Context, a, b, c string) error {
|
|
clog.FromContext(ctx).Infof("Delayed func called: %s %s %s", a, b, c)
|
|
if a == b {
|
|
return errors.New("a == b")
|
|
}
|
|
return nil
|
|
})
|
|
|
|
func handler(w http.ResponseWriter, r *http.Request) {
|
|
ctx := r.Context()
|
|
|
|
queueName := os.Getenv("QUEUE")
|
|
|
|
// call it now
|
|
if err := delayFunc.Call(ctx, r, queueName,
|
|
"right", "now", "!!!1!",
|
|
); err != nil {
|
|
clog.Errorf("call: %v", err)
|
|
fmt.Fprintln(w, err)
|
|
} else {
|
|
fmt.Fprintln(w, "immediate call done")
|
|
}
|
|
|
|
// ...and call it in 10 seconds
|
|
if err := delayFunc.Delay(ctx, r, queueName, 10*time.Second,
|
|
"a", "b", "c",
|
|
); err != nil {
|
|
clog.Errorf("delay: %v", err)
|
|
fmt.Fprintln(w, err)
|
|
} else {
|
|
fmt.Fprintln(w, "delay enqueued")
|
|
}
|
|
}
|