File size: 1,418 Bytes
8da2481 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | defmodule Plausible.Site.TrackerScriptCache do
@moduledoc """
Caches the full tracker script.
Must be refreshed whenever the TrackerScriptConfiguration associated with the script changes.
"""
alias Plausible.Site.TrackerScriptConfiguration
alias PlausibleWeb.Tracker
import Ecto.Query
use Plausible
use Plausible.Cache
@cache_name :tracker_script_cache
@impl true
def name(), do: @cache_name
@impl true
def child_id(), do: :cache_tracker_script
def cache_content(
%TrackerScriptConfiguration{site: %{domain: _domain}} = tracker_script_configuration
),
do: Tracker.build_script(tracker_script_configuration)
@impl true
def count_all() do
Plausible.Repo.aggregate(TrackerScriptConfiguration, :count)
end
@impl true
def base_db_query(), do: Tracker.get_tracker_script_configuration_base_query()
@impl true
def get_from_source(id) do
case Tracker.get_tracker_script_configuration_by_id(id) do
%TrackerScriptConfiguration{site: %{domain: _domain}} = tracker_script_configuration ->
cache_content(tracker_script_configuration)
_ ->
nil
end
end
@impl true
def unwrap_cache_keys(items) do
Enum.reduce(items, [], fn
tracker_script_configuration, acc ->
[
{tracker_script_configuration.id, cache_content(tracker_script_configuration)}
| acc
]
end)
end
end
|