From b08b1d8620f44cd3cebfffc8de52dcc34c1db6f0 Mon Sep 17 00:00:00 2001 From: Doar Mihai Date: Sat, 28 Mar 2026 13:40:20 +0200 Subject: [PATCH] fixes to the avg duration computation --- app/Jobs/ProcessTrackingPayload.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/Jobs/ProcessTrackingPayload.php b/app/Jobs/ProcessTrackingPayload.php index c02fb80..f0a8817 100644 --- a/app/Jobs/ProcessTrackingPayload.php +++ b/app/Jobs/ProcessTrackingPayload.php @@ -110,9 +110,14 @@ class ProcessTrackingPayload implements ShouldQueue ]); } + // Calculate duration, ensuring it's never negative (handle out-of-order events) + // Use max() to ensure we use the latest timestamp for ended_at + $endedAt = $session->ended_at ? max($now, $session->ended_at) : $now; + $duration = max(0, (int) $endedAt->diffInSeconds($session->started_at, false)); + $session->update([ - 'ended_at' => $now, - 'duration' => $now->diffInSeconds($session->started_at), + 'ended_at' => $endedAt, + 'duration' => $duration, 'exit_page' => $this->payload['path'] ?? $this->payload['url'] ?? $session->exit_page, 'pages_count' => $session->pageViews()->count(), 'is_bounce' => $session->pageViews()->count() <= 1,