orchid/monitor
Monitor your Laravel application from inside the Orchid admin panel. orchid/monitor gathers health checks, server metrics, logs, and runtime performance into one dashboard, so you can spot issues early and keep your app running reliably without switching between tools or services.
Architecture fit. The critical framing for any decision here is that orchid/monitor is not a standalone package — it is the system-information screen bundled inside the theOrchid/Platform monorepo. There is no independent artifact to composer require, no independent release cadence, and no independent version constraint. Architecturally that means the unit of adoption is Orchid Platform as your admin panel, not "a monitor package." If Orchid is already the admin surface, this screen is a near-zero-cost addition that fits the existing layout, navigation, and permission model by construction. If Orchid is not in the stack, the architecture fit is poor: we would be introducing an entire admin framework to obtain a CPU/RAM/disk readout, which inverts the cost/benefit immediately and should be rejected on architecture grounds alone.
Integration feasibility. Where Orchid exists, feasibility is high and effort is small. The screen registers itself and inherits panel middleware; the exposed Monitor service (cpu(), ram(), disk()) can also be called from our own screens or a small JSON endpoint. The realistic integration work is not "make it appear" — that is nearly free — but the surrounding hygiene: confirming the route carries our real auth guards, SSO, and IP allow-lists rather than panel defaults, restricting by Orchid role, and verifying that the host actually permits the shell calls the service depends on. That last point is where feasibility can quietly collapse: on hardened PHP-FPM images with exec/proc_open/shell_exec disabled, the screen renders zeros or empty gauges instead of erroring. A silently wrong "0% CPU" is worse than a visible failure, and it is the single most common way this integration ships broken.
Technical risk. Ranked:
0.3, zero dependents, negligible star traction, monorepo layout. There is no Stack Overflow corpus, no third-party writeups, and no independent changelog. Behavior moves with Orchid releases. This should never sit on a critical path — specifically, it must not be the thing an on-call engineer needs in order to respond to an incident./proc and df report the container's view, not the node's, and memory figures ignore cgroup limits. In a containerized estate the numbers mislead rather than inform unless explicitly labeled container-scoped.df can block indefinitely on a stale NFS mount and there is no package-level timeout knob. Any auto-refresh or polling must be wrapped in our own process with an explicit timeout.Key questions to resolve before committing.
exec/proc_open/shell_exec available in the production runtime (verified, not assumed)?Stack fit. Fit is binary and it is decided by Orchid, not by this package. On Orchid + Laravel + Linux + non-containerized (or container-aware) hosting, it slots in with essentially no architecture work. Off Orchid, there is no migration path worth taking — the correct answer is to reach for Pulse/Horizon or a hosted APM directly, which is what we would end up doing anyway for anything beyond a glance.
Migration path. Not applicable in the usual sense; there is nothing to migrate off. The relevant path is adoption of Orchid, which is a separate, larger decision. If Orchid is already present, adoption of this screen is: confirm version alignment with our Laravel/PHP baseline, run the installer if needed, log in as admin, open the monitor route (conventionally /admin/monitor), and validate against the shell. If Orchid is absent, treat this as out of scope and record why.
Compatibility. Two axes. First, Orchid-to-Laravel/PHP version alignment — pin orchid/platform to a tested tag, never a floating constraint, and treat every Orchid upgrade as a trigger to regression-check the monitor route, permissions, and output. Second, host compatibility — Linux only in practice, shell functions enabled, no stale NFS mounts. Both must be verified in a production-like environment; demoing on a macOS laptop produces meaningless readings and hides the shell-function failure entirely. Inside containers, accept container-scoped numbers or don't ship it.
Sequencing. Deliberately small and reversible:
composer show orchid/platform and php artisan route:list | grep -i monitor. Confirm presence and pinned version. If absent, close the ticket with a note.top/free/df on the same box. Abandon if the numbers don't match the shell.Cache all service calls. Every invocation shells out; a screen refresh should not fork top three times.
Maintenance. Low effort, non-trivial ownership. The code is vendor code we do not patch — presentation changes go through php artisan vendor:publish --tag=platform-views, and behavioral gaps go into our own app/Support/Monitors/ classes so the core Monitor stays untouched and the fork-or-replace exit stays intact. The real maintenance tax is upstream coupling: because this is a monorepo module with no independent cadence, an Orchid upgrade can change behavior silently. Budget for reading vendor source at each upgrade and for one named engineer to own it.
Support. Effectively self-support. Zero dependents means no community answers, no blog posts, no third-party fixes. When it breaks, we read the source. The mitigating design choice is to keep Orchid pinned, keep our extensions outside vendor/, and keep this off any critical path so a broken page never blocks incident response.
Scaling. Two distinct concerns. Organizational scaling is the bigger one: the page's blast radius grows with admin headcount, because each additional admin sees host internals — so role discipline must scale with the team. Technical scaling is bounded and manageable: each metric call spawns a process, so concurrent admin tabs plus a tight poll interval is a self-inflicted load source. Enforce five-second minimum polling, cache aggressively, and cap concurrent pollers. Note that none of this scales into "observability" — it is point-in-time only and will never answer trend or capacity questions.
Failure modes. Plan for each explicitly:
0 or empty gauges, not exceptions. A zero that reads as "idle" is the dangerous case. Add a startup self-check that surfaces capability, and alert operators when metrics are unavailable rather than rendering a plausible zero.df against a stale NFS mount blocks with no package timeout. Wrap in our own process with an explicit timeout; know which mounts are at risk.Ramp-up. Near zero for operators and small for the owning engineer. Operators: open the page, read three numbers, compare to nothing — there is no training burden. The owning engineer needs roughly half a day to read the vendor Monitor service and screen class, run the shell-comparison validation, and complete the security review. That is the entire ramp; the risk is not learning curve, it is the absence of an external knowledge base when something drifts. Budget the debugging checklist up front: confirm route registration and middleware via route:list, resolve the service in Tinker and call cpu() directly to separate service failure from view failure, run the equivalent shell command on the host, then confirm you are on the host you think you are.
How can I help you explore Laravel packages today?