Re enable accept traffic until notifications (#3737)

* Revert "Remove 0-sized queue"

This reverts commit 6d229b3f70.

* Revert "Temporarily remove notification cron worker (#3732)"

This reverts commit 447e3929cb.

* Revert "Temporarily disable accept_traffic_until actions (#3730)"

This reverts commit 58afe3376f.

* Send accept_traffic_until notifications at 8 UTC rather than 5

* Add option for dry-run

* Expose dry_run in a dedicated function
This commit is contained in:
hq1 2024-01-29 13:37:30 +01:00 committed by GitHub
parent ee6d16d44f
commit 18ddf1e7a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 36 additions and 16 deletions

View File

@ -508,7 +508,9 @@ cloud_cron = [
# Daily at 15
{"0 15 * * *", Plausible.Workers.NotifyAnnualRenewal},
# Every midnight
{"0 0 * * *", Plausible.Workers.LockSites}
{"0 0 * * *", Plausible.Workers.LockSites},
# Daily at 8
{"0 8 * * *", Plausible.Workers.AcceptTrafficUntil}
]
crontab = if(is_selfhost, do: base_cron, else: base_cron ++ cloud_cron)
@ -524,7 +526,8 @@ base_queues = [
# NOTE: to be removed once #3700 is released
google_analytics_imports: 1,
analytics_imports: 1,
domain_change_transition: 1
domain_change_transition: 1,
check_accept_traffic_until: 1
]
cloud_queues = [

View File

@ -43,10 +43,17 @@ defmodule Plausible.Site.GateKeeper do
end
defp policy(domain, opts) when is_binary(domain) do
if site = Cache.get(domain, Keyword.get(opts, :cache_opts, [])) do
check_rate_limit(site, opts)
with from_cache <- Cache.get(domain, Keyword.get(opts, :cache_opts, [])),
site = %Site{owner: %{accept_traffic_until: accept_traffic_until}} <- from_cache do
if not is_nil(accept_traffic_until) and
Date.after?(Date.utc_today(), accept_traffic_until) do
:payment_required
else
check_rate_limit(site, opts)
end
else
@policy_for_non_existing_sites
_ ->
@policy_for_non_existing_sites
end
end

View File

@ -16,8 +16,12 @@ defmodule Plausible.Workers.AcceptTrafficUntil do
alias Plausible.Repo
alias Plausible.ClickhouseRepo
def dry_run(date) do
perform(nil, date, true)
end
@impl Oban.Worker
def perform(_job, today \\ Date.utc_today()) do
def perform(_job, today \\ Date.utc_today(), dry_run? \\ false) do
tomorrow = today |> Date.add(+1)
next_week = today |> Date.add(+7)
@ -49,16 +53,24 @@ defmodule Plausible.Workers.AcceptTrafficUntil do
for notification <- notifications do
case {has_stats?(notification.site_ids, today), notification.deadline} do
{true, ^tomorrow} ->
notification
|> store_sent(today)
|> PlausibleWeb.Email.approaching_accept_traffic_until_tomorrow()
|> Plausible.Mailer.send()
if dry_run? do
IO.puts("Will send final notification to #{notification.email}")
else
notification
|> store_sent(today)
|> PlausibleWeb.Email.approaching_accept_traffic_until_tomorrow()
|> Plausible.Mailer.send()
end
{true, ^next_week} ->
notification
|> store_sent(today)
|> PlausibleWeb.Email.approaching_accept_traffic_until()
|> Plausible.Mailer.send()
if dry_run? do
IO.puts("Will send weekly notification to #{notification.email}")
else
notification
|> store_sent(today)
|> PlausibleWeb.Email.approaching_accept_traffic_until()
|> Plausible.Mailer.send()
end
_ ->
nil

View File

@ -117,7 +117,6 @@ defmodule Plausible.Ingestion.EventTest do
assert dropped.drop_reason == :dc_ip
end
@tag :skip
test "event pipeline drops events for site with accept_trafic_until in the past" do
yesterday = Date.add(Date.utc_today(), -1)

View File

@ -14,7 +14,6 @@ defmodule Plausible.Site.GateKeeperTest do
assert {:deny, :not_found} = GateKeeper.check("example.com", opts)
end
@tag :skip
test "sites with accepted_traffic_until < now are denied", %{test: test, opts: opts} do
domain = "expired.example.com"
yesterday = Date.utc_today() |> Date.add(-1)