include KindAndEtag
include CommonApiTemplate
serialize :script_parameters, Hash
- serialize :resource_limits, Hash
+ serialize :runtime_constraints, Hash
serialize :tasks_summary, Hash
before_create :ensure_unique_submit_id
before_create :ensure_script_version_is_commit
class SubmitIdReused < StandardError
end
- api_accessible :superuser, :extend => :common do |t|
+ api_accessible :user, extend: :common do |t|
t.add :submit_id
t.add :priority
t.add :script
t.add :running
t.add :is_locked_by_uuid
t.add :log
- t.add :resource_limits
+ t.add :runtime_constraints
t.add :tasks_summary
t.add :dependencies
+ t.add :log_stream_href
end
def assert_finished
running: false)
end
+ def log_stream_href
+ unless self.finished_at
+ "#{current_api_base}/#{self.class.to_s.pluralize.underscore}/#{self.uuid}/log_tail_follow"
+ end
+ end
+
def self.queue
self.where('started_at is ? and is_locked_by_uuid is ? and cancelled_at is ?',
nil, nil, nil).
def dependencies
deps = {}
- self.script_parameters.values.each do |v|
- next unless v.is_a? String
- v.match(/^(([0-9a-f]{32})\b(\+[^,]+)?,?)*$/) do |locator|
- deps[locator] = true
+ queue = self.script_parameters.values
+ while not queue.empty?
+ queue = queue.flatten.compact.collect do |v|
+ if v.is_a? Hash
+ v.values
+ elsif v.is_a? String
+ v.match(/^(([0-9a-f]{32})\b(\+[^,]+)?,?)*$/) do |locator|
+ deps[locator.to_s] = true
+ end
+ nil
+ end
end
end
deps.keys