Merge branch 'master' into 3889-functional-testing
[arvados.git] / apps / workbench / app / controllers / application_controller.rb
index 2810a66b4f7764af5762e3c148d4ba892477aa4e..4b775c6036af8bd37c848c2dfc5bf227a41cbfb7 100644 (file)
@@ -128,6 +128,8 @@ class ApplicationController < ActionController::Base
           end
         end
       end
+      # After this, params[:filters] can be trusted to be an array of arrays:
+      params[:filters] = filters
       @filters += filters
     end
   end
@@ -211,7 +213,7 @@ class ApplicationController < ActionController::Base
       end
       f.html {
         if params['tab_pane']
-          render_pane params['tab_pane']
+          render_pane(if params['tab_pane'].is_a? Hash then params['tab_pane']["name"] else params['tab_pane'] end)
         elsif request.method.in? ['GET', 'HEAD']
           render
         else
@@ -690,6 +692,48 @@ class ApplicationController < ActionController::Base
     end.reverse
   end
 
+  helper_method :running_pipelines
+  def running_pipelines
+    pi = PipelineInstance.order(["started_at asc", "created_at asc"]).filter([["state", "in", ["RunningOnServer", "RunningOnClient"]]])
+    jobs = {}
+    pi.each do |pl|
+      pl.components.each do |k,v|
+        if v.is_a? Hash and v[:job]
+          jobs[v[:job][:uuid]] = {}
+        end
+      end
+    end
+
+    Job.filter([["uuid", "in", jobs.keys]]).each do |j|
+      jobs[j[:uuid]] = j
+    end
+
+    pi.each do |pl|
+      pl.components.each do |k,v|
+        if v.is_a? Hash and v[:job]
+          v[:job] = jobs[v[:job][:uuid]]
+        end
+      end
+    end
+
+    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]])
+  end
+
+  helper_method :recent_collections
+  def recent_collections lim
+    c = Collection.limit(lim).order(["modified_at desc"]).filter([["owner_uuid", "is_a", "arvados#group"]])
+    own = {}
+    Group.filter([["uuid", "in", c.map(&:owner_uuid)]]).each do |g|
+      own[g[:uuid]] = g
+    end
+    {collections: c, owners: own}
+  end
+
   helper_method :my_project_tree
   def my_project_tree
     build_project_trees