9372: container display
[arvados.git] / apps / workbench / app / controllers / application_controller.rb
index 5094556d64e69b924c4016444d17a7ce434fedee..dfa5ebc95c277127b42649fd4f2c141b22490118 100644 (file)
@@ -89,6 +89,7 @@ class ApplicationController < ActionController::Base
     # exception here than in a template.)
     unless current_user.nil?
       begin
+        my_starred_projects current_user
         build_my_wanted_projects_tree current_user
       rescue ArvadosApiClient::ApiError
         # Fall back to the default-setting code later.
@@ -96,8 +97,6 @@ class ApplicationController < ActionController::Base
     end
     @starred_projects ||= []
     @my_wanted_projects_tree ||= []
-    @my_project_tree ||= []
-    @shared_project_tree ||= []
     render_error(err_opts)
   end
 
@@ -446,32 +445,6 @@ class ApplicationController < ActionController::Base
     end
   end
 
-  def star
-    links = Link.where(tail_uuid: current_user.uuid,
-                       head_uuid: @object.uuid,
-                       link_class: 'star')
-
-    if params['status'] == 'create'
-      # create 'star' link if one does not already exist
-      if !links.andand.any?
-        dst = Link.new(owner_uuid: current_user.uuid,
-                       tail_uuid: current_user.uuid,
-                       head_uuid: @object.uuid,
-                       link_class: 'star',
-                       name: @object.uuid)
-        dst.save!
-      end
-    else # delete any existing 'star' links
-      if links.andand.any?
-        links.each do |link|
-          link.destroy
-        end
-      end
-    end
-
-    show
-  end
-
   helper_method :is_starred
   def is_starred
     links = Link.where(tail_uuid: current_user.uuid,
@@ -855,9 +828,21 @@ class ApplicationController < ActionController::Base
     pi
   end
 
-  helper_method :finished_pipelines
-  def finished_pipelines lim
-    PipelineInstance.limit(lim).order(["finished_at desc"]).filter([["state", "in", ["Complete", "Failed", "Paused"]], ["finished_at", "!=", nil]])
+  helper_method :recent_processes
+  def recent_processes lim
+    lim = 12 if lim.nil?
+
+    pipelines = PipelineInstance.limit(lim).order(["created_at desc"])
+
+    crs = ContainerRequest.limit(lim).order(["created_at desc"]).filter([["requesting_container_uuid", "=", nil]])
+    cr_uuids = crs.results.collect { |c| c.container_uuid }
+    containers = Container.order(["created_at desc"]).results if cr_uuids.any?
+
+    procs = {}
+    pipelines.results.each { |pi| procs[pi] = pi.created_at }
+    containers.each { |c| procs[c] = c.created_at } if !containers.nil?
+
+    Hash[procs.sort_by {|key, value| value}].keys.reverse.first(lim)
   end
 
   helper_method :recent_collections
@@ -876,7 +861,7 @@ class ApplicationController < ActionController::Base
     links = Link.filter([['tail_uuid', '=', user.uuid],
                          ['link_class', '=', 'star'],
                          ['head_uuid', 'is_a', 'arvados#group']]).select(%w(head_uuid))
-    uuids =links.collect { |x| x.head_uuid }
+    uuids = links.collect { |x| x.head_uuid }
     starred_projects = Group.filter([['uuid', 'in', uuids]]).order('name')
     @starred_projects = starred_projects.results
   end
@@ -954,57 +939,6 @@ class ApplicationController < ActionController::Base
       sorted_paths.call buildtree.call(children_of, 'me')
   end
 
-  helper_method :my_project_tree
-  def my_project_tree
-    build_project_trees
-    @my_project_tree
-  end
-
-  helper_method :shared_project_tree
-  def shared_project_tree
-    build_project_trees
-    @shared_project_tree
-  end
-
-  def build_project_trees
-    return if @my_project_tree and @shared_project_tree
-    parent_of = {current_user.uuid => 'me'}
-    all_projects.each do |ob|
-      parent_of[ob.uuid] = ob.owner_uuid
-    end
-    children_of = {false => [], 'me' => [current_user]}
-    all_projects.each do |ob|
-      if ob.owner_uuid != current_user.uuid and
-          not parent_of.has_key? ob.owner_uuid
-        parent_of[ob.uuid] = false
-      end
-      children_of[parent_of[ob.uuid]] ||= []
-      children_of[parent_of[ob.uuid]] << ob
-    end
-    buildtree = lambda do |children_of, root_uuid=false|
-      tree = {}
-      children_of[root_uuid].andand.each do |ob|
-        tree[ob] = buildtree.call(children_of, ob.uuid)
-      end
-      tree
-    end
-    sorted_paths = lambda do |tree, depth=0|
-      paths = []
-      tree.keys.sort_by { |ob|
-        ob.is_a?(String) ? ob : ob.friendly_link_name
-      }.each do |ob|
-        paths << {object: ob, depth: depth}
-        paths += sorted_paths.call tree[ob], depth+1
-      end
-      paths
-    end
-    @my_project_tree =
-      sorted_paths.call buildtree.call(children_of, 'me')
-    @shared_project_tree =
-      sorted_paths.call({'Projects shared with me' =>
-                          buildtree.call(children_of, false)})
-  end
-
   helper_method :get_object
   def get_object uuid
     if @get_object.nil? and @objects