Skip to content

Commit 902f94c

Browse files
committed
refresh google auth as we go so token doesn't timeout for >1hr imports
1 parent 9eeff31 commit 902f94c

2 files changed

Lines changed: 27 additions & 22 deletions

File tree

lib/plausible/google/ga4/api.ex

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,18 +79,19 @@ defmodule Plausible.Google.GA4.API do
7979
"[#{inspect(__MODULE__)}:#{property}] Starting import from #{date_range.first} to #{date_range.last}"
8080
)
8181

82-
with {:ok, access_token} <- Google.API.maybe_refresh_token(auth) do
83-
do_import_analytics(date_range, property, access_token, persist_fn, resume_opts)
84-
end
82+
do_import_analytics(date_range, property, auth, persist_fn, resume_opts)
8583
end
8684

87-
defp do_import_analytics(date_range, property, access_token, persist_fn, [] = _resume_opts) do
85+
defp do_import_analytics(date_range, property, auth, persist_fn, [] = _resume_opts) do
8886
Enum.reduce_while(GA4.ReportRequest.full_report(), :ok, fn report_request, :ok ->
8987
Logger.debug(
9088
"[#{inspect(__MODULE__)}:#{property}] Starting to import #{report_request.dataset}"
9189
)
9290

93-
report_request = prepare_request(report_request, date_range, property, access_token)
91+
report_request =
92+
with {:ok, access_token} <- Google.API.maybe_refresh_token(auth) do
93+
prepare_request(report_request, date_range, property, access_token)
94+
end
9495

9596
case fetch_and_persist(report_request, persist_fn: persist_fn) do
9697
:ok -> {:cont, :ok}
@@ -99,7 +100,7 @@ defmodule Plausible.Google.GA4.API do
99100
end)
100101
end
101102

102-
defp do_import_analytics(date_range, property, access_token, persist_fn, resume_opts) do
103+
defp do_import_analytics(date_range, property, auth, persist_fn, resume_opts) do
103104
dataset = Keyword.fetch!(resume_opts, :dataset)
104105
offset = Keyword.fetch!(resume_opts, :offset)
105106

@@ -118,9 +119,11 @@ defmodule Plausible.Google.GA4.API do
118119
end
119120

120121
report_request =
121-
report_request
122-
|> prepare_request(date_range, property, access_token)
123-
|> Map.put(:offset, request_offset)
122+
with {:ok, access_token} <- Google.API.maybe_refresh_token(auth) do
123+
report_request
124+
|> prepare_request(date_range, property, access_token)
125+
|> Map.put(:offset, request_offset)
126+
end
124127

125128
case fetch_and_persist(report_request, persist_fn: persist_fn) do
126129
:ok -> {:cont, :ok}

test/plausible/imported/google_analytics4_test.exs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,21 @@ defmodule Plausible.Imported.GoogleAnalytics4Test do
5858

5959
opts = Keyword.put(opts, :flush_interval_ms, 10)
6060

61-
expect(Plausible.HTTPClient.Mock, :post, fn "https://www.googleapis.com/oauth2/v4/token",
62-
headers,
63-
body ->
64-
assert [{"content-type", "application/x-www-form-urlencoded"}] == headers
65-
66-
assert %{
67-
grant_type: :refresh_token,
68-
redirect_uri: "http://localhost:8000/auth/google/callback",
69-
refresh_token: "redacted_refresh_token"
70-
} = body
71-
72-
{:ok, %Finch.Response{status: 200, body: @refresh_token_body}}
73-
end)
61+
for _ <- Enum.take(@full_report_mock, 100) do
62+
expect(Plausible.HTTPClient.Mock, :post, fn "https://www.googleapis.com/oauth2/v4/token",
63+
headers,
64+
body ->
65+
assert [{"content-type", "application/x-www-form-urlencoded"}] == headers
66+
67+
assert %{
68+
grant_type: :refresh_token,
69+
redirect_uri: "http://localhost:8000/auth/google/callback",
70+
refresh_token: "redacted_refresh_token"
71+
} = body
72+
73+
{:ok, %Finch.Response{status: 200, body: @refresh_token_body}}
74+
end)
75+
end
7476

7577
for report <- @full_report_mock do
7678
expect(Plausible.HTTPClient.Mock, :post, fn _url, headers, _body, _opts ->

0 commit comments

Comments
 (0)