Skip to content

Commit bf24ae0

Browse files
authored
APIv2: Use Query.build over Query.from in more cases (#5699)
* Query.from -> Query.build * Update LegacyQueryBuilder docs * Build query instead of mutating it * Remove redundant QueryOptimizer calls (already called within .run())
1 parent 6216ade commit bf24ae0

File tree

10 files changed

+93
-44
lines changed

10 files changed

+93
-44
lines changed

extra/lib/plausible_web/live/funnel_settings/form.ex

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,18 @@ defmodule PlausibleWeb.Live.FunnelSettings.Form do
347347
steps
348348
)
349349

350-
query = Plausible.Stats.Query.from(site, %{"period" => "month"})
350+
{:ok, query} =
351+
Plausible.Stats.Query.build(
352+
site,
353+
:internal,
354+
%{
355+
"site_id" => site.domain,
356+
"date_range" => "month",
357+
"metrics" => ["pageviews"]
358+
},
359+
%{}
360+
)
361+
351362
{:ok, {definition, query}}
352363
end
353364

lib/plausible/stats/breakdown.ex

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ defmodule Plausible.Stats.Breakdown do
88
use Plausible.ClickhouseRepo
99
use Plausible.Stats.SQL.Fragments
1010

11-
alias Plausible.Stats.{Query, QueryRunner, QueryResult, QueryOptimizer, Comparisons}
11+
alias Plausible.Stats.{Query, QueryRunner, QueryResult, Comparisons}
1212

1313
def breakdown(
1414
site,
@@ -35,7 +35,6 @@ defmodule Plausible.Stats.Breakdown do
3535
legacy_breakdown: true,
3636
remove_unavailable_revenue_metrics: true
3737
)
38-
|> QueryOptimizer.optimize()
3938

4039
%QueryResult{results: results, meta: meta} = QueryRunner.run(site, query_with_metrics)
4140

lib/plausible/stats/goal_suggestions.ex

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,18 @@ defmodule Plausible.Stats.GoalSuggestions do
4040
to_date = Date.utc_today()
4141
from_date = Date.shift(to_date, month: -6)
4242

43-
params = %{
44-
"with_imported" => "true",
45-
"period" => "custom",
46-
"from" => Date.to_iso8601(from_date),
47-
"to" => Date.to_iso8601(to_date)
48-
}
49-
50-
query = Query.from(site, params)
43+
{:ok, query} =
44+
Plausible.Stats.Query.build(
45+
site,
46+
:internal,
47+
%{
48+
"site_id" => site.domain,
49+
"date_range" => [Date.to_iso8601(from_date), Date.to_iso8601(to_date)],
50+
"metrics" => ["pageviews"],
51+
"include" => %{"imports" => true}
52+
},
53+
%{}
54+
)
5155

