From 335933669d800cb9daa34849b115d6007926f86d Mon Sep 17 00:00:00 2001 From: Juan24 <93536474+juanbroder24@users.noreply.github.com> Date: Thu, 8 May 2025 10:16:55 -0300 Subject: [PATCH 1/2] FIx Usage Log get totals run out of memory --- app/Http/Controllers/UsageLogController.php | 41 ++++++++++++++------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/UsageLogController.php b/app/Http/Controllers/UsageLogController.php index 5638a06..8e15041 100644 --- a/app/Http/Controllers/UsageLogController.php +++ b/app/Http/Controllers/UsageLogController.php @@ -373,43 +373,57 @@ public function getTotals(Request $request) 'language' => 'sometimes|string', ]); try { - // Cache to be enabled in production $usageLog = new UsageLog; $query = $usageLog->query(); if (isset($request->society)) { - $query->where('endpoint', config('app.api_version') . '/org/' .$request->society.'/whatnow'); } - if (isset($request->subnational)) { + if ($request->has('subnational')) { $query->where('subnational', $request->subnational); } - if (isset($request->hazard)) { + if ($request->has('hazard')) { $query->where('event_type', 'like', '%' . $request->hazard . '%'); } - if (isset($request->date)) { + if ($request->has('date')) { $query->whereDate('timestamp', $request->date); } - if (isset($request->language)) { + if ($request->has('language')) { $query->where('language', $request->language); } - $usageLogs = $query->get(); - $uniqueApplicationIds = $usageLogs->pluck('application_id')->unique(); + $stats = $query->selectRaw('COUNT(*) as hits, COUNT(DISTINCT application_id) as unique_apps') + ->first(); - $applications = $this->applicationRepo->findIn($uniqueApplicationIds->toArray()); - // Calculate total estimated users - $totalEstimatedUsers = $applications->map(function ($application) { + $applicationQuery = $usageLog->query(); + } + if ($request->has('subnational')) { + $applicationQuery->where('subnational', $request->subnational); + } + if ($request->has('hazard')) { + $applicationQuery->where('event_type', 'like', '%' . $request->hazard . '%'); + } + } + if ($request->has('language')) { + $applicationQuery->where('language', $request->language); + } + + $uniqueApplicationIds = $applicationQuery->select('application_id') + ->pluck('application_id') + return $application->estimated_users_count; })->sum(); + $totalEstimatedUsers = $this->applicationRepo->findIn($uniqueApplicationIds) $totals = [ 'applications' => count($uniqueApplicationIds), + 'applications' => $stats->unique_apps, 'estimatedUsers' => $totalEstimatedUsers, - 'hits' => count($usageLogs), ]; + + } catch (\Exception $e) { - Log::error('Could not get Usage Log totals', ['message' => $e->getMessage()]); + \Log::error('Could not get Usage Log totals', ['message' => $e->getMessage()]); return response()->json([ 'status' => 500, 'error_message' => 'Could not get Usage Log totals', @@ -422,3 +436,4 @@ public function getTotals(Request $request) ], 200); } } + From 641c73410147f008f790ed0306ff96ddbb0ab6af Mon Sep 17 00:00:00 2001 From: Juan24 <93536474+juanbroder24@users.noreply.github.com> Date: Thu, 8 May 2025 11:19:45 -0300 Subject: [PATCH 2/2] fix_usage_logs_run_out_of_memory --- app/Http/Controllers/UsageLogController.php | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/UsageLogController.php b/app/Http/Controllers/UsageLogController.php index 8e15041..d86560d 100644 --- a/app/Http/Controllers/UsageLogController.php +++ b/app/Http/Controllers/UsageLogController.php @@ -91,7 +91,7 @@ public function getApplicationLogs(Request $request) $orderBy = $request->query('orderBy', 'name'); $sort = strtolower($request->query('sort', 'asc')) === 'desc'; $apps = $this->applicationRepo->allDesc(['id', 'tenant_user_id', 'name', 'estimated_users_count']); - + $usageLogs = collect([]); foreach ($apps as $app) { @@ -372,11 +372,13 @@ public function getTotals(Request $request) 'date' => 'sometimes|date', 'language' => 'sometimes|string', ]); + try { $usageLog = new UsageLog; $query = $usageLog->query(); - if (isset($request->society)) { + if ($request->has('society')) { + $query->where('endpoint', 'v2/org/' . $request->society . '/whatnow'); } if ($request->has('subnational')) { $query->where('subnational', $request->subnational); @@ -396,6 +398,8 @@ public function getTotals(Request $request) $applicationQuery = $usageLog->query(); + if ($request->has('society')) { + $applicationQuery->where('endpoint', 'v2/org/' . $request->society . '/whatnow'); } if ($request->has('subnational')) { $applicationQuery->where('subnational', $request->subnational); @@ -403,22 +407,28 @@ public function getTotals(Request $request) if ($request->has('hazard')) { $applicationQuery->where('event_type', 'like', '%' . $request->hazard . '%'); } + if ($request->has('date')) { + $applicationQuery->whereDate('timestamp', $request->date); } if ($request->has('language')) { $applicationQuery->where('language', $request->language); } $uniqueApplicationIds = $applicationQuery->select('application_id') + ->distinct() ->pluck('application_id') + ->toArray(); - return $application->estimated_users_count; - })->sum(); + $totalEstimatedUsers = 0; + if (!empty($uniqueApplicationIds)) { $totalEstimatedUsers = $this->applicationRepo->findIn($uniqueApplicationIds) + ->sum('estimated_users_count'); + } $totals = [ - 'applications' => count($uniqueApplicationIds), 'applications' => $stats->unique_apps, 'estimatedUsers' => $totalEstimatedUsers, + 'hits' => $stats->hits, ];