Skip to content
Snippets Groups Projects
Commit 4d9c7eac authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Implement scheduler

parent cccef5c4
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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?
Loading
Loading
@@ -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
Loading
Loading
# 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
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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment