Skip to content
Snippets Groups Projects
Commit 01c3bfc0 authored by Teal's avatar Teal
Browse files

stats!

parent 1c54dcf5
Branches
No related tags found
No related merge requests found
......@@ -78,3 +78,11 @@ select {
@apply block;
}
}
.conference-stats {
ul {
@apply list-disc list-inside;
li {
@apply ml-6;
}
}
}
\ No newline at end of file
......@@ -19,4 +19,25 @@ class ConferencesController < ApplicationController
def update
end
def stats
@conference = Conference.find_by(slug: params[:slug])
@relevant_stages = @conference.relevant_stages
@relevant_sessions = @conference.sessions.includes(:stage, :assignments, :speakers, assignments: :user).where(stage: @conference.relevant_stages).order(:starts_at)
@assignees = @relevant_sessions.map(&:assignments).flatten.map(&:user).uniq
@language_stats = @relevant_sessions.group_by { |s| s.language }.transform_values(&:count)
@speakers = @relevant_sessions.map(&:speakers)
@unique_speakers = @speakers.flatten.uniq.count
@speakers_per_session = @speakers.map(&:count).sum.to_f / @speakers.size.to_f
@day_stats = @relevant_sessions.group_by { |s| s.starts_at.to_date }.transform_values do |se|
{
starts_at: se.first.starts_at,
ends_at: se.last.ends_at,
sessions_count: se.count,
wall_clock_time_min: (se.last.ends_at - se.first.starts_at) / 60.0,
scheduled_time_min: se.map { |x| (x.ends_at - x.starts_at) / 60.0 }.sum
}
end
@total_stats = @day_stats.values.inject { |m, x| m.merge(x) { |k, o, n| o + n } }.slice(:sessions_count, :wall_clock_time_min, :scheduled_time_min)
end
end
<div>
<h1>Statistics for <%= @conference.name %></h1>
<div class="conference-stats">
<ul>
<li><%= @assignees.count %> interpreters
<ul>
<% @assignees.each do |u| %>
<li><%= u.name %></li>
<% end %>
</ul>
</li>
<li><%= @relevant_stages.count %> stages</li>
<li><%= @day_stats.keys.count %> days
<ul>
<% @day_stats.each do |day, stats| %>
<li><%= day.strftime('%a %b, %Y') %>:
<%= stats[:starts_at].strftime('%H:%M') %>&ndash;<%= stats[:ends_at].strftime('%H:%M') %>,
<%= stats[:wall_clock_time_min].round %> minutes wall clock time (<%= (stats[:wall_clock_time_min] / 60.0).round(2) %> hours),
<%= stats[:scheduled_time_min].round %> minutes scheduled (<%= (stats[:scheduled_time_min] / 60.0).round(2) %> hours) in <%= stats[:sessions_count] %> sessions
</li>
<% end %>
</ul>
</li>
<li><%= @relevant_sessions.count %> sessions
<ul>
<% @language_stats.each do |language, cnt| %>
<li><%= cnt %> with language <%= language %></li>
<% end %>
</ul>
</li>
<li><%= @unique_speakers %> unique speakers
<ul>
<li>ø <%= @speakers_per_session %> speakers per session</li>
</ul>
</li>
<li><%= @total_stats[:scheduled_time_min] %> minutes of sessions (<%= (@total_stats[:scheduled_time_min] / 60.0).round(2) %> hours) scheduled total</li>
</ul>
</div>
</div>
......@@ -21,7 +21,8 @@ Rails.application.routes.draw do
root "conferences#index"
resources :conferences, param: :slug do
get ':date', action: :show, on: :member, as: :date
get 'stats', on: :member
get ':date', action: :show, on: :member, as: :date, date: /\d{4}-\d{2}-\d{2}/
resources :sessions, param: :ref_id do
resources :assignments, only: [:create, :destroy]
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment