From 7b7072edbda259e661940160909406b667c0da25 Mon Sep 17 00:00:00 2001 From: Chikako OHNO Date: Tue, 5 Mar 2019 00:00:13 +0900 Subject: [PATCH] =?UTF-8?q?#378=20=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88?= =?UTF-8?q?=E5=B1=A5=E6=AD=B4=E5=8F=8E=E9=9B=86=E3=82=B9=E3=82=AF=E3=83=AA?= =?UTF-8?q?=E3=83=97=E3=83=88=E3=81=A7=E3=83=97=E3=83=AD=E3=83=90=E3=82=A4?= =?UTF-8?q?=E3=83=80=E6=8C=87=E5=AE=9A=E3=82=92=E5=8F=AF=E8=83=BD=E3=81=AB?= =?UTF-8?q?=20=EF=BC=86=20=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E5=8A=A0=E7=AD=86=E3=83=BB=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docs => docs}/statistics_aggregation.md | 11 ++++-- lib/statistics/aggregation.rb | 25 +++++++++--- lib/tasks/statistics.rake | 5 +-- spec/lib/statistics/aggregation_spec.rb | 38 +++++++++++++++++++ 4 files changed, 68 insertions(+), 11 deletions(-) rename {lib/tasks/docs => docs}/statistics_aggregation.md (70%) diff --git a/lib/tasks/docs/statistics_aggregation.md b/docs/statistics_aggregation.md similarity index 70% rename from lib/tasks/docs/statistics_aggregation.md rename to docs/statistics_aggregation.md index ab8ae6534..e8da102ca 100644 --- a/lib/tasks/docs/statistics_aggregation.md +++ b/docs/statistics_aggregation.md @@ -1,8 +1,8 @@ -# rake statistics:aggregation[from,to] +# rake statistics:aggregation[from,to,provider] ## 概要 -指定期間のイベント履歴を集計する +指定期間/プロバイダのイベント履歴を集計する ## 引数 @@ -10,15 +10,18 @@ |--|--|--|--| |from|string|(省略可)|集計期間開始年/年月/年月日| |to|string|(省略可)|集計期間終了年/年月/年月日| +|provider|string|(省略可)|集計対象プロバイダ| ## 説明 from/to で指定された期間のイベント履歴を集計する。 +provider が指定されたとき、指定プロバイダに対してのみ集計を行う。 + + from, to を共に省略した場合、前週一週間分の履歴を集計する。 + 全期間(2012年以降前日まで)を集計する場合、from/to 共に '-' を指定する。 ``` -rake statistics:aggregation[-,-] +rake statistics:aggregation[-,-,] ``` + from/to に期間を指定する場合、それぞれ以下の形式で指定可能。 ``` @@ -27,3 +30,5 @@ rake statistics:aggregation[-,-] + to は前日、前日の年月、もしくは前日の年を最大とする。これより未来を指定された場合でも、最大以降は集計対象外とする。 + from, to いずれかを省略した場合、指定された他方の年/年月/年月日の履歴を集計する。 + ++ provider には、connpass, doorkeeper, facebook, static_yaml が指定可能。 diff --git a/lib/statistics/aggregation.rb b/lib/statistics/aggregation.rb index afa6880f6..1d3115d92 100644 --- a/lib/statistics/aggregation.rb +++ b/lib/statistics/aggregation.rb @@ -2,7 +2,7 @@ module Statistics class Aggregation def initialize(args) @from, @to = aggregation_period(args[:from], args[:to]) - dojos = fetch_dojos + dojos = fetch_dojos(args[:provider]) @externals = dojos[:externals] @internals = dojos[:internals] end @@ -56,12 +56,27 @@ def date_from(str) d end - def fetch_dojos + def fetch_dojos(provider) + if provider.blank? + # 全プロバイダ対象 + external_services = DojoEventService::EXTERNAL_SERVICES + internal_services = DojoEventService::INTERNAL_SERVICES + else + external_services = [] + internal_services = [] + case provider + when 'connpass', 'doorkeeper', 'facebook' + external_services = [provider] + when 'static_yaml' + internal_services = [provider] + end + end + { - externals: find_dojos_by(DojoEventService::EXTERNAL_SERVICES), - internals: find_dojos_by(DojoEventService::INTERNAL_SERVICES) + externals: find_dojos_by(external_services), + internals: find_dojos_by(internal_services) } - end + end def find_dojos_by(services) services.each.with_object({}) do |name, hash| diff --git a/lib/tasks/statistics.rake b/lib/tasks/statistics.rake index 64e28a358..46d6b5cfe 100644 --- a/lib/tasks/statistics.rake +++ b/lib/tasks/statistics.rake @@ -1,9 +1,8 @@ require_relative '../statistics.rb' namespace :statistics do - desc '月次/週次のイベント履歴を集計します' - task :aggregation, [:from, :to] => :environment do |tasks, args| - # EventService::Providers::Facebook.access_token = Koala::Facebook::OAuth.new(ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET']).get_app_access_token + desc '指定期間/プロバイダのイベント履歴を集計します' + task :aggregation, [:from, :to, :provider] => :environment do |tasks, args| EventHistory.transaction do Statistics::Aggregation.new(args).run end diff --git a/spec/lib/statistics/aggregation_spec.rb b/spec/lib/statistics/aggregation_spec.rb index 8f649b44f..6c16198dd 100644 --- a/spec/lib/statistics/aggregation_spec.rb +++ b/spec/lib/statistics/aggregation_spec.rb @@ -104,5 +104,43 @@ expect{ sa.send(:date_from, 'abc') }.to raise_error(ArgumentError) end end + + context 'fetch_dojos(provider)' do + it '指定なし' do + dojos = sa.send(:fetch_dojos, nil) + expect(dojos[:externals].keys).to eq(DojoEventService::EXTERNAL_SERVICES) + expect(dojos[:internals].keys).to eq(DojoEventService::INTERNAL_SERVICES) + end + + it 'connpass' do + dojos = sa.send(:fetch_dojos, 'connpass') + expect(dojos[:externals].keys).to eq(['connpass']) + expect(dojos[:internals].keys).to eq([]) + end + + it 'doorkeeper' do + dojos = sa.send(:fetch_dojos, 'doorkeeper') + expect(dojos[:externals].keys).to eq(['doorkeeper']) + expect(dojos[:internals].keys).to eq([]) + end + + it 'facebook' do + dojos = sa.send(:fetch_dojos, 'facebook') + expect(dojos[:externals].keys).to eq(['facebook']) + expect(dojos[:internals].keys).to eq([]) + end + + it 'static_yaml' do + dojos = sa.send(:fetch_dojos, 'static_yaml') + expect(dojos[:externals].keys).to eq([]) + expect(dojos[:internals].keys).to eq(['static_yaml']) + end + + it 'other' do + dojos = sa.send(:fetch_dojos, 'abc') + expect(dojos[:externals].keys).to eq([]) + expect(dojos[:internals].keys).to eq([]) + end + end end end