Skip to content

Commit

Permalink
Add OTEL tracing to breakdown functions (#2544)
Browse files Browse the repository at this point in the history
Co-authored-by: Robert Joonas <[email protected]>

Co-authored-by: Robert Joonas <[email protected]>
  • Loading branch information
vinibrsl and RobertJoonas authored Jan 2, 2023
1 parent b6d3001 commit 22e2ae1
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
24 changes: 21 additions & 3 deletions lib/plausible/stats/breakdown.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
defmodule Plausible.Stats.Breakdown do
use Plausible.ClickhouseRepo
import Plausible.Stats.{Base, Imported}
require OpenTelemetry.Tracer, as: Tracer
alias Plausible.Stats.Query
alias Plausible.Goals
@no_ref "Direct / None"
Expand All @@ -9,7 +10,7 @@ defmodule Plausible.Stats.Breakdown do
@session_metrics [:visits, :bounce_rate, :visit_duration]
@event_props ["event:page", "event:page_match", "event:name"]

def breakdown(site, query, "event:goal", metrics, pagination) do
def breakdown(site, query, "event:goal" = property, metrics, pagination) do
{event_goals, pageview_goals} =
site.domain
|> Goals.for_domain()
Expand All @@ -18,6 +19,8 @@ defmodule Plausible.Stats.Breakdown do
events = Enum.map(event_goals, & &1.event_name)
event_query = %Query{query | filters: Map.put(query.filters, "event:name", {:member, events})}

trace(query, property, metrics)

event_results =
if Enum.any?(event_goals) do
breakdown(site, event_query, "event:name", metrics, pagination)
Expand Down Expand Up @@ -60,7 +63,7 @@ defmodule Plausible.Stats.Breakdown do
zip_results(event_results, page_results, :goal, metrics)
end

def breakdown(site, query, "event:props:" <> custom_prop, metrics, pagination) do
def breakdown(site, query, "event:props:" <> custom_prop = property, metrics, pagination) do
{limit, _} = pagination

none_result =
Expand All @@ -80,6 +83,7 @@ defmodule Plausible.Stats.Breakdown do
[]
end

trace(query, property, metrics)
results = breakdown_events(site, query, "event:props:" <> custom_prop, metrics, pagination)

zipped = zip_results(none_result, results, custom_prop, metrics)
Expand All @@ -91,7 +95,7 @@ defmodule Plausible.Stats.Breakdown do
end
end

def breakdown(site, query, "event:page", metrics, pagination) do
def breakdown(site, query, "event:page" = property, metrics, pagination) do
event_metrics = Enum.filter(metrics, &(&1 in @event_metrics))
session_metrics = Enum.filter(metrics, &(&1 in @session_metrics))

Expand All @@ -118,6 +122,8 @@ defmodule Plausible.Stats.Breakdown do
Query.put_filter(query, "visit:entry_page", {:member, Enum.map(pages, & &1[:page])})
end

trace(new_query, property, metrics)

if Enum.any?(event_metrics) && Enum.empty?(event_result) do
[]
else
Expand All @@ -140,6 +146,7 @@ defmodule Plausible.Stats.Breakdown do
end

def breakdown(site, query, property, metrics, pagination) when property in @event_props do
trace(query, property, metrics)
breakdown_events(site, query, property, metrics, pagination)
end

Expand All @@ -157,10 +164,12 @@ defmodule Plausible.Stats.Breakdown do
|> Query.treat_page_filter_as_entry_page()
|> Query.treat_prop_filter_as_entry_prop()

trace(query, property, metrics)
breakdown_sessions(site, query, property, metrics, pagination)
end

def breakdown(site, query, property, metrics, pagination) do
trace(query, property, metrics)
breakdown_sessions(site, query, property, metrics, pagination)
end

Expand Down Expand Up @@ -555,4 +564,13 @@ defmodule Plausible.Stats.Breakdown do
|> Ecto.Query.limit(^limit)
|> Ecto.Query.offset(^offset)
end

defp trace(query, property, metrics) do
Query.trace(query)

Tracer.set_attributes([
{"plausible.query.breakdown_property", property},
{"plausible.query.breakdown_metrics", metrics}
])
end
end
12 changes: 12 additions & 0 deletions lib/plausible/stats/query.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ defmodule Plausible.Stats.Query do
include_imported: false

@default_sample_threshold 20_000_000
require OpenTelemetry.Tracer, as: Tracer
alias Plausible.Stats.{FilterParser, Interval}

def shift_back(%__MODULE__{period: "year"} = query, site) do
Expand Down Expand Up @@ -336,4 +337,15 @@ defmodule Plausible.Stats.Query do

%{query | include_imported: !!include_imported}
end

@spec trace(%__MODULE__{}) :: %__MODULE__{}
def trace(%__MODULE__{} = query) do
Tracer.set_attributes([
{"plausible.query.interval", query.interval},
{"plausible.query.period", query.period},
{"plausible.query.include_imported", query.include_imported}
])

query
end
end

0 comments on commit 22e2ae1

Please sign in to comment.