Files
ismysiteup.online/app/Http/Controllers/UptimeController.php
T
2026-03-28 22:18:15 +02:00

92 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Site;
use App\Models\UptimeCheck;
use Illuminate\Http\Request;
class UptimeController extends Controller
{
/**
* Display uptime monitoring overview for all sites
*/
public function index()
{
$sites = Site::where('user_id', auth()->id())
->with(['uptimeChecks' => function ($query) {
$query->latest()->limit(1);
}])
->get();
// Get uptime statistics
$stats = [
'total_sites' => $sites->count(),
'sites_up' => 0,
'sites_down' => 0,
'avg_response_time' => 0,
];
$totalResponseTime = 0;
$checksCount = 0;
foreach ($sites as $site) {
$latestCheck = $site->uptimeChecks->first();
if ($latestCheck) {
if ($latestCheck->is_online) {
$stats['sites_up']++;
} else {
$stats['sites_down']++;
}
$totalResponseTime += $latestCheck->response_time_ms ?? 0;
$checksCount++;
}
}
if ($checksCount > 0) {
$stats['avg_response_time'] = round($totalResponseTime / $checksCount, 0);
}
// Get recent checks across all sites
$recentChecks = UptimeCheck::whereHas('site', function ($query) {
$query->where('user_id', auth()->id());
})
->with('site')
->latest()
->limit(50)
->get();
return view('uptime.index', compact('sites', 'stats', 'recentChecks'));
}
/**
* Display uptime details for a specific site
*/
public function show(Site $site)
{
$this->authorize('view', $site);
$uptimeChecks = $site->uptimeChecks()
->orderBy('created_at', 'desc')
->paginate(100);
// Calculate uptime percentage for last 30 days
$checksLast30Days = $site->uptimeChecks()
->where('created_at', '>=', now()->subDays(30))
->get();
$avgResponseTime = $checksLast30Days->map(function ($check) {
return $check->response_time_ms ?? 0;
});
$avgResponseTime = number_format(array_sum($avgResponseTime->toArray())/$checksLast30Days->count(), 0);
$uptimePercentage = 0;
if ($checksLast30Days->count() > 0) {
$upCount = $checksLast30Days->where('is_online', true)->count();
$uptimePercentage = round(($upCount / $checksLast30Days->count()) * 100, 2);
}
return view('uptime.show', compact('site', 'uptimeChecks', 'uptimePercentage', 'avgResponseTime'));
}
}