analytics/lib/workers/import_google_analytics.ex
2022-03-22 12:01:39 +02:00

52 lines
1.3 KiB
Elixir

defmodule Plausible.Workers.ImportGoogleAnalytics do
use Plausible.Repo
use Oban.Worker,
queue: :google_analytics_imports,
max_attempts: 1,
unique: [fields: [:args], period: 60]
@impl Oban.Worker
def perform(
%Oban.Job{args: %{"site_id" => site_id, "view_id" => view_id, "end_date" => end_date}},
google_api \\ Plausible.Google.Api
) do
site =
Repo.get(Plausible.Site, site_id)
|> Repo.preload([:google_auth, [memberships: :user]])
case google_api.import_analytics(site, view_id, end_date) do
{:ok, _} ->
Plausible.Site.import_success(site)
|> Repo.update!()
Enum.each(site.memberships, fn membership ->
if membership.role in [:owner, :admin] do
PlausibleWeb.Email.import_success(membership.user, site)
|> Plausible.Mailer.send_email_safe()
end
end)
:ok
{:error, error} ->
import_failed(site)
{:error, error}
end
end
def import_failed(site) do
site = Repo.preload(site, memberships: :user)
Plausible.Site.import_failure(site) |> Repo.update!()
Enum.each(site.memberships, fn membership ->
if membership.role in [:owner, :admin] do
PlausibleWeb.Email.import_failure(membership.user, site)
|> Plausible.Mailer.send_email_safe()
end
end)
end
end