diff --git a/Gemfile b/Gemfile index 9db5534..60f708b 100644 --- a/Gemfile +++ b/Gemfile @@ -39,6 +39,7 @@ gem 'rufus-scheduler', '~> 3.0.9', require: false gem 'activesupport' gem 'corefines', '~> 1.6' gem 'role_playing', github: 'jnv/role_playing' +gem 'logging' ## For console gem 'pry', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 0600957..368e16e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -134,6 +134,10 @@ GEM celluloid (>= 0.15.2) rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9) + little-plugger (1.1.3) + logging (2.0.0) + little-plugger (~> 1.1) + multi_json (~> 1.10) lumberjack (1.0.9) method_source (0.8.2) mime-types (2.4.3) @@ -285,6 +289,7 @@ DEPENDENCIES json_spec (~> 1.1.2) kosapi_client! kramdown + logging pg pliny (~> 0.2.1) pry diff --git a/config/initializers/logging.rb b/config/initializers/logging.rb new file mode 100644 index 0000000..14d52e6 --- /dev/null +++ b/config/initializers/logging.rb @@ -0,0 +1,12 @@ +# Logging configuration for the whole app. +# +# For details see https://github.com/TwP/logging + +require 'logging' + +Logging.logger.root.tap do |root| + root.appenders = Logging.appenders.stdout( + layout: Logging::Layouts.pattern(format_as: :inspect, pattern: '%-5l [%c]: %m\n') + ) + root.level = (Config.rack_env == 'production' ? :info : :debug) +end diff --git a/lib/tasks/sirius.rake b/lib/tasks/sirius.rake index f10f887..3bb5618 100644 --- a/lib/tasks/sirius.rake +++ b/lib/tasks/sirius.rake @@ -7,61 +7,62 @@ namespace :sirius do require 'bundler' Bundler.setup require File.expand_path('../../lib/initializer', File.dirname(__FILE__)) + @logger = Logging.logger['sirius.rake'] end namespace :events do desc 'Fetches parallels from KOSapi' task :import => :env do - puts 'Importing parallels.' + @logger.info 'Importing parallels.' build_manager.import_parallels end desc 'Fetches students from KOSapi' task :import_students => :env do - puts 'Importing students, grab a coffee.' + @logger.info 'Importing students, grab a coffee.' build_manager.import_students end desc 'Plans stored parallels' task :plan => :env do - puts 'Planning parallels.' + @logger.info 'Planning parallels.' build_manager.plan_stored_parallels end desc 'Assigns people from parallels to events.' task :assign_people => :env do - puts 'Assigning people to events.' + @logger.info 'Assigning people to events.' build_manager.assign_people end desc 'Imports exams from KOSapi and generates corresponding events.' task :import_exams => :env do - puts 'Importing exams.' + @logger.info 'Importing exams.' build_manager.import_exams end desc 'Import students for saved exam events for all active semesters.' task :import_exam_students => :env do - puts 'Importing exam students.' + @logger.info 'Importing exam students.' build_manager.import_exam_students end desc 'Import course events for all active semesters.' task :import_course_events => :env do - puts 'Importing course events.' + @logger.info 'Importing course events.' build_manager.import_course_events end desc 'Import course event students for all active semesters.' task :import_course_event_students => :env do - puts 'Importing course event students.' + @logger.info 'Importing course event students.' build_manager.import_course_event_students end desc 'Recalculates relative sequence number for all existing non-deleted events in active semesters.' task :renumber => :env do - puts 'Renumbering events.' + @logger.info 'Renumbering events.' build_manager.renumber_events end end diff --git a/script/scheduler b/script/scheduler index 988429f..9eca3cb 100755 --- a/script/scheduler +++ b/script/scheduler @@ -10,50 +10,35 @@ scheduler = Rufus::Scheduler.new class SyncHandler def initialize require 'sirius/schedule_manager' + require 'pliny/tasks' + Dir['lib/tasks/*.rake'].each { |task| load task } + @logger = Logging.logger[self] end def call(job, time) - manager = Sirius::ScheduleManager.new - $stderr.puts "Import started at #{Time.now}" - manager.import_parallels - $stderr.puts "Parallels finished at #{Time.now}" - manager.import_students - $stderr.puts "Students finished at #{Time.now}" - manager.plan_stored_parallels - $stderr.puts "Planning finished at #{Time.now}" - manager.assign_people - $stderr.puts "Assigning people finished at #{Time.now}" - manager.import_exams - $stderr.puts "Importing exams finished at #{Time.now}" - manager.import_exam_students - $stderr.puts "Importing exam students finished at #{Time.now}" - manager.import_course_events - $stderr.puts "Importing course events finished at #{Time.now}" - manager.import_course_event_students - $stderr.puts "Importing course event students finished at #{Time.now}" - manager.renumber_events - $stderr.puts "Renumbering events finished at #{Time.now}" + @logger.info "Scheduled import started." + start = Time.now + Rake::Task['sirius:events'].invoke + finish = Time.now + @logger.info "Scheduled import finished. Time taken: #{finish - start} s." end end - def scheduler.on_error(job, error) begin Raven.capture_exception(error, logger: 'scheduler', extra: { job: job }) rescue => e - $stderr.puts("Failure in reporting scheduler error to Raven (Sentry).") - $stderr.puts(e.inspect) - $stderr.puts(e.backtrace) + Logging.logger[self].error e ensure super end end if Config.sync_schedule - $stderr.puts "Setting automatic sync to '#{Config.sync_schedule}'" + Logging.logger[:scheduler].info "Setting automatic sync to '#{Config.sync_schedule}'" scheduler.repeat Config.sync_schedule, SyncHandler.new, overlap: false, timeout: '1h' else - $stderr.puts 'SYNC_SCHEDULE not configured, automatic sync will be disabled' + Logging.logger[:scheduler].info 'SYNC_SCHEDULE not configured, automatic sync will be disabled' end scheduler.join