summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/project.rb5
-rw-r--r--config/schedule.rb21
-rw-r--r--lib/scheduler.rb15
-rw-r--r--lib/scheduler_job.rb22
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