user_id !== $request->user()->id) { return response()->json([ 'message' => 'Unauthorized', ], 403); } $perPage = $request->input('per_page', 50); $perPage = min($perPage, 100); // Max 100 per page $uptimeChecks = $site->uptimeChecks() ->orderBy('checked_at', 'desc') ->paginate($perPage); return response()->json($uptimeChecks); } /** * Get uptime statistics for a site. */ public function stats(Request $request, Site $site): JsonResponse { // Ensure the site belongs to the authenticated user if ($site->user_id !== $request->user()->id) { return response()->json([ 'message' => 'Unauthorized', ], 403); } $totalChecks = $site->uptimeChecks()->count(); $successfulChecks = $site->uptimeChecks() ->whereBetween('status_code', [200, 299]) ->count(); $uptimePercentage = $totalChecks > 0 ? round(($successfulChecks / $totalChecks) * 100, 2) : 0; $averageResponseTime = $site->uptimeChecks() ->avg('response_time_ms'); $latestCheck = $site->uptimeChecks() ->latest('checked_at') ->first(); return response()->json([ 'data' => [ 'total_checks' => $totalChecks, 'successful_checks' => $successfulChecks, 'uptime_percentage' => $uptimePercentage, 'average_response_time_ms' => $averageResponseTime ? round($averageResponseTime, 2) : null, 'latest_check' => $latestCheck, ], ]); } }