diff --git a/app/controllers/statistics_controller.rb b/app/controllers/statistics_controller.rb index bb22f89c..aafa6cd8 100644 --- a/app/controllers/statistics_controller.rb +++ b/app/controllers/statistics_controller.rb @@ -29,11 +29,20 @@ class StatisticsController < ApplicationController def rfc_activity respond_to do |format| - format.json { render(json: rfc_activity_live_data) } + format.json { render(json: rfc_activity_data) } end end def rfc_activity_history + respond_to do |format| + format.html { render 'rfc_activity_history' } + format.json do + range = params[:range] || 'year' + from = DateTime.strptime(params[:from], '%Y') rescue DateTime.new(0) + to = DateTime.strptime(params[:to], '%Y') rescue DateTime.now + render(json: ranged_rfc_data(range, from, to)) + end + end end def authorize! diff --git a/app/helpers/statistics_helper.rb b/app/helpers/statistics_helper.rb index 4af943d2..cca3896e 100644 --- a/app/helpers/statistics_helper.rb +++ b/app/helpers/statistics_helper.rb @@ -152,4 +152,39 @@ module StatisticsHelper ] end + def ranged_rfc_data(range='year', from=DateTime.new(0), to=DateTime.now) + [ + { + key: 'rfcs', + name: t('activerecord.models.request_for_comment.other'), + data: RequestForComment.in_range(from, to) + .select("date_trunc('#{range}', created_at) AS \"range\", count(id)") + .group('range').order('range') + }, + { + key: 'rfcs_solved', + name: t('statistics.entries.request_for_comments.percent_solved'), + data: RequestForComment.in_range(from, to) + .where(solved: true) + .select("date_trunc('#{range}', created_at) AS \"range\", count(id)") + .group('range').order('range') + }, + { + key: 'rfcs_soft_solved', + name: t('statistics.entries.request_for_comments.percent_soft_solved'), + data: RequestForComment.in_range(from, to).unsolved + .where(full_score_reached: true) + .select("date_trunc('#{range}', created_at) AS \"range\", count(id)") + .group('range').order('range') + }, + { + key: 'rfcs_unsolved', + name: t('statistics.entries.request_for_comments.percent_unsolved'), + data: RequestForComment.in_range(from, to).unsolved + .select("date_trunc('#{range}', created_at) AS \"range\", count(id)") + .group('range').order('range') + } + ] + end + end