Map lowercase tagged sources to capitalized form during ingestion (#4417)
* Map lowercase tagged sources to capitalized form during ingestion * @moduledoc * Add changlog entry
This commit is contained in:
parent
c1b217dc54
commit
2e89a50188
|
|
@ -33,6 +33,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- `is` and `is not` filters in dashboard no longer support wildcards. Use contains/does not contain filter instead.
|
- `is` and `is not` filters in dashboard no longer support wildcards. Use contains/does not contain filter instead.
|
||||||
- `bounce_rate` metric now returns 0 instead of null for event:page breakdown when page has never been entry page.
|
- `bounce_rate` metric now returns 0 instead of null for event:page breakdown when page has never been entry page.
|
||||||
- Make `TOTP_VAULT_KEY` optional plausible/analytics#4317
|
- Make `TOTP_VAULT_KEY` optional plausible/analytics#4317
|
||||||
|
- Sources like 'google' and 'facebook' are now stored in capitalized forms ('Google', 'Facebook') plausible/analytics#4417
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ defmodule Mix.Tasks.SendPageview do
|
||||||
@default_referrer "https://google.com"
|
@default_referrer "https://google.com"
|
||||||
@default_event "pageview"
|
@default_event "pageview"
|
||||||
@default_props "{}"
|
@default_props "{}"
|
||||||
|
@default_queryparams ""
|
||||||
@options [
|
@options [
|
||||||
ip: :string,
|
ip: :string,
|
||||||
user_agent: :string,
|
user_agent: :string,
|
||||||
|
|
@ -28,7 +29,8 @@ defmodule Mix.Tasks.SendPageview do
|
||||||
event: :string,
|
event: :string,
|
||||||
props: :string,
|
props: :string,
|
||||||
revenue_currency: :string,
|
revenue_currency: :string,
|
||||||
revenue_amount: :string
|
revenue_amount: :string,
|
||||||
|
queryparams: :string
|
||||||
]
|
]
|
||||||
|
|
||||||
def run(opts) do
|
def run(opts) do
|
||||||
|
|
@ -88,6 +90,7 @@ defmodule Mix.Tasks.SendPageview do
|
||||||
event = Keyword.get(opts, :event, @default_event)
|
event = Keyword.get(opts, :event, @default_event)
|
||||||
props = Keyword.get(opts, :props, @default_props)
|
props = Keyword.get(opts, :props, @default_props)
|
||||||
hostname = Keyword.get(opts, :hostname, domain)
|
hostname = Keyword.get(opts, :hostname, domain)
|
||||||
|
queryparams = Keyword.get(opts, :queryparams, @default_queryparams)
|
||||||
|
|
||||||
revenue =
|
revenue =
|
||||||
if Keyword.get(opts, :revenue_currency) do
|
if Keyword.get(opts, :revenue_currency) do
|
||||||
|
|
@ -99,7 +102,7 @@ defmodule Mix.Tasks.SendPageview do
|
||||||
|
|
||||||
%{
|
%{
|
||||||
name: event,
|
name: event,
|
||||||
url: "http://#{hostname}#{page}",
|
url: "http://#{hostname}#{page}?#{queryparams}",
|
||||||
domain: domain,
|
domain: domain,
|
||||||
referrer: referrer,
|
referrer: referrer,
|
||||||
props: props,
|
props: props,
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,7 @@ defmodule Plausible.Application do
|
||||||
|
|
||||||
setup_geolocation()
|
setup_geolocation()
|
||||||
Location.load_all()
|
Location.load_all()
|
||||||
|
Plausible.Ingestion.Acquisition.init()
|
||||||
Plausible.Geo.await_loader()
|
Plausible.Geo.await_loader()
|
||||||
|
|
||||||
Supervisor.start_link(List.flatten(children), opts)
|
Supervisor.start_link(List.flatten(children), opts)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
defmodule Plausible.Ingestion.Acquisition do
|
||||||
|
@moduledoc false
|
||||||
|
|
||||||
|
def init() do
|
||||||
|
:ets.new(__MODULE__, [
|
||||||
|
:named_table,
|
||||||
|
:set,
|
||||||
|
:public,
|
||||||
|
{:read_concurrency, true}
|
||||||
|
])
|
||||||
|
|
||||||
|
[{"referers.yml", map}] = RefInspector.Database.list(:default)
|
||||||
|
|
||||||
|
Enum.flat_map(map, fn {_, entries} ->
|
||||||
|
Enum.map(entries, fn {_, _, _, _, _, _, name} ->
|
||||||
|
:ets.insert(__MODULE__, {String.downcase(name), name})
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_mapping(source) do
|
||||||
|
case :ets.lookup(__MODULE__, source) do
|
||||||
|
[{_, name}] -> name
|
||||||
|
_ -> source
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -385,12 +385,16 @@ defmodule Plausible.Ingestion.Event do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_referrer_source(request, ref) do
|
defp get_referrer_source(request, ref) do
|
||||||
source =
|
tagged_source =
|
||||||
request.query_params["utm_source"] ||
|
request.query_params["utm_source"] ||
|
||||||
request.query_params["source"] ||
|
request.query_params["source"] ||
|
||||||
request.query_params["ref"]
|
request.query_params["ref"]
|
||||||
|
|
||||||
source || PlausibleWeb.RefInspector.parse(ref)
|
if tagged_source do
|
||||||
|
Plausible.Ingestion.Acquisition.find_mapping(tagged_source)
|
||||||
|
else
|
||||||
|
PlausibleWeb.RefInspector.parse(ref)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp clean_referrer(nil), do: nil
|
defp clean_referrer(nil), do: nil
|
||||||
|
|
|
||||||
|
|
@ -239,7 +239,7 @@ defmodule PlausibleWeb.Api.ExternalControllerTest do
|
||||||
assert event.browser_version == "70.0"
|
assert event.browser_version == "70.0"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "parses referrer", %{conn: conn, site: site} do
|
test "parses referrer source", %{conn: conn, site: site} do
|
||||||
params = %{
|
params = %{
|
||||||
name: "pageview",
|
name: "pageview",
|
||||||
url: "http://example.com/",
|
url: "http://example.com/",
|
||||||
|
|
@ -407,6 +407,22 @@ defmodule PlausibleWeb.Api.ExternalControllerTest do
|
||||||
assert session.referrer_source == "betalist"
|
assert session.referrer_source == "betalist"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "if utm_source matches a capitalized form from ref_inspector, the capitalized form is recorded",
|
||||||
|
%{conn: conn, site: site} do
|
||||||
|
params = %{
|
||||||
|
name: "pageview",
|
||||||
|
url: "http://www.example.com/?utm_source=facebook",
|
||||||
|
domain: site.domain
|
||||||
|
}
|
||||||
|
|
||||||
|
conn
|
||||||
|
|> post("/api/event", params)
|
||||||
|
|
||||||
|
session = get_created_session(site)
|
||||||
|
|
||||||
|
assert session.referrer_source == "Facebook"
|
||||||
|
end
|
||||||
|
|
||||||
test "utm tags are stored", %{conn: conn, site: site} do
|
test "utm tags are stored", %{conn: conn, site: site} do
|
||||||
params = %{
|
params = %{
|
||||||
name: "pageview",
|
name: "pageview",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue