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 ?? 0; $checksCount++; } } if ($checksCount > 0) { $stats['avg_response_time'] = round($totalResponseTime / $checksCount, 2); } // 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(); $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')); } }