Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 18 additions & 20 deletions caddy.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
package queue

import (
"runtime"
"log/slog"
"strconv"
"sync"

"github.com/caddyserver/caddy/v2"
"github.com/caddyserver/caddy/v2/caddyconfig"
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
"github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile"
"github.com/dunglas/frankenphp"
"go.uber.org/zap"
frankenphpCaddy "github.com/dunglas/frankenphp/caddy"
)

var (
worker frankenphp.Workers
logger *slog.Logger
workerMu sync.Mutex
)

func init() {
Expand All @@ -19,12 +26,9 @@ func init() {

type Queue struct {
Size int `json:"size,omitempty"`
MinThreads int `json:"min_threads,omitempty"`
NumThreads int `json:"numthreads,omitempty"`
Name string `json:"name,omitempty"`
Worker string `json:"worker,omitempty"`

ctx caddy.Context
logger *zap.Logger
}

// CaddyModule returns the Caddy module information.
Expand All @@ -36,28 +40,22 @@ func (Queue) CaddyModule() caddy.ModuleInfo {
}

func (g *Queue) Provision(ctx caddy.Context) error {
g.logger = ctx.Logger()
g.ctx = ctx

if g.Size <= 0 {
g.Size = 10_000
}

if g.MinThreads <= 0 {
g.MinThreads = runtime.NumCPU()
if g.Name == "" {
g.Name = "m#Queue"
}

if g.Worker == "" {
g.Worker = "queue-worker.php"
}

w.requestChan = make(chan *frankenphp.WorkerRequest, g.Size)
w.minThread = g.MinThreads
w.name = g.Name
w.filename = g.Worker
w.logger = g.logger

frankenphp.RegisterWorker(w)
workerMu.Lock()
worker = frankenphpCaddy.RegisterWorkers(g.Name, g.Worker, g.NumThreads)
logger = ctx.Slogger()
workerMu.Unlock()

return nil
}
Expand Down Expand Up @@ -89,7 +87,7 @@ func (g *Queue) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
return d.Errf("failed to parse size: %v", err)
}
g.Size = s
case "min_threads":
case "num":
if !d.NextArg() {
return d.ArgErr()
}
Expand All @@ -98,7 +96,7 @@ func (g *Queue) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
if err != nil {
return d.Errf("failed to parse min_threads: %v", err)
}
g.MinThreads = t
g.NumThreads = t
default:
return d.Errf(`unrecognized subdirective "%s"`, d.Val())
}
Expand Down
40 changes: 37 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,15 @@ module github.com/dunglas/frankenphp-queue

go 1.25.1

replace (
github.com/dunglas/frankenphp => ../frankenphp
github.com/dunglas/frankenphp/caddy => ../frankenphp/caddy
)

require (
github.com/caddyserver/caddy/v2 v2.10.2
github.com/dunglas/frankenphp v1.9.2-0.20251009134229-e917ab79742c
go.uber.org/zap v1.27.0
github.com/dunglas/frankenphp v1.9.2-0.20251029103633-1270784cd3ce
github.com/dunglas/frankenphp/caddy v1.9.2-0.20251029103633-1270784cd3ce
)

require (
Expand All @@ -16,14 +21,21 @@ require (
dario.cat/mergo v1.0.2 // indirect
filippo.io/edwards25519 v1.1.0 // indirect
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
github.com/BurntSushi/toml v1.5.0 // indirect
github.com/KimMachineGun/automemlimit v0.7.4 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver/v3 v3.4.0 // indirect
github.com/Masterminds/sprig/v3 v3.3.0 // indirect
github.com/MauriceGit/skiplist v0.0.0-20211105230623-77f5c8d3e145 // indirect
github.com/MicahParks/jwkset v0.9.6 // indirect
github.com/MicahParks/keyfunc/v3 v3.6.1 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/RoaringBitmap/roaring v1.9.4 // indirect
github.com/alecthomas/chroma/v2 v2.20.0 // indirect
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
github.com/aryann/difflib v0.0.0-20210328193216-ff5ff6dc229b // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bits-and-blooms/bitset v1.24.0 // indirect
github.com/caddyserver/certmagic v0.25.0 // indirect
github.com/caddyserver/zerossl v0.1.3 // indirect
github.com/ccoveille/go-safecast v1.6.1 // indirect
Expand All @@ -37,31 +49,41 @@ require (
github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
github.com/dgraph-io/ristretto v0.2.0 // indirect
github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da // indirect
github.com/dlclark/regexp2 v1.11.5 // indirect
github.com/dolthub/maphash v0.1.0 // indirect
github.com/dunglas/mercure v0.20.2 // indirect
github.com/dunglas/mercure/caddy v0.20.2 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/francoispqt/gojay v1.2.13 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/gammazero/deque v1.1.0 // indirect
github.com/go-jose/go-jose/v3 v3.0.4 // indirect
github.com/go-jose/go-jose/v4 v4.1.2 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-sql-driver/mysql v1.9.3 // indirect
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
github.com/gofrs/uuid/v5 v5.3.2 // indirect
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v1.0.0 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/cel-go v0.26.1 // indirect
github.com/google/certificate-transparency-go v1.3.2 // indirect
github.com/google/s2a-go v0.1.9 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
github.com/gorilla/handlers v1.5.2 // indirect
github.com/gorilla/mux v1.8.1 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/huandu/xstrings v1.5.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/jackc/pgx/v5 v5.7.5 // indirect
github.com/jackc/puddle/v2 v2.2.2 // indirect
github.com/kevburnsjr/skipfilter v0.0.1 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
github.com/libdns/libdns v1.1.1 // indirect
Expand All @@ -75,8 +97,10 @@ require (
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-ps v1.0.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/mschoch/smat v0.2.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.23.2 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
Expand All @@ -86,6 +110,7 @@ require (
github.com/quic-go/quic-go v0.54.0 // indirect
github.com/rs/xid v1.6.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.10.0 // indirect
github.com/shopspring/decimal v1.4.0 // indirect
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
github.com/slackhq/nebula v1.9.6 // indirect
Expand All @@ -96,12 +121,20 @@ require (
github.com/smallstep/pkcs7 v0.2.1 // indirect
github.com/smallstep/scep v0.0.0-20250318231241-a25cabb69492 // indirect
github.com/smallstep/truststore v0.13.0 // indirect
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
github.com/spf13/afero v1.14.0 // indirect
github.com/spf13/cast v1.9.2 // indirect
github.com/spf13/cobra v1.10.1 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/spf13/viper v1.20.1 // indirect
github.com/stoewer/go-strcase v1.3.1 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tailscale/tscert v0.0.0-20240608151842-d3f834017e53 // indirect
github.com/unrolled/secure v1.17.0 // indirect
github.com/urfave/cli v1.22.17 // indirect
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
github.com/yuin/goldmark v1.7.13 // indirect
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc // indirect
github.com/zeebo/blake3 v0.2.4 // indirect
go.etcd.io/bbolt v1.4.3 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
Expand All @@ -113,6 +146,7 @@ require (
go.uber.org/automaxprocs v1.6.0 // indirect
go.uber.org/mock v0.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
go.uber.org/zap/exp v0.3.0 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect
golang.org/x/crypto v0.42.0 // indirect
Expand Down
Loading