cleverage/ui-process-bundle
CleverAge/UiProcessBundle adds a simple EasyAdmin-based UX to the CleverAge ProcessBundle for Symfony, giving you a ready-made interface to view and manage your process workflows.
The Cleverage UI Process Bundle (v3.2) remains a Laravel-compatible package that extends Symfony-based process management workflows with a UI layer. It now adds scheduling control, manual process termination, stale execution detection, and log retention, making it more suitable for production-grade workflow automation. The package still leverages Symfony components (Process, Workflow, Messenger) and integrates with Laravel via service providers and Artisan commands.
However, v3.2 introduces a major dependency shift: it requires cleverage/process-bundle ^5.3 (previously ^2.0). This version of the process bundle likely requires newer Symfony and PHP versions (e.g., Symfony 7.3+, PHP 8.2+), which may not be compatible with older Laravel installations. The new features (stop checker, heartbeat, stale detection) rely on database reads/writes and DBAL, introducing tighter coupling between the UI bundle and the process execution database schema.
cleverage/process-bundle must be upgraded to ^5.3, which may itself require a newer Symfony version and PHP 8.2+.Version20261013120000 adding process_schedule.enabled; Version20261014120000 adding process_execution.stop_requested_at and heartbeat_at) must be run.process_execution.heartbeat_interval (default 5s), process_execution.stale_after (default 900s), logs.database_max_days, and logs.file_max_days (default null) need to be published and tuned.cleverage:ui-process:purge-logs (with --dry-run) should be scheduled for log retention.| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| process-bundle ^5.3 | High | Verify compatibility with current Symfony/PHP versions. Plan a staged upgrade; test in staging. |
| PHP/Symfony compatibility | Medium | Confirm process-bundle 5.3 requirements (likely PHP 8.2+, Symfony 7.3+). Upgrade Laravel stack if needed. |
| Database migrations | Low | Run migrations in a maintenance window; backup schema. Test rollback (drop columns). |
| Log purge deletion | Medium | Use --dry-run first; set conservative retention values; monitor disk usage and log volume. |
| Stop checker performance | Low | Heartbeat interval (5s) adds DB reads; monitor query load on large execution tables. |
| Stale detection false positives | Low | Tune stale_after (default 900s) to exceed longest expected task duration. |
| Schedule enable requires worker restart | Low | Document operational procedure; consider automating worker restarts via deployment hooks. |
cleverage/process-bundle version?
enabled flag defaults to true; migrating existing schedules is safe. Test disabling/re-enabling with worker restarts.logs.database_max_days and logs.file_max_days. Schedule the purge command daily. Ensure the logs option per process is set if overrides needed.process_execution.stale_after to exceed it (default 900s). Adjust heartbeat interval if DB load is a concern.| Component | Compatibility | Notes |
|---|---|---|
| Laravel | 10.x–11.x (recommended) | Symfony 7.3+ supported; Laravel 10+ required for process-bundle 5.3. |
| PHP | 8.2–8.4 (recommended: 8.3) | process-bundle 5.3 likely requires PHP 8.2+; v3.2 adds no new PHP constraint. |
| Symfony Process | 7.3+ | Required by process-bundle 5.3; ensure Laravel’s Symfony bridge matches. |
| cleverage/process-bundle | ^5.3 | Mandatory upgrade; earlier versions are incompatible. |
| Database | MySQL/PostgreSQL/SQLite | New migrations add nullable columns; test on all supported DBs. |
| Artisan | Native | New purge-logs command available. |
composer.json allows cleverage/process-bundle:^5.3.composer why-not cleverage/process-bundle:^5.3 to identify conflicts.composer.json).composer require cleverage/process-bundle:^5.3 --with-dependencies
composer require cleverage/ui-process-bundle:^3.2
php artisan vendor:publish --provider="Cleverage\UiProcessBundle\UiProcessBundle" --tag="config"
php artisan migrate
config/ui_process.php with new options:
process_execution.heartbeat_interval (default 5)process_execution.stale_after (default 900)logs.database_max_days (default null)logs.file_max_days (default null)purge-logs --dry-run and then with a short retention window.stopped.// In app/Console/Kernel.php
$schedule->command('cleverage:ui-process:purge-logs')->daily();
cleverage/process-bundle to ^5.3; run its migrations.heartbeat_interval, stale_after, and log retention values.purge-logs and monitor its output.process_execution where heartbeat_at < now() - stale_after).composer update --with-dependencies cautiously.heartbeat_interval, stale_after, log retention) must be maintained in version control. Document per-process logs overrides.purge-logs daily. After the first large purge, run the recommended database maintenance (e.g., OPTIMIZE TABLE for MySQL, VACUUM for PostgreSQL) to reclaim disk space.scheduler_cron worker. Document this and consider automating via deployment hooks.process_execution.stop_requested_at and heartbeat_at columns. Logs from ProcessExecutionStopChecker (tag cleverage_process.stop_checker) indicate when a stop is detected.heartbeat_at older than stale_after. Use “Mark as failed” (POST) if the process is unrecoverable; note that it does not stop the underlying process.cleverage:ui-process:purge-logs --dry-run to see what would be deleted. Ensure logs.file_max_days is set if you want file cleanup.heartbeat_interval seconds; long tasks may delay stopping.log_record and <code>/<uuid>.log files but keeps executions; adjust retention to meet audit needs.heartbeat_at at most every heartbeat_interval (default 5s) per running execution. For dozens of concurrent executions this is negligible; for hundreds, monitor DB write load.stop_requested_at via DBAL. Optimize with indexing on process_execution.id (primary key) – no extra index needed.--dry-run first. For large tables, batch deletes (built-in) avoid long locks.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Stop request not honored | Process continues past UI stop | Process blocked in long task call stops only when call returns. Document. |
| Stale detection false positive | Healthy process shown as “Not responding” | Increase stale_after beyond longest expected task duration. |
| Log purge deletes needed logs | Audit/compliance loss | Set conservative logs.database_max_days; use --dry-run; archive before purge. |
| Schedule enable requires restart | Unexpected schedule not running | Automate worker restart on deploy; document manual step. |
| process-bundle version conflict | Bundle fails to install or runtime errors | Pin versions; test upgrade in staging; keep rollback plan to previous full stack. |
| Heartbeat table growth | DB size increase (nullable columns) | No cleanup needed; heartbeat overwrites heartbeat_at. Monitor table size. |
| Artisan command abuse (purge) | Accidental deletion of logs | Restrict CLI access; require --dry-run confirmation in runbook. |
logs options and schedule purge command.purge-logs safely and reclaim database space.heartbeat_at < now() - stale_after) and failed stop requests.How can I help you explore Laravel packages today?