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

stats!

parent 1c54dcf5
No related branches found
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.
Finish editing this message first!
Please register or to comment