accept_attribute_as_json :script_parameters, Hash
accept_attribute_as_json :runtime_constraints, Hash
accept_attribute_as_json :tasks_summary, Hash
- skip_before_filter :find_object_by_uuid, :only => :queue
- skip_before_filter :render_404_if_no_object, :only => :queue
+ skip_before_filter :find_object_by_uuid, :only => [:queue, :queue_size]
+ skip_before_filter :render_404_if_no_object, :only => [:queue, :queue_size]
def create
[:repository, :script, :script_version, :script_parameters].each do |r|
["script_version", "in git",
params[:minimum_script_version] || resource_attrs[:script_version]],
["script_version", "not in git", params[:exclude_script_versions]],
- ].reject { |filter| filter.last.nil? }
+ ].reject { |filter| filter.last.nil? or filter.last.empty? }
if image_search = resource_attrs[:runtime_constraints].andand["docker_image"]
if image_tag = resource_attrs[:runtime_constraints]["docker_image_tag"]
image_search += ":#{image_tag}"
if j.nondeterministic != true and
((j.success == true and j.output != nil) or j.running == true) and
j.script_parameters == resource_attrs[:script_parameters]
- if j.running
+ if j.running && j.owner_uuid == current_user.uuid
# We'll use this if we don't find a job that has completed
incomplete_job ||= j
else
- # Record the first job in the list
- if !@object
- @object = j
- end
- # Ensure that all candidate jobs actually did produce the same output
- if @object.output != j.output
- @object = nil
- break
+ if Collection.readable_by(current_user).find_by_portable_data_hash(j.output)
+ # Record the first job in the list
+ if !@object
+ @object = j
+ end
+ # Ensure that all candidate jobs actually did produce the same output
+ if @object.output != j.output
+ @object = nil
+ break
+ end
end
end
end
index
end
+ def queue_size
+ render :json => {:queue_size => Job.queue.size}
+ end
+
+ def self._create_requires_parameters
+ (super rescue {}).
+ merge({
+ find_or_create: {
+ type: 'boolean', required: false, default: false
+ },
+ filters: {
+ type: 'array', required: false
+ },
+ minimum_script_version: {
+ type: 'string', required: false
+ },
+ exclude_script_versions: {
+ type: 'array', required: false
+ },
+ })
+ end
+
def self._queue_requires_parameters
self._index_requires_parameters
end
search_list = filter[2].is_a?(Enumerable) ? filter[2] : [filter[2]]
filter[2] = search_list.flat_map do |search_term|
image_search, image_tag = search_term.split(':', 2)
- Collection.uuids_for_docker_image(image_search, image_tag, @read_users)
+ Collection.find_all_for_docker_image(image_search, image_tag, @read_users).map(&:portable_data_hash)
end
true
else
if version_range.nil?
raise ArgumentError.
new(["error searching #{script_info['repository']} from",
- "#{script_range['min_version']} to #{last_version},",
+ "'#{script_range['min_version']}' to '#{last_version}',",
"excluding #{script_range['exclude_versions']}"].join(" "))
end
@filters.append(["script_version", "in", version_range])