tasks

package
v0.42.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 18, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package tasks provides a durable task client for Hanzo Tasks.

Drop-in replacement for Base's Cron():

// Before (cron):
e.App.Cron().Add("settlement", "*/30 * * * * *", func() { ... })

// After (tasks — duration):
app.Tasks().Add("settlement", "30s", fn)

// After (tasks — cron expression):
app.Tasks().Add("daily-cleanup", "0 3 * * *", fn)

Accepts both Go duration strings ("30s", "5m", "1h") and cron expressions ("0 3 * * *", "0 0 * * 1", "0 0 5 1,4,7,10 *"). Detection is automatic: if time.ParseDuration succeeds, it's a duration; otherwise it's cron.

If TASKS_URL is set, schedules run as durable Temporal workflows (retries, dead letter, audit trail). If not, runs locally via goroutine timer (dev mode, same behavior as cron but no persistence).

If zapAddr is set, ZAP binary transport is preferred over HTTP for submitting tasks (lower latency, same semantics). HTTP is fallback.

Package tasks provides the Hanzo Tasks client for Go applications.

Two methods, two use cases:

app.Tasks().Add("settlement", "30s", fn)           // recurring (duration)
app.Tasks().Add("daily-cleanup", "0 3 * * *", fn)  // recurring (cron)
app.Tasks().Now("webhook.deliver", payload)         // fire once immediately

Add() auto-detects duration strings vs cron expressions. Transport: ZAP (binary) > HTTP > local goroutine.

Index

Constants

View Source
const (
	OpcodeTaskSubmit   uint16 = 0x0050 // one-shot task
	OpcodeTaskSchedule uint16 = 0x0051 // recurring schedule
)

ZAP opcodes for task submission.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client manages both one-shot tasks and recurring schedules.

func New

func New(tasksURL, zapAddr string, handler Handler) *Client

New creates a Client. If both tasksURL and zapAddr are empty, everything runs locally. If zapAddr is set, ZAP transport is preferred. HTTP is fallback.

func (*Client) Add

func (c *Client) Add(name, schedule string, fn func()) error

Add registers a recurring task. schedule is either a Go duration string ("30s", "5m", "1h") or a cron expression ("0 3 * * *", "0 0 * * 1"). Detection is automatic via time.ParseDuration.

app.Tasks().Add("settlement", "30s", fn)            // every 30 seconds
app.Tasks().Add("daily-cleanup", "0 3 * * *", fn)   // daily at 3am UTC
app.Tasks().Add("weekly-report", "0 0 * * 1", fn)   // mondays at midnight

func (*Client) Now

func (c *Client) Now(taskType string, payload map[string]any) error

Enqueue submits a one-shot task for durable execution. Prefers ZAP transport when zapAddr is configured, falls back to HTTP.

func (*Client) Stop

func (c *Client) Stop()

Stop cancels all local schedules and closes ZAP connection. Call on shutdown.

type Handler

type Handler func(taskType string, payload map[string]any)

Handler processes a one-shot task (webhook delivery, settlement, etc.)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL