replace analytics double-count prevention with buffer supersede
All checks were successful
deploy / deploy (push) Successful in 1m13s
All checks were successful
deploy / deploy (push) Successful in 1m13s
The Plug records a pageview with a known ID (plug_ref) into the ETS buffer. When JS connects, the LiveView hook supersedes that event by ID and records its own with full data (screen_size from connect params). If JS never connects, the Plug's event flushes normally after 10s. Also fixes: admin browsing no longer leaks product_view events — the Plug now sets no analytics session data for admins, so all downstream visitor_hash guards naturally filter them out. Replaces the previous time-based skip logic which was brittle and race-prone. The supersede approach is deterministic and handles both the ETS buffer and already-flushed DB cases. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -42,8 +42,6 @@ defmodule BerrypodWeb.Plugs.AnalyticsTest do
|
||||
:timer.sleep(50)
|
||||
|
||||
count_after = Repo.aggregate(Event, :count)
|
||||
# POST to /checkout shouldn't create a pageview event via the plug
|
||||
# (it may fail with a redirect, but the plug should have skipped)
|
||||
assert count_after == count_before
|
||||
end
|
||||
|
||||
@@ -71,6 +69,17 @@ defmodule BerrypodWeb.Plugs.AnalyticsTest do
|
||||
assert get_session(conn, "analytics_browser") == "Firefox"
|
||||
end
|
||||
|
||||
test "stores plug_ref in session for buffer supersede", %{conn: conn} do
|
||||
conn =
|
||||
conn
|
||||
|> put_req_header("user-agent", "Mozilla/5.0 Chrome/120.0")
|
||||
|> get(~p"/")
|
||||
|
||||
plug_ref = get_session(conn, "analytics_plug_ref")
|
||||
assert is_binary(plug_ref)
|
||||
assert String.length(plug_ref) == 36
|
||||
end
|
||||
|
||||
test "extracts referrer", %{conn: conn} do
|
||||
conn
|
||||
|> put_req_header("user-agent", "Mozilla/5.0 Chrome/120.0")
|
||||
|
||||
Reference in New Issue
Block a user