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