X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0662b235357dd40b5d27efd06b60044ddcec06f6..644f5de63e2b8b02e054fcbb3e9af39560cffae3:/services/api/app/controllers/arvados/v1/schema_controller.rb
diff --git a/services/api/app/controllers/arvados/v1/schema_controller.rb b/services/api/app/controllers/arvados/v1/schema_controller.rb
index ba0f90f90c..c3b34112b2 100644
--- a/services/api/app/controllers/arvados/v1/schema_controller.rb
+++ b/services/api/app/controllers/arvados/v1/schema_controller.rb
@@ -1,3 +1,7 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
class Arvados::V1::SchemaController < ApplicationController
skip_before_filter :catch_redirect_hint
skip_before_filter :find_objects_for_index
@@ -13,7 +17,13 @@ class Arvados::V1::SchemaController < ApplicationController
def index
expires_in 24.hours, public: true
- discovery = Rails.cache.fetch 'arvados_v1_rest_discovery' do
+ send_json discovery_doc
+ end
+
+ protected
+
+ def discovery_doc
+ Rails.cache.fetch 'arvados_v1_rest_discovery' do
Rails.application.eager_load!
discovery = {
kind: "discovery#restDescription",
@@ -37,6 +47,18 @@ class Arvados::V1::SchemaController < ApplicationController
defaultTrashLifetime: Rails.application.config.default_trash_lifetime,
blobSignatureTtl: Rails.application.config.blob_signature_ttl,
maxRequestSize: Rails.application.config.max_request_size,
+ dockerImageFormats: Rails.application.config.docker_image_formats,
+ crunchLogBytesPerEvent: Rails.application.config.crunch_log_bytes_per_event,
+ crunchLogSecondsBetweenEvents: Rails.application.config.crunch_log_seconds_between_events,
+ crunchLogThrottlePeriod: Rails.application.config.crunch_log_throttle_period,
+ crunchLogThrottleBytes: Rails.application.config.crunch_log_throttle_bytes,
+ crunchLogThrottleLines: Rails.application.config.crunch_log_throttle_lines,
+ crunchLimitLogBytesPerJob: Rails.application.config.crunch_limit_log_bytes_per_job,
+ crunchLogPartialLineThrottlePeriod: Rails.application.config.crunch_log_partial_line_throttle_period,
+ remoteHosts: Rails.configuration.remote_hosts,
+ remoteHostsViaDNS: Rails.configuration.remote_hosts_via_dns,
+ websocketUrl: Rails.application.config.websocket_address,
+ workbenchUrl: Rails.application.config.workbench_address,
parameters: {
alt: {
type: "string",
@@ -82,12 +104,6 @@ class Arvados::V1::SchemaController < ApplicationController
resources: {}
}
- if Rails.application.config.websocket_address
- discovery[:websocketUrl] = Rails.application.config.websocket_address
- elsif ENV['ARVADOS_WEBSOCKETS']
- discovery[:websocketUrl] = (root_url.sub /^http/, 'ws') + "websocket"
- end
-
ActiveRecord::Base.descendants.reject(&:abstract_class?).each do |k|
begin
ctl_class = "Arvados::V1::#{k.to_s.pluralize}Controller".constantize
@@ -186,14 +202,14 @@ class Arvados::V1::SchemaController < ApplicationController
"https://api.curoverse.com/auth/arvados.readonly"
]
},
- list: {
- id: "arvados.#{k.to_s.underscore.pluralize}.list",
+ index: {
+ id: "arvados.#{k.to_s.underscore.pluralize}.index",
path: k.to_s.underscore.pluralize,
httpMethod: "GET",
description:
- %|List #{k.to_s.pluralize}.
+ %|Index #{k.to_s.pluralize}.
- The list
method returns a
+ The index
method returns a
resource list of
matching #{k.to_s.pluralize}. For example:
@@ -213,47 +229,6 @@ class Arvados::V1::SchemaController < ApplicationController
}
|,
parameters: {
- limit: {
- type: "integer",
- description: "Maximum number of #{k.to_s.underscore.pluralize} to return.",
- default: "100",
- format: "int32",
- minimum: "0",
- location: "query",
- },
- offset: {
- type: "integer",
- description: "Number of #{k.to_s.underscore.pluralize} to skip before first returned record.",
- default: "0",
- format: "int32",
- minimum: "0",
- location: "query",
- },
- filters: {
- type: "array",
- description: "Conditions for filtering #{k.to_s.underscore.pluralize}.",
- location: "query"
- },
- where: {
- type: "object",
- description: "Conditions for filtering #{k.to_s.underscore.pluralize}. (Deprecated. Use filters instead.)",
- location: "query"
- },
- order: {
- type: "string",
- description: "Order in which to return matching #{k.to_s.underscore.pluralize}.",
- location: "query"
- },
- select: {
- type: "array",
- description: "Select which fields to return",
- location: "query"
- },
- distinct: {
- type: "boolean",
- description: "Return each distinct object",
- location: "query"
- }
},
response: {
"$ref" => "#{k.to_s}List"
@@ -377,30 +352,41 @@ class Arvados::V1::SchemaController < ApplicationController
method = d_methods[action.to_sym]
end
if ctl_class.respond_to? "_#{action}_requires_parameters".to_sym
- ctl_class.send("_#{action}_requires_parameters".to_sym).each do |k, v|
+ ctl_class.send("_#{action}_requires_parameters".to_sym).each do |l, v|
if v.is_a? Hash
- method[:parameters][k] = v
+ method[:parameters][l] = v
else
- method[:parameters][k] = {}
+ method[:parameters][l] = {}
end
- if !method[:parameters][k][:default].nil?
+ if !method[:parameters][l][:default].nil?
# The JAVA SDK is sensitive to all values being strings
- method[:parameters][k][:default] = method[:parameters][k][:default].to_s
+ method[:parameters][l][:default] = method[:parameters][l][:default].to_s
end
- method[:parameters][k][:type] ||= 'string'
- method[:parameters][k][:description] ||= ''
- method[:parameters][k][:location] = (route.segment_keys.include?(k) ? 'path' : 'query')
- if method[:parameters][k][:required].nil?
- method[:parameters][k][:required] = v != false
+ method[:parameters][l][:type] ||= 'string'
+ method[:parameters][l][:description] ||= ''
+ method[:parameters][l][:location] = (route.segment_keys.include?(l) ? 'path' : 'query')
+ if method[:parameters][l][:required].nil?
+ method[:parameters][l][:required] = v != false
end
end
end
d_methods[action.to_sym] = method
+
+ if action == 'index'
+ list_method = method.dup
+ list_method[:id].sub!('index', 'list')
+ list_method[:description].sub!('Index', 'List')
+ list_method[:description].sub!('index', 'list')
+ d_methods[:list] = list_method
+ end
end
end
end
+ Rails.configuration.disable_api_methods.each do |method|
+ ctrl, action = method.split('.', 2)
+ discovery[:resources][ctrl][:methods].delete(action.to_sym)
+ end
discovery
end
- send_json discovery
end
end