analytics / extra /lib /plausible /stats /sampling_cache.ex
Leon4gr45's picture
Upload folder using huggingface_hub (part 2)
936b397 verified
Raw
History Blame Contribute Delete
1.39 kB
defmodule Plausible.Stats.SamplingCache do
@moduledoc """
Cache storing estimation for events ingested by a site in the past month.
Used for sampling rate calculations in Plausible.Stats.Sampling.
"""
alias Plausible.Ingestion
import Ecto.Query
use Plausible.Cache
@cache_name :stats_sampling_cache
@impl true
def name(), do: @cache_name
@impl true
def child_id(), do: :cache_stats_sampling
@impl true
def repo(), do: Plausible.ClickhouseRepo
@impl true
def count_all() do
base_db_query()
|> repo().all()
|> length()
end
@impl true
def base_db_query() do
from(r in Ingestion.Counters.Record,
select: {
r.site_id,
selected_as(fragment("sumIf(value, metric = 'buffered')"), :events_ingested)
},
where: fragment("toDate(event_timebucket) >= ?", ^thirty_days_ago()),
group_by: r.site_id
)
end
@impl true
def get_from_source(site_id) do
base_db_query()
|> repo().all()
|> Map.new()
|> Map.get(site_id)
end
@spec consolidated_get(list(pos_integer()), Keyword.t()) :: pos_integer() | nil
def consolidated_get(site_ids, opts \\ []) when is_list(site_ids) do
events_ingested = Enum.sum_by(site_ids, &(get(&1, opts) || 0))
if events_ingested > 0, do: events_ingested
end
defp thirty_days_ago() do
Date.shift(Date.utc_today(), day: -30)
end
end