5256
native_q =
5357
from(e in base_event_query(query),

lib/plausible/stats/legacy/legacy_query_builder.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
defmodule Plausible.Stats.Legacy.QueryBuilder do
22
@moduledoc """
3-
Module used to parse URL search params to a valid Query, used to power the API for the dashboard.
3+
Module used to parse URL search params to a valid Query, used to power the API for the dashboard
4+
and v1 of our Stats API.
5+
46
@deprecated
57
"""
68

lib/plausible/stats/query.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ defmodule Plausible.Stats.Query do
5757
end
5858

5959
@doc """
60-
Builds query from old-style params. New code should prefer Query.build
60+
Builds query from old-style stats APIv1 params. New code should use `Query.build`.
6161
"""
6262
def from(site, params, debug_metadata \\ %{}, now \\ nil) do
6363
Legacy.QueryBuilder.from(site, params, debug_metadata, now)

lib/plausible/stats/timeseries.ex

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ defmodule Plausible.Stats.Timeseries do
77

88
use Plausible
99
use Plausible.ClickhouseRepo
10-
alias Plausible.Stats.{Comparisons, Query, QueryRunner, QueryOptimizer, Metrics, Time}
10+
alias Plausible.Stats.{Comparisons, Query, QueryRunner, Metrics, Time}
1111

1212
@time_dimension %{
1313
"month" => "time:month",
@@ -26,7 +26,6 @@ defmodule Plausible.Stats.Timeseries do
2626
order_by: [{time_dimension(query), :asc}],
2727
remove_unavailable_revenue_metrics: true
2828
)
29-
|> QueryOptimizer.optimize()
3029

3130
comparison_query =
3231
if(query.include.comparisons,

lib/plausible_web/live/goal_settings/form.ex

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,18 @@ defmodule PlausibleWeb.Live.GoalSettings.Form do
553553
end
554554

555555
def suggest_page_paths(input, site) do
556-
query = Plausible.Stats.Query.from(site, %{"with_imported" => "true", "period" => "all"})
556+
{:ok, query} =
557+
Plausible.Stats.Query.build(
558+
site,
559+
:internal,
560+
%{
561+
"site_id" => site.domain,
562+
"date_range" => "all",
563+
"metrics" => ["pageviews"],
564+
"include" => %{"imports" => true}
565+
},
566+
%{}
567+
)
557568

558569
site
559570
|> Plausible.Stats.filter_suggestions(query, "page", input)

lib/plausible_web/live/shields/hostname_rules.ex

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,17 @@ defmodule PlausibleWeb.Live.Shields.HostnameRules do
227227
end
228228

229229
def suggest_hostnames(input, _options, site) do
230-
query = Plausible.Stats.Query.from(site, %{})
230+
{:ok, query} =
231+
Plausible.Stats.Query.build(
232+
site,
233+
:internal,
234+
%{
235+
"site_id" => site.domain,
236+
"date_range" => "all",
237+
"metrics" => ["pageviews"]
238+
},
239+
%{}
240+
)
231241

232242
site
233243
|> Plausible.Stats.filter_suggestions(query, "hostname", input)

lib/plausible_web/live/shields/page_rules.ex

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -220,14 +220,18 @@ defmodule PlausibleWeb.Live.Shields.PageRules do
220220
end
221221

222222
def suggest_page_paths(input, _options, site, page_rules) do
223-
query =
224-
site
225-
|> Plausible.Stats.Query.from(%{})
226-
|> Plausible.Stats.Query.add_filter([
227-
:is_not,
228-
"event:page",
229-
Enum.map(page_rules, & &1.page_path)
230-
])
223+
{:ok, query} =
224+
Plausible.Stats.Query.build(
225+
site,
226+
:internal,
227+
%{
228+
"site_id" => site.domain,
229+
"date_range" => "all",
230+
"metrics" => ["pageviews"],
231+
"filters" => [["is_not", "event:page", Enum.map(page_rules, & &1.page_path)]]
232+
},
233+
%{}
234+
)
231235

232236
site
233237
|> Plausible.Stats.filter_suggestions(query, "page", input)

lib/workers/traffic_change_notifier.ex

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -119,37 +119,46 @@ defmodule Plausible.Workers.TrafficChangeNotifier do
119119
end
120120

121121
defp get_traffic_spike_stats(site) do
122+
%{}
123+
|> put_sources(site)
124+
|> put_pages(site)
125+
end
126+
127+
@base_query_params %{
128+
"metrics" => ["visitors"],
129+
"pagination" => %{"limit" => 3},
130+
"date_range" => "realtime"
131+
}
132+
133+
defp put_sources(stats, site) do
122134
{:ok, query} =
123135
Query.build(
124136
site,
125137
:internal,
126-
%{
127-
"site_id" => "#{site.id}",
128-
"metrics" => ["visitors"],
129-
"pagination" => %{"limit" => 3},
130-
"date_range" => "realtime"
131-
},
138+
Map.merge(@base_query_params, %{
139+
"site_id" => site.domain,
140+
"dimensions" => ["visit:source"],
141+
"filters" => [["is_not", "visit:source", ["Direct / None"]]]
142+
}),
132143
%{}
133144
)
134145

135-
%{}
136-
|> put_sources(site, query)
137-
|> put_pages(site, query)
138-
end
139-
140-
defp put_sources(stats, site, query) do
141-
query =
142-
query
143-
|> Query.set(dimensions: ["visit:source"])
144-
|> Query.add_filter([:is_not, "visit:source", ["Direct / None"]])
145-
146146
%{results: sources} = Plausible.Stats.query(site, query)
147147

148148
Map.put(stats, :sources, sources)
149149
end
150150

151-
defp put_pages(stats, site, query) do
152-
query = Query.set(query, dimensions: ["event:page"])
151+
defp put_pages(stats, site) do
152+
{:ok, query} =
153+
Query.build(
154+
site,
155+
:internal,
156+
Map.merge(@base_query_params, %{
157+
"site_id" => site.domain,
158+
"dimensions" => ["event:page"]
159+
}),
160+
%{}
161+
)
153162

154163
%{results: pages} = Plausible.Stats.query(site, query)
155164

0 commit comments

Comments
 (0)