rosa-build/app/controllers/api/v1/jobs_controller.rb

106 lines
3.3 KiB
Ruby
Raw Normal View History

2013-09-30 17:35:56 +01:00
class Api::V1::JobsController < Api::V1::BaseController
2013-10-17 19:22:40 +01:00
# QUEUES = %w(iso_worker_observer publish_observer rpm_worker_observer)
# QUEUE_CLASSES = %w(AbfWorker::IsoWorkerObserver AbfWorker::PublishObserver AbfWorker::RpmWorkerObserver)
QUEUES = %w(rpm_worker_observer)
QUEUE_CLASSES = %w(AbfWorker::RpmWorkerObserver)
2013-09-30 17:35:56 +01:00
2015-03-04 23:19:19 +00:00
before_action :authenticate_user!
skip_after_action :verify_authorized
2013-09-30 17:35:56 +01:00
def shift
uid = BuildList.scoped_to_arch(arch_ids).
for_status([BuildList::BUILD_PENDING, BuildList::RERUN_TESTS]).
for_platform(platform_ids).pluck('DISTINCT user_id').sample
if uid
build_lists = BuildList.for_status([BuildList::BUILD_PENDING, BuildList::RERUN_TESTS]).
where(user_id: uid).oldest.order(:created_at)
ActiveRecord::Base.transaction do
if current_user.system?
@build_list = build_lists.external_nodes("").first
@build_list ||= build_lists.external_nodes(:everything).first
else
@build_list = build_lists.external_nodes(:owned).for_user(current_user).first
2015-03-26 00:26:24 +00:00
@build_list ||= BuildListPolicy::Scope.new(current_user, build_lists).owned.
external_nodes(:everything).readonly(false).first
2013-10-17 19:22:40 +01:00
end
2014-04-15 19:08:43 +01:00
set_builder
end
2013-09-30 17:35:56 +01:00
end
job = {
worker_queue: @build_list.worker_queue_with_priority(false),
worker_class: @build_list.worker_queue_class,
:worker_args => [@build_list.abf_worker_args]
} if @build_list
2014-01-21 04:51:49 +00:00
render json: { job: job }.to_json
2013-09-30 17:35:56 +01:00
end
def statistics
if params[:uid].present?
RpmBuildNode.create(
2014-04-15 19:08:43 +01:00
id: params[:uid],
user_id: current_user.id,
system: current_user.system?,
2014-01-21 04:51:49 +00:00
worker_count: params[:worker_count],
busy_workers: params[:busy_workers]
) rescue nil
end
2014-01-21 04:51:49 +00:00
render nothing: true
end
2013-09-30 17:35:56 +01:00
def status
2014-03-05 22:18:19 +00:00
if params[:key] =~ /\Aabfworker::(rpm|iso)-worker-[\d]+::live-inspector\z/
status = Redis.current.get(params[:key])
2014-03-05 22:18:19 +00:00
end
render json: { status: status }.to_json
2013-09-30 17:35:56 +01:00
end
def logs
name = params[:name]
if name =~ /abfworker::rpm-worker/
2014-01-21 04:51:49 +00:00
if current_user.system? || current_user.id == BuildList.where(id: name.gsub(/[^\d]/, '')).first.try(:builder_id)
2015-12-15 23:13:31 +00:00
res = BuildList.log_server.setex name, 15, params[:logs]
end
end
2014-01-21 04:51:49 +00:00
render nothing: true
end
2013-09-30 17:35:56 +01:00
def feedback
2013-10-02 16:46:40 +01:00
worker_queue = params[:worker_queue]
worker_class = params[:worker_class]
2013-10-18 14:17:29 +01:00
if QUEUES.include?(worker_queue) && QUEUE_CLASSES.include?(worker_class)
2013-10-17 19:22:40 +01:00
worker_args = (params[:worker_args] || []).first || {}
2014-01-21 04:51:49 +00:00
worker_args = worker_args.merge(feedback_from_user: current_user.id)
2013-10-18 14:17:29 +01:00
Resque.push worker_queue, 'class' => worker_class, 'args' => [worker_args]
2014-01-21 04:51:49 +00:00
render nothing: true
2013-09-30 17:35:56 +01:00
else
2014-01-21 04:51:49 +00:00
render nothing: true, status: 403
2013-09-30 17:35:56 +01:00
end
end
2014-04-15 19:08:43 +01:00
protected
def platform_ids
@platform_ids ||= begin
platforms = params[:platforms].to_s.split(',')
platforms.present? ? Platform.where(name: platforms).pluck(:id) : []
end
end
def arch_ids
@arch_ids ||= begin
arches = params[:arches].to_s.split(',')
arches.present? ? Arch.where(name: arches).pluck(:id) : []
end
end
2014-04-15 19:08:43 +01:00
def set_builder
return unless @build_list
@build_list.builder = current_user
@build_list.save
end
2013-09-30 17:35:56 +01:00
end