gijsg/system-resources
gijsg/system-resources is a Laravel package for reading server system resource usage—CPU load, memory, disk space, and similar metrics—from PHP. It offers straightforward helpers and APIs for displaying resource stats in dashboards, admin panels, or health checks.
Architecture fit. gijsg/system-resources is a single-purpose Laravel Nova card: one PHP Card class that gathers host metrics at request time (load average, memory, disk) plus a Vue component that renders them as a dashboard tile. There is no persistence layer, no time-series store, no thresholding, and no alerting. It is an at-a-glance convenience widget, not monitoring. It fits only if the product requirement is literally "show a resource tile inside the Nova admin panel" — anything beyond that (history, multi-node rollup, alerting) is out of scope by design and should not be retrofitted onto it.
Integration feasibility. The hard dependency is Nova itself, which is commercial, closed-source, and versioned. The published release dates to May 2020, which places it in the Nova 3 era. Nova 4 (2022) moved card asset compilation to Vite and changed registration conventions; Nova 5 (2024) continued that drift. A card of this vintage is a likely break on modern Nova: the JS build pipeline, the Nova::script()/Nova::style() calls, and the component scaffolding all need verification before any commitment. Budget this as a fork, not an install.
Technical risk. The dominant risk is abandonment, not code quality. Twenty-nine stars, zero dependents, and no release in roughly six years means there is no community triage, no CVE response, and no compatibility patches. Secondary risks are environmental: metric collection typically relies on sys_getloadavg(), /proc reads, or shell calls, all of which behave differently on Linux vs. macOS vs. Windows, and differently again under cgroup v1 vs. v2 in containers. In a locked-down container the calls can fail silently and render zeros — a failure mode that looks like healthy headroom.
Key questions for the requesting team.
Stack fit. Narrow: Laravel + Nova only. It is inert outside Nova and provides no API, no events, and no reusable service. Treat it as a UI artifact, not infrastructure.
Migration path. Two viable routes.
Compatibility matrix to verify before work starts. Nova 3/4/5, PHP version, Linux vs. macOS, cgroup v1/v2, and the presence of exec/proc access in the runtime.
Sequencing.
Maintenance. Effectively unmaintained upstream; any adoption transfers the maintenance burden to us. The code is small enough that upkeep is modest, but it recurs at every Nova upgrade — an obligation that outlives the original requester's tenure, which is precisely the kind of debt a TPM should price up front.
Support. No upstream support channel. Nova's own support will not cover third-party cards, so every incident routes to the internal owner. Document the fork owner and escalation path explicitly.
Scaling. Single-host by construction. On a fleet it produces N disconnected tiles, each reporting its own pod's limits — visually reassuring and operationally wrong. It does not aggregate, does not compare nodes, and cannot answer "which host is hot." For anything beyond a single-VM admin panel this is the wrong tool.
Failure modes.
Ramp-up. Low for any Laravel developer — an hour to read the source. The hidden ramp is Nova version archaeology and confirming runtime metric access, which is where the real time goes.
Recommendation. Do not adopt as a dependency. Run the spike only to confirm the gap, then default to Laravel Pulse or an APM tool. Adopt this package only as a short-lived internal fork with a named owner, a documented Nova-version pin, and an explicit decision to revisit at the next Nova upgrade — and communicate to stakeholders that this tile is a convenience, not a monitoring capability.
How can I help you explore Laravel packages today?