diff --git a/lib/crono.rb b/lib/crono.rb index a03f4a4..d874ee9 100644 --- a/lib/crono.rb +++ b/lib/crono.rb @@ -11,5 +11,6 @@ require 'crono/scheduler' require 'crono/config' require 'crono/performer_proxy' require 'crono/orm/active_record/crono_job' +require 'crono/railtie' if defined?(Rails) Crono.autoload :Web, 'crono/web' diff --git a/lib/crono/cli.rb b/lib/crono/cli.rb index cc44468..6f91b2b 100644 --- a/lib/crono/cli.rb +++ b/lib/crono/cli.rb @@ -2,8 +2,6 @@ require 'crono' require 'optparse' module Crono - mattr_accessor :scheduler - # Crono::CLI - The main class for the crono daemon exacutable `bin/crono` class CLI include Singleton diff --git a/lib/crono/orm/active_record/crono_job.rb b/lib/crono/orm/active_record/crono_job.rb index 064df4c..251fc31 100644 --- a/lib/crono/orm/active_record/crono_job.rb +++ b/lib/crono/orm/active_record/crono_job.rb @@ -5,5 +5,9 @@ module Crono class CronoJob < ActiveRecord::Base self.table_name = 'crono_jobs' validates :job_id, presence: true, uniqueness: true + + def self.outdated + self + end end end diff --git a/lib/crono/railtie.rb b/lib/crono/railtie.rb new file mode 100644 index 0000000..6ad7a16 --- /dev/null +++ b/lib/crono/railtie.rb @@ -0,0 +1,9 @@ +module Crono + class Railtie < ::Rails::Railtie + rake_tasks do + Dir[File.join(File.dirname(__FILE__), '../tasks/*.rake')].each do |file| + load file + end + end + end +end diff --git a/lib/crono/scheduler.rb b/lib/crono/scheduler.rb index 4fdad8b..284683b 100644 --- a/lib/crono/scheduler.rb +++ b/lib/crono/scheduler.rb @@ -22,4 +22,6 @@ module Crono jobs.sort_by(&:next) end end + + mattr_accessor :scheduler end diff --git a/lib/tasks/crono_tasks.rake b/lib/tasks/crono_tasks.rake new file mode 100644 index 0000000..1dfbda7 --- /dev/null +++ b/lib/tasks/crono_tasks.rake @@ -0,0 +1,9 @@ +namespace :crono do + desc 'Clean unused job stats from DB' + task clean: :environment do + Crono.scheduler = Crono::Scheduler.new + require File.join(Rails.root, 'config', 'cronotab') + current_job_ids = Crono.scheduler.jobs.map(&:job_id) + Crono::CronoJob.where.not(job_id: current_job_ids).destroy_all + end +end