| defmodule Plausible.Stats.Metrics do |
| @moduledoc """ |
| A module listing all available metrics in Plausible. |
| |
| Useful for an explicit string to atom conversion. |
| """ |
|
|
| use Plausible |
|
|
| @revenue_metrics on_ee(do: Plausible.Stats.Goal.Revenue.revenue_metrics(), else: []) |
|
|
| @all_metrics [ |
| :visitors, |
| :visits, |
| :pageviews, |
| :exit_rate, |
| :views_per_visit, |
| :bounce_rate, |
| :visit_duration, |
| :events, |
| :conversion_rate, |
| :total_visitors, |
| :group_conversion_rate, |
| :time_on_page, |
| :percentage, |
| :scroll_depth |
| ] ++ @revenue_metrics |
|
|
| @metric_mappings Enum.into(@all_metrics, %{}, fn metric -> {to_string(metric), metric} end) |
|
|
| def metric?(value), do: Enum.member?(@all_metrics, value) |
|
|
| on_ee do |
| |
| def default_value(metric, query, row_dimensions) when metric in @revenue_metrics do |
| Plausible.Stats.Goal.Revenue.format_revenue_metric(nil, query, row_dimensions) |
| end |
| end |
|
|
| def default_value(metric, _query, _dimensions), do: default_value(metric) |
|
|
| on_ee do |
| |
| |
| def default_value(metric, query) when metric in @revenue_metrics do |
| currency = query.revenue_currencies.default |
| Plausible.Stats.Goal.Revenue.format_revenue_metric(nil, currency) |
| end |
| end |
|
|
| def default_value(metric, _query), do: default_value(metric) |
|
|
| def default_value(:visit_duration), do: nil |
| def default_value(:exit_rate), do: nil |
| def default_value(:scroll_depth), do: nil |
| def default_value(:time_on_page), do: nil |
|
|
| @float_metrics [ |
| :views_per_visit, |
| :bounce_rate, |
| :percentage, |
| :conversion_rate, |
| :group_conversion_rate |
| ] |
| def default_value(metric) when metric in @float_metrics, do: 0.0 |
| def default_value(_metric), do: 0 |
|
|
| def from_string!(str) do |
| Map.fetch!(@metric_mappings, str) |
| end |
|
|
| def from_string(str) do |
| Map.fetch(@metric_mappings, str) |
| end |
| end |
|
|