Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Job Status Bundle Laravel Package

setono/job-status-bundle

A Symfony bundle for tracking the status of asynchronous jobs and background tasks. Mark jobs as pending, running, completed, or failed, then query progress and results from anywhere in your app.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a Symfony bundle, not a Laravel package. It depends on Symfony's bundle/DI extension model (Bundle class, Extension, service definitions, likely autoconfiguration via compiler passes) and — based on the description and typical Setono patterns — on Doctrine ORM for persisting job status records. Laravel's service container, provider model, and Eloquent ORM are architecturally distinct; there is no service provider, no config bridge, and no facade. It cannot be composer required into a Laravel app and used as-is. The concept it abstracts — a durable record of an async job's lifecycle (queued → running → progress → complete/failed, with timestamps and error context) — is framework-agnostic and genuinely useful. The value here is the domain model and the design pattern, not the shipped code.

Integration feasibility. Two distinct paths:

  • If the estate includes Symfony services: low-effort, provided version constraints line up. Adopt directly.
  • If the target is a Laravel application: not directly integrable. A faithful port requires a migration, an Eloquent model + repository, a job middleware (or queue event listeners on JobProcessing / JobProcessed / JobFailed / JobExceptionOccurred), a progress-reporting contract jobs opt into, and a read endpoint for the UI. Realistic estimate for a focused engineer: 3–10 days for a production-quality minimal version, excluding UI. That is likely less total effort than writing and validating an interop shim around a Symfony bundle inside Laravel.

Technical risk. Material, and concentrated in provenance rather than code quality:

  • Last release 2022-05-13; 0 stars, 0 dependents. There is no community validation, no issue triage, no security response path, and no upstream fix for anything you find.
  • Symfony version ceilings from 2022 will likely conflict with current Symfony LTS lines; PHP constraint may also lag.
  • Doctrine ORM as a transitive dependency is a real conflict surface in a Laravel app (Doctrine DBAL is often present only for migrations tooling).
  • Concurrency and correctness are unresolved until inspected: status writes from parallel workers on the same record, retry/duplicate-delivery semantics, and whether progress updates are transactional with business state.

Key questions for the maintainer/spike:

  1. Which Symfony and PHP versions are actually supported, and is the constraint tested or aspirational?
  2. Is persistence mandatory (Doctrine) or is there a storage-agnostic interface that could be reimplemented against Eloquent/Redis?
  3. What transport does it hook — Symfony Messenger, Enqueue, or an internal abstraction? This determines the porting surface.
  4. Is progress granular (per-step percentage) or only coarse status? Granularity drives write volume and schema.
  5. Are status records queried by end users (polling, dashboards)? If so, retention and indexing become first-class.
  6. Is there an expiry/heartbeat mechanism for jobs whose worker died?

Integration Approach

Stack fit. Assuming a Laravel + PHP 8.x stack with Redis/SQS queues and Horizon, the overlap question comes first: Horizon already exposes queue-level health, recent-job inspection, tags, and wait/runtime metrics. This package addresses a different concern — business-process progress for a single long-running job that a user is waiting on. Confirm the team isn't solving a problem Horizon already covers before investing.

Migration path. Treat the repository as a reference design, not a dependency. Vendor or fork it only if the team wants the exact API; otherwise reimplement:

  1. job_statuses table: UUID, job type/class, status enum, progress (0–100 or step counter), message, serialized context, started_at, finished_at, heartbeat_at, attempt.
  2. JobStatus Eloquent model plus a small JobStatusRepository.
  3. A TracksProgress job middleware that creates the record on dispatch, marks running on JobProcessing, and terminal-states on JobProcessed / JobFailed / JobExceptionOccurred.
  4. A ProgressReporter contract injected into jobs for mid-flight updates (throttled).
  5. A read endpoint (poll or SSE/broadcast) for the UI.

Compatibility. Verify Composer constraints against the app's Laravel and PHP versions before any spike. If adopting the bundle anywhere, pin the commit and audit transitive Doctrine/Symfony ranges for conflicts against doctrine/dbal already in the lockfile. For a Laravel-native port, the only hard requirements are the framework's queue events and a storage driver — no external constraint risk.

Sequencing.

  1. Spike (1–2 days): clone, read the source, answer the six questions above. Kill or continue on evidence.
  2. Decision gate: adopt (Symfony context only) / port / build in-house / defer. Document the rationale — this is the artifact that matters more than the code.
  3. Schema + middleware behind a feature flag, one non-critical job type as pilot.
  4. Read path (endpoint, then UI polling) once write semantics are proven under load and under failure injection.
  5. Roll out per job type; only then consider retention/archival jobs.

Operational Impact

Maintenance. Effectively unmaintained. Any adoption is a fork-and-own commitment: the team inherits bug fixes, framework-version compatibility work, and security patching for a bundle running on a framework that may not even be the primary stack. A Laravel-native reimplementation of ~300–500 lines is cheaper to own than a foreign-framework fork, and this should be the default recommendation.

Support. No vendor, no SLA, no issue history to search, and 0 dependents means no community troubleshooting trail. Internal escalation is the only path — budget for that in the owning team's capacity, not in a "dependency" line item.

Scaling. The status table becomes a write-hot table proportional to job throughput and progress granularity. At high volume this needs: throttled progress writes (e.g., only on ≥5% delta or ≥2s interval), an index on (status, created_at) for dashboards, and a scheduled prune of terminal records. The read path is the other scaling risk — naive per-client polling of a progress endpoint at 1s intervals multiplies load; prefer SSE/broadcast or adaptive backoff.

Failure modes to design against explicitly:

  • Worker death mid-job: status stuck running forever. Requires a heartbeat_at column and a stale-job reaper.
  • Duplicate delivery / retries: status regression or double-counting. Terminal states must be idempotent and monotonic.
  • Transaction boundary mismatch: status committed but business write rolled back (or vice versa). Decide which is authoritative.
  • Write amplification failure: DB unavailable makes otherwise-fine jobs fail because progress reporting is on the critical path. Reporting should be best-effort and non-blocking.
  • Clock skew across workers producing nonsensical durations.

Ramp-up. Low technical ramp for a Laravel-native port — the API surface is a handful of states and one contract, learnable in under a day. Ramp-up for adopting the bundle itself is higher than it looks: engineers must read Symfony bundle conventions, DI wiring, and Doctrine mapping to debug something they cannot get upstream fixes for, in a stack they don't otherwise operate.

Bottom line for the decision record: the abstraction is worth adopting; the artifact is not. Score of ~0.50 with zero dependents and a 2022 release reflects a dormant, unvalidated package whose only durable value is as a design reference for an in-house job-progress model.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
ably/pubsub-server
mstfkhazaal/defender
mfonte/base62x
karnoweb/metapilot
tobya/bcsapiwrapper
swalker2/cpanel
vish4395/laravel-translation-manager
morningtrain/economic
teksite/systeminfo-laravel
atomcms/voting
run6/weather
siokas/laravelembeddirectives
adamlien/pkuuids
gilsonsouza/lara-doc-generator
manelgavalda/enrollment_mobile
unabomber/timezone
delatbabel/contacts
astritzeqiri/g-recaptcha
kevinongko/laravel-genode
developeruz/laravel-analytics