ERROR_ACTIONS = [:render_error, :render_not_found]
+ prepend_before_filter :set_current_request_id, except: ERROR_ACTIONS
around_filter :thread_clear
around_filter :set_thread_api_token
# Methods that don't require login should
before_filter :check_user_profile, except: ERROR_ACTIONS
before_filter :load_filters_and_paging_params, except: ERROR_ACTIONS
before_filter :find_object_by_uuid, except: [:create, :index, :choose] + ERROR_ACTIONS
- before_filter :set_client_session_id, except: ERROR_ACTIONS
theme :select_theme
begin
with: :render_exception)
end
- def set_client_session_id
- # Session ID format: '<timestamp>-<9_digits_random_number>'
- client_session_id = "#{Time.new.to_i}-#{sprintf('%09d', rand(0..10**9-1))}"
- Thread.current[:client_session_id] = client_session_id
- end
-
def set_cache_buster
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
if not model_class
@object = nil
elsif not params[:uuid].is_a?(String)
- @object = model_class.where(uuid: params[:uuid]).first
+ @object = object_for_dataclass(model_class, params[:uuid])
elsif params[:uuid].empty?
@object = nil
elsif (model_class != Link and
@name_link = Link.find(params[:uuid])
@object = model_class.find(@name_link.head_uuid)
else
- @object = model_class.find(params[:uuid])
+ @object = object_for_dataclass(model_class, params[:uuid])
end
rescue ArvadosApiClient::NotFoundException, ArvadosApiClient::NotLoggedInException, RuntimeError => error
if error.is_a?(RuntimeError) and (error.message !~ /^argument to find\(/)
helper_method :user_notifications
def user_notifications
- return [] if @errors or not current_user.andand.is_active
+ return [] if @errors or not current_user.andand.is_active or not Rails.configuration.show_user_notifications
@notifications ||= @@notification_tests.map do |t|
t.call(self, current_user)
end.compact
def recent_processes lim
lim = 12 if lim.nil?
- pipelines = PipelineInstance.limit(lim).order(["created_at desc"])
+ cols = %w(uuid owner_uuid created_at modified_at pipeline_template_uuid name state started_at finished_at)
+ pipelines = PipelineInstance.select(cols).limit(lim).order(["created_at desc"])
crs = ContainerRequest.limit(lim).order(["created_at desc"]).filter([["requesting_container_uuid", "=", nil]])
procs = {}
helper_method :recent_collections
def recent_collections lim
- c = Collection.limit(lim).order(["modified_at desc"]).filter([["owner_uuid", "is_a", "arvados#group"]])
+ c = Collection.limit(lim).order(["modified_at desc"]).results
own = {}
Group.filter([["uuid", "in", c.map(&:owner_uuid)]]).each do |g|
own[g[:uuid]] = g
# helper method to get object of a given dataclass and uuid
helper_method :object_for_dataclass
- def object_for_dataclass dataclass, uuid
+ def object_for_dataclass dataclass, uuid, by_name=nil
raise ArgumentError, 'No input argument dataclass' unless (dataclass && uuid)
- preload_objects_for_dataclass(dataclass, [uuid])
+ preload_objects_for_dataclass(dataclass, [uuid], by_name)
@objects_for[uuid]
end
# helper method to preload objects for given dataclass and uuids
helper_method :preload_objects_for_dataclass
- def preload_objects_for_dataclass dataclass, uuids
+ def preload_objects_for_dataclass dataclass, uuids, by_name=nil
@objects_for ||= {}
raise ArgumentError, 'Argument is not a data class' unless dataclass.is_a? Class
uuids.each do |x|
@objects_for[x] = nil
end
- dataclass.where(uuid: uuids).each do |obj|
- @objects_for[obj.uuid] = obj
+ if by_name
+ dataclass.where(name: uuids).each do |obj|
+ @objects_for[obj.name] = obj
+ end
+ else
+ dataclass.where(uuid: uuids).each do |obj|
+ @objects_for[obj.uuid] = obj
+ end
end
@objects_for
end
+ # helper method to load objects that are already preloaded
+ helper_method :load_preloaded_objects
+ def load_preloaded_objects objs
+ @objects_for ||= {}
+ objs.each do |obj|
+ @objects_for[obj.uuid] = obj
+ end
+ end
+
def wiselinks_layout
'body'
end
+
+ def set_current_request_id
+ # Request ID format: '<timestamp>-<9_digits_random_number>'
+ current_request_id = "#{Time.new.to_i}-#{sprintf('%09d', rand(0..10**9-1))}"
+ Thread.current[:current_request_id] = current_request_id
+ end
end