diff options
-rw-r--r-- | app/models/project.rb | 5 | ||||
-rw-r--r-- | config/schedule.rb | 21 | ||||
-rw-r--r-- | lib/scheduler.rb | 15 | ||||
-rw-r--r-- | lib/scheduler_job.rb | 22 |
4 files changed, 18 insertions, 45 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index ed5bc2e..d79c9cb 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -17,7 +17,6 @@ class Project < ActiveRecord::Base if: ->(project) { project.always_build.present? } before_validation :set_default_values - after_save :set_scheduler def set_default_values self.token = SecureRandom.hex(15) if self.token.blank? @@ -122,10 +121,6 @@ class Project < ActiveRecord::Base self.token && self.token == token end - def set_scheduler - true - end - def schedule_id "project-#{id}" end diff --git a/config/schedule.rb b/config/schedule.rb index de75cf9..cf2358e 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -1,20 +1,5 @@ # Use this file to easily define all of your cron jobs. # -# It's helpful, but not entirely necessary to understand cron before proceeding. -# http://en.wikipedia.org/wiki/Cron - -# Example: -# -# set :output, "/path/to/my/cron_log.log" -# -# every 2.hours do -# command "/usr/bin/some_great_command" -# runner "MyModel.some_method" -# rake "some:great:rake:task" -# end -# -# every 4.days do -# runner "AnotherModel.prune_old_records" -# end - -# Learn more: http://github.com/javan/whenever +every 1.hour do + runner "Scheduler.new.perform" +end diff --git a/lib/scheduler.rb b/lib/scheduler.rb new file mode 100644 index 0000000..ec4ed2c --- /dev/null +++ b/lib/scheduler.rb @@ -0,0 +1,15 @@ +class Scheduler + def perform + projects = Project.where(always_build: true).all + projects.each do |project| + last_build_time = project.last_build.created_at + interval = project.polling_interval + if (last_build_time + interval.hours) < Time.now + build = project.register_build(ref: project.tracked_refs.first) + if build and build.id + Runner.perform_async(build.id) + end + end + end + end +end diff --git a/lib/scheduler_job.rb b/lib/scheduler_job.rb deleted file mode 100644 index ee6c4ed..0000000 --- a/lib/scheduler_job.rb +++ /dev/null @@ -1,22 +0,0 @@ -class SchedulerJob - @queue = :scheduler_task - - def self.perform(method, *args) - self.send(method, *args) - end - - # run scheduler job - def self.run(project_id) - @project = Project.find(project_id) - - # when always_build not checked, do not build project in schedule if project not updated - return if !@project.always_build && (@project.builds.last.sha == @project.last_ref_sha(@project.default_ref)) - - # always_build not checked and project updated, build it - # always_build checked and no matter project updated or not, build it - @build = @project.register_build(ref: @project.default_ref) - if @build and @build.id - Runner.new(Build.find(@build.id)).run - end - end -end |