bilias/rqwatch
bilias/rqwatch is a lightweight Laravel package for watching Redis queues. It gives visibility into queued jobs and queue activity, helping you spot stalled or failing work and keep background processing healthy.
force_actions.conf, MAILER_* config correctness). Treat it as a candidate to replace commercial quarantine/reporting tooling only if you already run Rspamd and have ops capacity./maps files under the shipped Apache config, login timing-based username enumeration, log-line injection, and CSRF-less logout. It also stops non-admins from seeing the absolute quarantine path, stores IP map entries in canonical form, throttles IPv6 logins per /64, and removes the login delay on unmatched routes/blocked IPs/empty credentials. If a security review is on the roadmap, this release is the forcing function to schedule it.$notification_links_one_time = false before announcing self-service to users.cron:fuzzy_cleanup retention default 90 days), clickable per-month quarantine chart, virus notification skip map (case-insensitive globs), cron:notifications -B to notify on blacklisted mail at any score, and IPv6 IP maps are the headline capabilities to slot into a roadmap or explicitly defer.ever_stored index migration scales with mail_logs (~2s on ~860k rows) and blocks writes cluster-wide under Galera. With $import_spool (default) imports are spooled and replayed by cron:import_spool, which bounds the user-visible impact — but the release requires a quiet window, which is a scheduling decision, not just an ops one.MAILER_FROM is empty, and MAILER_DSN/MAILER_FROM are validated on the node that actually sends the release. That turns a .env drift into a user-facing "I can't release my mail" ticket — decide whether that gets a monitoring check. Alongside it: DB_WEB_MAX_STATEMENT_TIME (default 30s) caps runaway searches, DNS failures are cached 60s instead of a negative 3600s TTL, searches land on a plain GET results page (Back/refresh/paging work), and malformed Rspamd symbols are repaired and logged instead of failing the import. Together these reduce "the app is slow/broken" tickets — a direct support-cost lever.Consider it when:
db:migrate, editing .env, Apache Location blocks, and Rspamd local.d configs.MAILER_DSN/MAILER_FROM are set on every node that can send a release — otherwise self-service release breaks for users on that node.$USER_MAP_MAX_ENTRIES = 0; a whitelisted mail is only shown green when the whitelist actually won (not on a forced reject/discard).Look elsewhere when:
force_actions.conf — is Rspamd-shaped).ever_stored index build, or you have a very large mail_logs table and no spool/replay tolerance.<Location /maps> block restricted to specific Rspamd source IPs — i.e. you cannot guarantee the network control the fix depends on.CHANGE_ME_ placeholder passwords hard-fail mail import and remote get/release.rqwatch_virus_no_notify already — the migration will fail until you repoint $notification_skip_virus_map; messy for you, and a signal the schema is opinionated.Diligence items before committing: confirm whether this is consumable as a Composer/Laravel-integrated package or is a standalone PHP application (./bin/cli.php suggests the latter) — that changes the integration cost materially; confirm upgrade support matrix and maintenance cadence; confirm Galera/topology assumptions; confirm where release audit logs land and how long they are kept.
To executives: This is a self-hosted quarantine and mail-visibility console for our Rspamd-based mail stack — an alternative to licensing commercial quarantine tooling. The new 2.1.2 release is, above all, a security release: it fixes a set of access-control and data-exposure bugs (users could act on other users' map entries, BCC recipients were visible to non-admins, whitelist/personal map files were world-readable under the shipped web config, sessions survived permission and credential changes), and it hides internal quarantine paths from non-admins. It also adds per-release audit logging and admin-side fuzzy learning. We should treat it as a prioritised security upgrade, not a routine version bump. Cost is an engineering change window plus a short coordinated config change across the web tier, Apache and Rspamd — not a new licence line.
To engineering: v2.1.2 is a breaking security release with a narrow upgrade path.
db:migrate applies five migrations (Mail Log Fuzzy, fuzzy hit/updated_at, ever_stored column + index, Users session_version, Virus notification skip map). All fast except the ever_stored index, which scales with mail_logs (~2s at ~860k rows) and blocks writes cluster-wide under Galera — schedule a quiet window. $import_spool (default) spools failed imports for cron:import_spool replay.grep -nE '^(RSPAMD|MAIL)_API_PASS=CHANGE_ME_' .env — the importer and mail APIs now refuse placeholders; change RSPAMD_API_PASS in .env and metadata_exporter.conf together. Also verify MAILER_DSN and MAILER_FROM on each web node: password-less release is refused with a message while MAILER_FROM is empty, and the check runs on the node that sends the release.<Location /maps> block from contrib/apache-rqwatch.conf and restrict it to the Rspamd servers that fetch maps; add contrib/rspamd/local.d/force_actions.conf and adjust the antivirus symbol expression (it now discards viruses even from whitelisted senders).rqwatch_virus_no_notify already exists, the skip-map migration fails — set $notification_skip_virus_map and re-run.$notification_links_one_time, $notification_links_idle_minutes); current password required to change password and it ends other sessions; personal map entries capped at 1000/user/map; every release is logged to file and syslog; whitelisted mail is only green when the whitelist actually won.cron:fuzzy_cleanup (90-day default), cron:notifications -B for blacklisted mail at any score, IPv6 in IP maps (stored canonically), clickable per-month quarantine chart, release form on the mail list page shared with the detail page, DB statement cap (30s), saner DNS failure caching, importer self-repair of malformed Rspamd symbols, IPv6 /64-aware login throttling, and search pages that survive Back/refresh.Recommendation: schedule the upgrade as a security change with a named quiet window, land the .env/MAILER_*/Apache/Rspamd changes in the same change set (the map-file exposure fix is incomplete without the Apache block), add a check that MAILER_FROM is set on every sending node, and brief the help desk on the notification-link and password-change changes before rollout. If we cannot get the write window or the Apache restriction, that is a reason to defer the upgrade and document the residual risk — not to run it half-applied.
How can I help you explore Laravel packages today?