diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..b102bf4 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,36 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + +jobs: + lint: + name: PHP Lint ${{ matrix.php }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php: + - '7.4' + - '8.0' + - '8.1' + - '8.2' + - '8.3' + - '8.4' + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP ${{ matrix.php }} + uses: shivammathur/setup-php@v4 + with: + php-version: ${{ matrix.php }} + coverage: none + + - name: Lint all PHP files + run: find app -name '*.php' -print0 | xargs -0 -n1 php -l 1>/dev/null diff --git a/README.md b/README.md index 060625b..cb6b9f2 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) ![PHP](https://img.shields.io/badge/PHP-%3E%3D7.4-777BB4.svg) +[![CI](https://github.com/GLOBUS-studio/SimpleServerStat/actions/workflows/ci.yml/badge.svg)](https://github.com/GLOBUS-studio/SimpleServerStat/actions/workflows/ci.yml) Simple, dependency-light server dashboard that shows live **CPU** and **RAM** usage (plus basic host info) in the browser. Backend is plain PHP, frontend is @@ -10,19 +11,20 @@ a single HTML page driven by [Chart.js](https://www.chartjs.org/). ## Features - Live CPU and RAM chart, refreshed every 2 seconds. -- **Non-blocking** metric collection: CPU usage is computed from a cached - `/proc/stat` snapshot and memory from `/proc/meminfo` — no slow `top`, - `mpstat` or `iostat` sampling per request. -- Graceful fallback to load-average when `/proc` is unavailable. +- **Non-blocking** metric collection: no slow `top`, `mpstat` or `iostat` + sampling. Linux uses `/proc`; Windows uses WMI (`wmic`, with PowerShell CIM + fallback). +- Cross-platform: accurate data on Linux and Windows; graceful fallback to + load average when detailed sources are unavailable. - Optional shared-secret token to gate the JSON API. - No build step and no server-side framework required. ## Requirements - PHP 7.4+ served by any web server (Apache, Nginx + PHP-FPM, or `php -S`). -- Linux for full CPU/RAM metrics (reads `/proc/stat`, `/proc/meminfo`, - `/proc/cpuinfo`). On other platforms the page still loads but live metrics - may be unavailable. +- Linux for the most precise metrics (reads `/proc`). On Windows the page and + chart work fully via WMI; on other platforms the page loads but live charts + may be empty. ## Project layout @@ -37,7 +39,7 @@ app/ ## Running -Serve the `app/` directory with PHP, for example: +Serve the `app/` directory with PHP: ```bash php -S 0.0.0.0:8080 -t app @@ -45,6 +47,9 @@ php -S 0.0.0.0:8080 -t app Then open . +On Windows you can double-click **`start.bat`** — it starts the server and +opens the browser in one step. + ## Configuration Copy the template and edit it (the real file is gitignored): @@ -68,6 +73,39 @@ the dashboard injects it automatically. | `loader.php?action=system_info` | `{ load, memory_usage }` (live) | | `loader.php?action=general` | `{ cpu_count, php_ver, os_data }` | +## Limitations / Caveats + +- On Linux the first poll after server start returns a **load-average** + approximation; subsequent polls (every 2s) show the true `/proc/stat` delta. +- On Windows `wmic` is preferred; if it is unavailable (Windows 11 24H2 has + it as an optional feature) the PowerShell CIM fallback is transparently used. +- The built-in PHP server is single-threaded. For production with multiple + concurrent viewers, serve behind Nginx or Apache. +- The shared-secret token is a basic safeguard only — because `index.php` + exposes it client-side, protect the whole `app/` directory at the web-server + level for real privacy. + +## Development + +```bash +# Start the built-in server +php -S 127.0.0.1:8080 -t app + +# Windows: one-click launcher +start.bat + +# Lint all PHP files +find app -name '*.php' -print0 | xargs -0 -n1 php -l 2>&1 | grep -v '^No syntax' +``` + +All PHP files are linted on every push and pull request via GitHub Actions +(see `.github/workflows/ci.yml`). + +## Credits + +- [Chart.js](https://www.chartjs.org/) — charting library (MIT) +- [Bootstrap](https://getbootstrap.com/) — CSS framework (MIT) + ## License Released under the [MIT License](LICENSE). diff --git a/start.bat b/start.bat new file mode 100644 index 0000000..c1d4225 --- /dev/null +++ b/start.bat @@ -0,0 +1,13 @@ +@echo off +setlocal + +echo ======================================== +echo SimpleServerStat [GLOBUS.studio] +echo ======================================== +echo. +echo Starting built-in PHP server... +start http://127.0.0.1:8080/ +php -S 127.0.0.1:8080 -t app + +endlocal +pause