Skip to content

Instantly share code, notes, and snippets.

@Shaz3e
Last active November 24, 2024 23:53
Show Gist options
  • Save Shaz3e/0a199d7300b5ad13e5ecfefbfebbdfbd to your computer and use it in GitHub Desktop.
Save Shaz3e/0a199d7300b5ad13e5ecfefbfebbdfbd to your computer and use it in GitHub Desktop.
Get Server Usage in Laravel - Unix-based systems (Linux, macOS)

Install

composer require symfony/process

Create Service Class

php artisan make:class Services/ServerMonitor

Create Controller

php artisan make:controller ServerMonitorController

Add Routes

web.php

Create Blade File

server-monitor.blade.php

Example

Server Usage CPU Load: 0.67 (1 min load) Memory Usage: 1.60 MB / 1.79 MB (89.22%) Disk Usage: 18.76 GB / 19.99 GB (93.84%)

<div>
<h3>Server Usage</h3>
<p><strong>CPU Load:</strong> <span id="cpu-load">Loading...</span></p>
<p>
<strong>Memory Usage:</strong>
<span id="memory-usage">Loading...</span>
(<span id="memory-percentage">Loading...</span>%)
</p>
<p>
<strong>Disk Usage:</strong>
<span id="disk-usage">Loading...</span>
(<span id="disk-percentage">Loading...</span>%)
</p>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
fetch('/api/server-stats')
.then(response => response.json())
.then(data => {
document.getElementById('cpu-load').textContent = `${data.cpu} (1 min load)`;
document.getElementById('memory-usage').textContent = `${(data.memory.used / 1024 / 1024).toFixed(2)} MB / ${(data.memory.total / 1024 / 1024).toFixed(2)} MB`;
document.getElementById('memory-percentage').textContent = data.memory.percentage;
document.getElementById('disk-usage').textContent = `${(data.disk.used / 1024 / 1024 / 1024).toFixed(2)} GB / ${(data.disk.total / 1024 / 1024 / 1024).toFixed(2)} GB`;
document.getElementById('disk-percentage').textContent = data.disk.percentage;
})
.catch(error => {
console.error('Error fetching server stats:', error);
});
});
</script>
<?php
// Create file inside Services folder
// php artisan make:class Services/ServerMonitor
namespace App\Services;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;
class ServerMonitor
{
public static function getCpuUsage()
{
$load = sys_getloadavg();
return $load[0]; // Load for the past minute
}
public static function getMemoryUsage()
{
$free = shell_exec('free');
$lines = explode("\n", trim($free));
$memInfo = preg_split('/\s+/', $lines[1]);
$totalMemory = $memInfo[1];
$usedMemory = $memInfo[2];
return [
'total' => $totalMemory,
'used' => $usedMemory,
'percentage' => round(($usedMemory / $totalMemory) * 100, 2),
];
}
public static function getDiskUsage()
{
$diskTotal = disk_total_space("/");
$diskFree = disk_free_space("/");
$diskUsed = $diskTotal - $diskFree;
return [
'total' => $diskTotal,
'used' => $diskUsed,
'free' => $diskFree,
'percentage' => round(($diskUsed / $diskTotal) * 100, 2),
];
}
}
<?php
namespace App\Http\Controllers;
use App\Services\ServerMonitor;
use Illuminate\Http\Request;
class ServerMonitorController extends Controller
{
public function index()
{
return view('server-monitor');
}
public function getServerStats()
{
return response()->json([
'cpu' => ServerMonitor::getCpuUsage(),
'memory' => ServerMonitor::getMemoryUsage(),
'disk' => ServerMonitor::getDiskUsage(),
]);
}
}
<?php
use App\Http\Controllers\ServerMonitorController;
Route::get('/server-monitor', [ServerMonitorController::class, 'index']);
Route::get('/api/server-stats', [ServerMonitorController::class, 'getServerStats']);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment