Skip to content

Commit 7f3e91e

Browse files
authored
[FF] Average Scroll Depth Metric: dashboard CSV export (#4898)
* extract test util function * add scroll depth to pages.csv * add scroll_depth to (page-filtered) visitors.csv * silence credo
1 parent 79c6f64 commit 7f3e91e

File tree

8 files changed

+202
-100
lines changed

8 files changed

+202
-100
lines changed

lib/plausible/stats/timeseries.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ defmodule Plausible.Stats.Timeseries do
8787
:views_per_visit -> Map.merge(row, %{views_per_visit: 0.0})
8888
:conversion_rate -> Map.merge(row, %{conversion_rate: 0.0})
8989
:group_conversion_rate -> Map.merge(row, %{group_conversion_rate: 0.0})
90-
:scroll_depth -> Map.merge(row, %{scroll_depth: 0})
90+
:scroll_depth -> Map.merge(row, %{scroll_depth: nil})
9191
:bounce_rate -> Map.merge(row, %{bounce_rate: 0.0})
9292
:visit_duration -> Map.merge(row, %{visit_duration: nil})
9393
:average_revenue -> Map.merge(row, %{average_revenue: nil})

lib/plausible_web/controllers/api/stats_controller.ex

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -831,9 +831,11 @@ defmodule PlausibleWeb.Api.StatsController do
831831
params = Map.put(params, "property", "event:page")
832832
query = Query.from(site, params, debug_metadata(conn))
833833

834+
include_scroll_depth? = !query.include_imported && scroll_depth_enabled?(site, current_user)
835+
834836
extra_metrics =
835837
cond do
836-
params["detailed"] && !query.include_imported && scroll_depth_enabled?(site, current_user) ->
838+
params["detailed"] && include_scroll_depth? ->
837839
[:pageviews, :bounce_rate, :time_on_page, :scroll_depth]
838840

839841
params["detailed"] ->
@@ -856,7 +858,12 @@ defmodule PlausibleWeb.Api.StatsController do
856858
|> transform_keys(%{visitors: :conversions})
857859
|> to_csv([:name, :conversions, :conversion_rate])
858860
else
859-
pages |> to_csv([:name, :visitors, :pageviews, :bounce_rate, :time_on_page])
861+
cols = [:name, :visitors, :pageviews, :bounce_rate, :time_on_page]
862+
863+
# credo:disable-for-next-line Credo.Check.Refactor.Nesting
864+
cols = if include_scroll_depth?, do: cols ++ [:scroll_depth], else: cols
865+
866+
pages |> to_csv(cols)
860867
end
861868
else
862869
json(conn, %{
@@ -1614,7 +1621,7 @@ defmodule PlausibleWeb.Api.StatsController do
16141621

16151622
defp realtime_period_to_30m(params), do: params
16161623

1617-
defp scroll_depth_enabled?(site, user) do
1624+
def scroll_depth_enabled?(site, user) do
16181625
FunWithFlags.enabled?(:scroll_depth, for: user) ||
16191626
FunWithFlags.enabled?(:scroll_depth, for: site)
16201627
end

lib/plausible_web/controllers/stats_controller.ex

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ defmodule PlausibleWeb.StatsController do
119119
limited_params = Map.merge(params, %{"limit" => "100"})
120120

121121
csvs = %{
122-
~c"visitors.csv" => fn -> main_graph_csv(site, query) end,
122+
~c"visitors.csv" => fn -> main_graph_csv(site, query, conn.assigns[:current_user]) end,
123123
~c"sources.csv" => fn -> Api.StatsController.sources(conn, params) end,
124124
~c"utm_mediums.csv" => fn -> Api.StatsController.utm_mediums(conn, params) end,
125125
~c"utm_sources.csv" => fn -> Api.StatsController.utm_sources(conn, params) end,
@@ -177,8 +177,8 @@ defmodule PlausibleWeb.StatsController do
177177
end
178178
end
179179

180-
defp main_graph_csv(site, query) do
181-
{metrics, column_headers} = csv_graph_metrics(query)
180+
defp main_graph_csv(site, query, current_user) do
181+
{metrics, column_headers} = csv_graph_metrics(query, site, current_user)
182182

183183
map_bucket_to_row = fn bucket -> Enum.map([:date | metrics], &bucket[&1]) end
184184
prepend_column_headers = fn data -> [column_headers | data] end
@@ -190,7 +190,12 @@ defmodule PlausibleWeb.StatsController do
190190
|> NimbleCSV.RFC4180.dump_to_iodata()
191191
end
192192

193-
defp csv_graph_metrics(query) do
193+
defp csv_graph_metrics(query, site, current_user) do
194+
include_scroll_depth? =
195+
!query.include_imported &&
196+
PlausibleWeb.Api.StatsController.scroll_depth_enabled?(site, current_user) &&
197+
Filters.filtering_on_dimension?(query, "event:page")
198+
194199
{metrics, column_headers} =
195200
if Filters.filtering_on_dimension?(query, "event:goal") do
196201
{
@@ -207,6 +212,8 @@ defmodule PlausibleWeb.StatsController do
207212
:visit_duration
208213
]
209214

215+
metrics = if include_scroll_depth?, do: metrics ++ [:scroll_depth], else: metrics
216+
210217
{
211218
metrics,
212219
[:date | metrics]
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
name,visitors,pageviews,bounce_rate,time_on_page
2-
/some-other-page,1,1,0,60.0
1+
name,visitors,pageviews,bounce_rate,time_on_page,scroll_depth
2+
/some-other-page,1,1,0,60.0,
Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
date,visitors,pageviews,visits,views_per_visit,bounce_rate,visit_duration
2-
2021-09-20,0,0,0,0.0,0.0,
3-
2021-09-21,0,0,0,0.0,0.0,
4-
2021-09-22,0,0,0,0.0,0.0,
5-
2021-09-23,0,0,0,0.0,0.0,
6-
2021-09-24,0,0,0,0.0,0.0,
7-
2021-09-25,0,0,0,0.0,0.0,
8-
2021-09-26,0,0,0,0.0,0.0,
9-
2021-09-27,0,0,0,0.0,0.0,
10-
2021-09-28,0,0,0,0.0,0.0,
11-
2021-09-29,0,0,0,0.0,0.0,
12-
2021-09-30,0,0,0,0.0,0.0,
13-
2021-10-01,0,0,0,0.0,0.0,
14-
2021-10-02,0,0,0,0.0,0.0,
15-
2021-10-03,0,0,0,0.0,0.0,
16-
2021-10-04,0,0,0,0.0,0.0,
17-
2021-10-05,0,0,0,0.0,0.0,
18-
2021-10-06,0,0,0,0.0,0.0,
19-
2021-10-07,0,0,0,0.0,0.0,
20-
2021-10-08,0,0,0,0.0,0.0,
21-
2021-10-09,0,0,0,0.0,0.0,
22-
2021-10-10,0,0,0,0.0,0.0,
23-
2021-10-11,0,0,0,0.0,0.0,
24-
2021-10-12,0,0,0,0.0,0.0,
25-
2021-10-13,0,0,0,0.0,0.0,
26-
2021-10-14,0,0,0,0.0,0.0,
27-
2021-10-15,0,0,0,0.0,0.0,
28-
2021-10-16,0,0,0,0.0,0.0,
29-
2021-10-17,0,0,0,0.0,0.0,
30-
2021-10-18,0,0,0,0.0,0.0,
31-
2021-10-19,0,0,0,0.0,0.0,
32-
2021-10-20,1,1,1,2.0,0,60
1+
date,visitors,pageviews,visits,views_per_visit,bounce_rate,visit_duration,scroll_depth
2+
2021-09-20,0,0,0,0.0,0.0,,
3+
2021-09-21,0,0,0,0.0,0.0,,
4+
2021-09-22,0,0,0,0.0,0.0,,
5+
2021-09-23,0,0,0,0.0,0.0,,
6+
2021-09-24,0,0,0,0.0,0.0,,
7+
2021-09-25,0,0,0,0.0,0.0,,
8+
2021-09-26,0,0,0,0.0,0.0,,
9+
2021-09-27,0,0,0,0.0,0.0,,
10+
2021-09-28,0,0,0,0.0,0.0,,
11+
2021-09-29,0,0,0,0.0,0.0,,
12+
2021-09-30,0,0,0,0.0,0.0,,
13+
2021-10-01,0,0,0,0.0,0.0,,
14+
2021-10-02,0,0,0,0.0,0.0,,
15+
2021-10-03,0,0,0,0.0,0.0,,
16+
2021-10-04,0,0,0,0.0,0.0,,
17+
2021-10-05,0,0,0,0.0,0.0,,
18+
2021-10-06,0,0,0,0.0,0.0,,
19+
2021-10-07,0,0,0,0.0,0.0,,
20+
2021-10-08,0,0,0,0.0,0.0,,
21+
2021-10-09,0,0,0,0.0,0.0,,
22+
2021-10-10,0,0,0,0.0,0.0,,
23+
2021-10-11,0,0,0,0.0,0.0,,
24+
2021-10-12,0,0,0,0.0,0.0,,
25+
2021-10-13,0,0,0,0.0,0.0,,
26+
2021-10-14,0,0,0,0.0,0.0,,
27+
2021-10-15,0,0,0,0.0,0.0,,
28+
2021-10-16,0,0,0,0.0,0.0,,
29+
2021-10-17,0,0,0,0.0,0.0,,
30+
2021-10-18,0,0,0,0.0,0.0,,
31+
2021-10-19,0,0,0,0.0,0.0,,
32+
2021-10-20,1,1,1,2.0,0,60,
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name,visitors,pageviews,bounce_rate,time_on_page
2-
/,4,3,67,
3-
/signup,1,1,0,60.0
4-
/some-other-page,1,1,0,60.0
1+
name,visitors,pageviews,bounce_rate,time_on_page,scroll_depth
2+
/,4,3,67,,
3+
/signup,1,1,0,60.0,
4+
/some-other-page,1,1,0,60.0,
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name,visitors,pageviews,bounce_rate,time_on_page
2-
/,5,4,75,
3-
/signup,1,1,0,60.0
4-
/some-other-page,1,1,0,60.0
1+
name,visitors,pageviews,bounce_rate,time_on_page,scroll_depth
2+
/,5,4,75,,
3+
/signup,1,1,0,60.0,
4+
/some-other-page,1,1,0,60.0,

0 commit comments

Comments
 (0)