Skip to content

Commit 4858209

Browse files
authored
Fix regression: Drop revenue metrics when not allowed on the dashboard (#6167)
* fix bug * on_ee guard
1 parent 85a61ef commit 4858209

9 files changed

Lines changed: 45 additions & 11 deletions

File tree

lib/plausible/stats/aggregate.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ defmodule Plausible.Stats.Aggregate do
1111
def aggregate(site, query, metrics) do
1212
query =
1313
query
14-
|> Query.set(metrics: metrics, remove_unavailable_revenue_metrics: true)
14+
|> Query.set(metrics: metrics)
15+
|> Query.set_include(:drop_unavailable_revenue_metrics, true)
1516
|> QueryOptimizer.optimize()
1617

1718
%QueryResult{results: [entry], meta: meta} = QueryRunner.run(site, query)

lib/plausible/stats/breakdown.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ defmodule Plausible.Stats.Breakdown do
3232
filters: query.filters ++ dimension_filters(dimension),
3333
pagination: %{limit: limit, offset: (page - 1) * limit},
3434
# Allow pageview and event metrics to be queried off of sessions table
35-
legacy_breakdown: true,
36-
remove_unavailable_revenue_metrics: true
35+
legacy_breakdown: true
3736
)
37+
|> Query.set_include(:drop_unavailable_revenue_metrics, true)
3838

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

lib/plausible/stats/dashboard/query_parser.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ defmodule Plausible.Stats.Dashboard.QueryParser do
8080
compare_match_day_of_week: params["include"]["compare_match_day_of_week"] == true,
8181
time_labels: params["include"]["time_labels"] == true,
8282
trim_relative_date_range: true,
83-
drop_unavailable_time_on_page: true
83+
drop_unavailable_time_on_page: true,
84+
drop_unavailable_revenue_metrics: true
8485
}}
8586
end
8687
end

lib/plausible/stats/query.ex

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ defmodule Plausible.Stats.Query do
2424
# Revenue metric specific metadata
2525
revenue_currencies: %{},
2626
revenue_warning: nil,
27-
remove_unavailable_revenue_metrics: false,
2827
site_id: nil,
2928
consolidated_site_ids: nil,
3029
site_native_stats_start_at: nil,

lib/plausible/stats/query_builder.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ defmodule Plausible.Stats.QueryBuilder do
234234
end
235235

236236
defp validate_revenue_metrics_access(site, query) do
237-
if Revenue.requested?(query.metrics) and not Revenue.available?(site) do
237+
if Revenue.requested?(query.metrics) and not Revenue.available?(site) and
238+
not query.include.drop_unavailable_revenue_metrics do
238239
{:error,
239240
%QueryError{
240241
code: :feature_access,

lib/plausible/stats/query_include.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ defmodule Plausible.Stats.QueryInclude do
99
compare: nil,
1010
compare_match_day_of_week: false,
1111
legacy_time_on_page_cutoff: nil,
12-
drop_unavailable_time_on_page: false
12+
drop_unavailable_time_on_page: false,
13+
drop_unavailable_revenue_metrics: false
1314

1415
@type date_range_tuple() :: {:date_range, Date.t(), Date.t()}
1516
@type datetime_range_tuple() :: {:datetime_range, DateTime.t(), DateTime.t()}
@@ -24,6 +25,7 @@ defmodule Plausible.Stats.QueryInclude do
2425
nil | :previous_period | :year_over_year | date_range_tuple() | datetime_range_tuple(),
2526
compare_match_day_of_week: boolean(),
2627
legacy_time_on_page_cutoff: any(),
27-
drop_unavailable_time_on_page: boolean()
28+
drop_unavailable_time_on_page: boolean(),
29+
drop_unavailable_revenue_metrics: boolean()
2830
}
2931
end

lib/plausible/stats/query_optimizer.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,8 @@ defmodule Plausible.Stats.QueryOptimizer do
205205

206206
on_ee do
207207
defp remove_revenue_metrics_if_unavailable(query) do
208-
if query.remove_unavailable_revenue_metrics and map_size(query.revenue_currencies) == 0 do
208+
if query.include.drop_unavailable_revenue_metrics and
209+
map_size(query.revenue_currencies) == 0 do
209210
Query.set(query, metrics: query.metrics -- Plausible.Stats.Goal.Revenue.revenue_metrics())
210211
else
211212
query

lib/plausible/stats/timeseries.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ defmodule Plausible.Stats.Timeseries do
2323
|> Query.set(
2424
metrics: transform_metrics(metrics, %{conversion_rate: :group_conversion_rate}),
2525
dimensions: [time_dimension(query)],
26-
order_by: [{time_dimension(query), :asc}],
27-
remove_unavailable_revenue_metrics: true
26+
order_by: [{time_dimension(query), :asc}]
2827
)
28+
|> Query.set_include(:drop_unavailable_revenue_metrics, true)
2929
|> QueryOptimizer.optimize()
3030

3131
comparison_query =

test/plausible_web/controllers/api/stats_controller/internal_query_api_test.exs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,35 @@ defmodule PlausibleWeb.Api.StatsController.InternalQueryApiTest do
1010
setup [:create_user, :log_in, :create_site]
1111

1212
describe "aggregates (e.g. top stats)" do
13+
on_ee do
14+
test "drops revenue metrics when they are not allowed", %{
15+
conn: conn,
16+
user: user,
17+
site: site
18+
} do
19+
{:ok, team} = Plausible.Teams.get_or_create(user)
20+
insert(:goal, site: site, event_name: "Purchase", currency: "EUR")
21+
subscribe_to_growth_plan(team)
22+
23+
params = %{
24+
"date_range" => "day",
25+
"filters" => [["is", "event:goal", ["Purchase"]]],
26+
"metrics" => [
27+
"visitors",
28+
"events",
29+
"conversion_rate",
30+
"total_revenue",
31+
"average_revenue"
32+
]
33+
}
34+
35+
%{"results" => results, "query" => query} = do_query_success(conn, site, params)
36+
37+
assert query["metrics"] == ["visitors", "events", "conversion_rate"]
38+
assert results == [%{"dimensions" => [], "metrics" => [0, 0, 0.0]}]
39+
end
40+
end
41+
1342
test "returns empty metrics when no data", %{conn: conn, site: site} do
1443
requested_metrics = [
1544
"visitors",

0 commit comments

Comments
 (0)