Skip to content

Commit 1052151

Browse files
committed
Add episode scorecards dashboard
1 parent 0f6f102 commit 1052151

File tree

9 files changed

+76
-19
lines changed

9 files changed

+76
-19
lines changed

app/controllers/episode_metrics_controller.rb

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,22 @@
11
class EpisodeMetricsController < ApplicationController
22
include MetricsUtils
3+
include MetricsQueries
34

45
before_action :set_episode
5-
before_action :check_clickhouse, except: %i[show]
6-
before_action :set_date_range
6+
# before_action :check_clickhouse, except: %i[show]
77

88
def show
99
end
1010

1111
def downloads
12-
@downloads_within_date_range =
13-
Rollups::HourlyDownload
14-
.where(episode_id: @episode.guid, hour: (@date_start..@date_end))
15-
.select("DATE_TRUNC('#{@interval}', hour) AS hour", "SUM(count) AS count")
16-
.group("DATE_TRUNC('#{@interval}', hour) AS hour")
17-
.order(Arel.sql("DATE_TRUNC('#{@interval}', hour) ASC"))
18-
.load_async
12+
@date_range = generate_date_range(Date.utc_today - 28.days, Date.utc_today, "DAY")
1913

20-
@downloads = single_rollups(@downloads_within_date_range, @episode.title)
14+
@downloads = daterange_downloads(@episode)
15+
@rollups = single_rollups(@downloads, "Downloads")
2116

2217
render partial: "metrics/downloads_card", locals: {
23-
url: request.fullpath,
24-
form_id: "episode_downloads_metrics",
25-
date_start: @date_start,
26-
date_end: @date_end,
27-
interval: @interval,
28-
date_range: @date_range,
29-
downloads: @downloads
18+
rollups: @rollups,
19+
date_range: @date_range
3020
}
3121
end
3222

app/controllers/episodes_controller.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
class EpisodesController < ApplicationController
22
include EmbedPlayerHelper
3+
include MetricsQueries
34

45
before_action :set_episode, only: %i[show overview edit update destroy]
56
before_action :set_podcast
@@ -60,6 +61,10 @@ def new
6061

6162
# GET /episodes/1/overview
6263
def overview
64+
if Rails.env.development?
65+
@alltime_downloads = alltime_downloads(@episode).sum(&:count)
66+
@daterange_downloads = daterange_downloads(@episode).sum(&:count)
67+
end
6368
end
6469

6570
# GET /episodes/1/edit
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { Controller } from "@hotwired/stimulus"
2+
import { buildDateTimeChart, buildDownloadsSeries, BAR_TYPE, destroyChart } from "util/apex"
3+
4+
export default class extends Controller {
5+
static values = {
6+
id: String,
7+
downloads: Object,
8+
dateRange: Array,
9+
}
10+
11+
static targets = ["chart"]
12+
13+
connect() {
14+
const series = buildDownloadsSeries(this.downloadsValue, this.dateRangeValue)
15+
16+
const chart = buildDateTimeChart(this.idValue, series, this.chartTarget, BAR_TYPE)
17+
18+
chart.render()
19+
}
20+
21+
disconnect() {
22+
destroyChart(this.idValue)
23+
}
24+
}

app/views/episodes/_overview.html.erb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,8 @@
5858
</div>
5959
</div>
6060
</div>
61+
62+
<div class="col d-flex">
63+
<%= render "scorecard_dashboard", daterange_downloads: daterange_downloads, alltime_downloads: alltime_downloads, episode: episode %>
64+
</div>
6165
</div>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<div class="container">
2+
<div class="row mb-4 justify-content-between">
3+
<div class="col ps-0 pe-2">
4+
<%= render "metrics/score_card", score: number_with_delimiter(daterange_downloads), label: "downloads", sublabel: "last 28 days" %>
5+
</div>
6+
<div class="col ps-2 pe-0">
7+
<%= render "metrics/score_card", score: number_with_delimiter(alltime_downloads), label: "downloads", sublabel: "all-time" %>
8+
</div>
9+
</div>
10+
<div class="row mb-4">
11+
<div class="col p-0">
12+
<div class="card shadow">
13+
<div class="card-header d-flex justify-content-between align-items-center">
14+
<span class="h4 fw-bold mb-0">Episode Performance</span>
15+
<span>Last 28 Days</span>
16+
</div>
17+
<div class="card-body metrics-card-body">
18+
<%= turbo_frame_tag "downloads", src: downloads_episode_metrics_path(episode_id: episode.guid), loading: "lazy" do %>
19+
<%= render "metrics/loading_card" %>
20+
<% end %>
21+
</div>
22+
</div>
23+
</div>
24+
</div>
25+
</div>

app/views/episodes/overview.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
<%= render "episodes/tabs" %>
44

5-
<%= render "overview", episode: @episode %>
5+
<%= render "overview", episode: @episode, daterange_downloads: @daterange_downloads, alltime_downloads: @alltime_downloads %>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<%= turbo_frame_tag "downloads" do %>
2+
<div class="col metrics-chart"
3+
data-controller="apex-downloads"
4+
data-apex-downloads-id-value="<%= SecureRandom.uuid %>"
5+
data-apex-downloads-downloads-value="<%= rollups.to_json %>"
6+
data-apex-downloads-date-range-value="<%= date_range.to_json %>">
7+
<div data-apex-downloads-target="chart"></div>
8+
</div>
9+
<% end %>
File renamed without changes.

app/views/podcasts/show.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393

9494
<% if Rails.env.development? %>
9595
<div class="col-lg-8 d-flex">
96-
<%= render "metrics/scorecard_dashboard", daterange_downloads: @daterange_downloads, alltime_downloads: @alltime_downloads, episode_count: @episode_count, podcast: @podcast %>
96+
<%= render "scorecard_dashboard", daterange_downloads: @daterange_downloads, alltime_downloads: @alltime_downloads, episode_count: @episode_count, podcast: @podcast %>
9797
</div>
9898
<% else %>
9999
<% if current_user_app?("metrics") %>

0 commit comments

Comments
 (0)