if direction == :search_up
# Search upstream for jobs where this locator is the output of some job
- if !Rails.configuration.API.DisabledAPIs.include?("jobs.list")
+ if !Rails.configuration.API.DisabledAPIs["jobs.list"]
Job.readable_by(*@read_users).where(output: loc.to_s).each do |job|
search_edges(visited, job.uuid, :search_up)
end
end
# Search downstream for jobs where this locator is in script_parameters
- if !Rails.configuration.API.DisabledAPIs.include?("jobs.list")
+ if !Rails.configuration.API.DisabledAPIs["jobs.list"]
Job.readable_by(*@read_users).where(["jobs.script_parameters like ?", "%#{loc.to_s}%"]).each do |job|
search_edges(visited, job.uuid, :search_down)
end
visited[uuid] = c.as_api_response
if direction == :search_up
# Follow upstream collections referenced in the script parameters
- find_collections(visited, c) do |hash, col_uuid|
+ find_collections(visited, c, ignore_columns=["log", "output"]) do |hash, col_uuid|
search_edges(visited, hash, :search_up) if hash
search_edges(visited, col_uuid, :search_up) if col_uuid
end
elsif direction == :search_down
# Follow downstream job output
- search_edges(visited, c.output, direction)
+ search_edges(visited, c.output, :search_down)
end
end
elsif rsc == ContainerRequest
visited[uuid] = c.as_api_response
if direction == :search_up
# Follow upstream collections
- find_collections(visited, c, ignore_columns=["log_uuid"]) do |hash, col_uuid|
+ find_collections(visited, c, ignore_columns=["log_uuid", "output_uuid"]) do |hash, col_uuid|
search_edges(visited, hash, :search_up) if hash
search_edges(visited, col_uuid, :search_up) if col_uuid
end
elsif direction == :search_down
# Follow downstream job output
- search_edges(visited, c.output_uuid, direction)
+ search_edges(visited, c.output_uuid, :search_down)
end
end
elsif rsc == Collection
if direction == :search_up
visited[c.uuid] = c.as_api_response
+ if !Rails.configuration.API.DisabledAPIs["jobs.list"]
+ Job.readable_by(*@read_users).where(output: c.portable_data_hash).each do |job|
+ search_edges(visited, job.uuid, :search_up)
+ end
+
+ Job.readable_by(*@read_users).where(log: c.portable_data_hash).each do |job|
+ search_edges(visited, job.uuid, :search_up)
+ end
+ end
+
ContainerRequest.readable_by(*@read_users).where(output_uuid: uuid).each do |cr|
search_edges(visited, cr.uuid, :search_up)
end
search_edges(visited, cr.uuid, :search_up)
end
elsif direction == :search_down
- search_edges(visited, c.portable_data_hash, direction)
+ search_edges(visited, c.portable_data_hash, :search_down)
end
end
elsif rsc != nil