Set Consolidated View's timezone to what majority of sites has (#5834)
* Set Consolidated View's timezone to what majority of sites has * clean up
This commit is contained in:
parent
ce02ab0799
commit
7de63a01ae
|
|
@ -26,6 +26,7 @@ defmodule Plausible.ConsolidatedView do
|
|||
if has_sites_to_consolidate?(team) do
|
||||
consolidated_view
|
||||
|> change_stats_dates(team)
|
||||
|> change_timezone(majority_sites_timezone(team))
|
||||
|> bump_updated_at()
|
||||
|> Repo.update!()
|
||||
else
|
||||
|
|
@ -110,6 +111,10 @@ defmodule Plausible.ConsolidatedView do
|
|||
end
|
||||
end
|
||||
|
||||
defp change_timezone(site_or_changeset, timezone) do
|
||||
Ecto.Changeset.change(site_or_changeset, timezone: timezone)
|
||||
end
|
||||
|
||||
defp bump_updated_at(struct_or_changeset) do
|
||||
Ecto.Changeset.change(struct_or_changeset, updated_at: NaiveDateTime.utc_now(:second))
|
||||
end
|
||||
|
|
@ -119,7 +124,11 @@ defmodule Plausible.ConsolidatedView do
|
|||
nil ->
|
||||
{:ok, consolidated_view} =
|
||||
team
|
||||
|> Site.new_for_team(%{consolidated: true, domain: make_id(team)})
|
||||
|> Site.new_for_team(%{
|
||||
consolidated: true,
|
||||
domain: make_id(team)
|
||||
})
|
||||
|> change_timezone(majority_sites_timezone(team))
|
||||
|> change_stats_dates(team)
|
||||
|> Repo.insert()
|
||||
|
||||
|
|
@ -160,4 +169,21 @@ defmodule Plausible.ConsolidatedView do
|
|||
defp has_sites_to_consolidate?(%Team{} = team) do
|
||||
Teams.owned_sites_count(team) > 0
|
||||
end
|
||||
|
||||
defp majority_sites_timezone(%Team{} = team) do
|
||||
q =
|
||||
from(sr in Site.regular(),
|
||||
where: sr.team_id == ^team.id,
|
||||
group_by: sr.timezone,
|
||||
select: {sr.timezone, count(sr.id)},
|
||||
order_by: [desc: count(sr.id), asc: sr.timezone],
|
||||
limit: 1
|
||||
)
|
||||
|
||||
case Repo.one(q) do
|
||||
{"UTC", _count} -> "Etc/UTC"
|
||||
{timezone, _count} -> timezone
|
||||
nil -> "Etc/UTC"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -72,6 +72,34 @@ defmodule Plausible.ConsolidatedViewTest do
|
|||
{ConsolidatedView.Cache.get(team.identifier) == [site.id], :ok}
|
||||
end)
|
||||
end
|
||||
|
||||
test "sets Etc/UTC by default", %{team: team} do
|
||||
new_site(team: team)
|
||||
team = Teams.complete_setup(team)
|
||||
|
||||
assert {:ok, %Plausible.Site{timezone: "Etc/UTC"}} =
|
||||
ConsolidatedView.enable(team)
|
||||
end
|
||||
|
||||
test "sets Etc/UTC for UTC sites", %{team: team} do
|
||||
new_site(team: team, timezone: "UTC")
|
||||
team = Teams.complete_setup(team)
|
||||
|
||||
assert {:ok, %Plausible.Site{timezone: "Etc/UTC"}} =
|
||||
ConsolidatedView.enable(team)
|
||||
end
|
||||
|
||||
test "sets majority timezone by default", %{team: team} do
|
||||
new_site(team: team, timezone: "Etc/UTC")
|
||||
new_site(team: team, timezone: "Europe/Tallinn")
|
||||
new_site(team: team, timezone: "Europe/Warsaw")
|
||||
new_site(team: team, timezone: "Europe/Tallinn")
|
||||
|
||||
team = Teams.complete_setup(team)
|
||||
|
||||
assert {:ok, %Plausible.Site{timezone: "Europe/Tallinn"}} =
|
||||
ConsolidatedView.enable(team)
|
||||
end
|
||||
end
|
||||
|
||||
describe "disable/1" do
|
||||
|
|
@ -174,12 +202,23 @@ defmodule Plausible.ConsolidatedViewTest do
|
|||
|
||||
@tag :slow
|
||||
test "re-enables", %{team: team} do
|
||||
_site = new_site(team: team, native_stats_start_at: ~N[2024-01-01 12:00:00])
|
||||
_site =
|
||||
new_site(
|
||||
team: team,
|
||||
native_stats_start_at: ~N[2024-01-01 12:00:00],
|
||||
timezone: "Europe/Warsaw"
|
||||
)
|
||||
|
||||
team = Teams.complete_setup(team)
|
||||
|
||||
{:ok, first_enable} = ConsolidatedView.enable(team)
|
||||
|
||||
another_site = new_site(team: team, native_stats_start_at: ~N[2024-01-01 10:00:00])
|
||||
another_site =
|
||||
new_site(
|
||||
team: team,
|
||||
native_stats_start_at: ~N[2024-01-01 10:00:00],
|
||||
timezone: "Europe/Tallinn"
|
||||
)
|
||||
|
||||
Process.sleep(1_000)
|
||||
|
||||
|
|
@ -189,6 +228,7 @@ defmodule Plausible.ConsolidatedViewTest do
|
|||
consolidated_view = ConsolidatedView.get(team)
|
||||
assert consolidated_view.native_stats_start_at == another_site.native_stats_start_at
|
||||
assert NaiveDateTime.after?(consolidated_view.updated_at, first_enable.updated_at)
|
||||
assert consolidated_view.timezone == "Europe/Tallinn"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue