Dashboard now consists of recent collections, jobs, and pipeline instances.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 27 Dec 2013 21:26:40 +0000 (16:26 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 27 Dec 2013 21:26:40 +0000 (16:26 -0500)
apps/workbench/app/controllers/users_controller.rb
apps/workbench/app/views/users/home.html.erb

index f48d3b2b92b923ad7b52316fcdb587a6dc927b18..002ea62bea61ab41829881240d68a4a462a22555 100644 (file)
@@ -11,13 +11,24 @@ class UsersController < ApplicationController
 
   def home
     @my_ssh_keys = AuthorizedKey.where(authorized_user_uuid: current_user.uuid)
-    @my_vm_perms = Link.where(tail_uuid: current_user.uuid, head_kind: 'arvados#virtual_machine', link_class: 'permission', name: 'can_login')
-    @my_repo_perms = Link.where(tail_uuid: current_user.uuid, head_kind: 'arvados#repository', link_class: 'permission', name: 'can_write')
+    @my_vm_perms = Link.where(tail_uuid: current_user.uuid, head_kind: 'arvados#virtual_machine', link_class: 'permission', name: 'can_login')
+    @my_repo_perms = Link.where(tail_uuid: current_user.uuid, head_kind: 'arvados#repository', link_class: 'permission', name: 'can_write')
     @my_jobs = Job.
       limit(10).
       order('created_at desc').
       where(created_by: current_user.uuid)
 
+    @my_collections = Collection.
+      limit(10).
+      order('created_at desc').
+      where(created_by: current_user.uuid)
+
+    @my_pipelines = PipelineInstance.
+      limit(10).
+      order('created_at desc').
+      where(created_by: current_user.uuid)
+
+
     # A Tutorial is a Link which has link_class "resources" and name
     # "wants", and is owned by the Tutorials Group (i.e., named
     # "Arvados Tutorials" and owned by the system user).
index 8cdb79584dafcfd5aecdfd738d02aa98e0a58107..68897cdf7b6dcbe4a46dd6db12c415bb2d39af33 100644 (file)
@@ -8,8 +8,14 @@
       margin-left: auto;
       margin-right: auto;
       }
+      .job-table {
+      white-space: nowrap;
+      table-layout: fixed;
+      }
       .job-table td {
+      overflow: hidden;
       overflow-x: hidden;
+      text-overflow: ellipsis;
       }
       .centerme {
       margin-left: auto;
       font-size: 4em;
       font-weight: bold;
       }
+      .dax {
+      max-width: 5%;
+      margin-right: 1em;
+      float: left
+      }
+      .daxalert {
+      overflow: hidden;
+      }
     </style>
 <% end %>
 
 
 
 <% if @my_ssh_keys.count == 0%>
-  <div class="alert alert-info">
+  <div class="alert alert-info daxalert">
     <button type="button" class="close" data-dismiss="alert">&times;</button>
-    <div class="span5" style="overflow: hidden; margin-right: 1em">
-      <%= image_tag "dax.png", style: "max-width: 10%; margin-right: 1em; float: left" %>
+    <%= image_tag "dax.png", class: "dax" %>
+    <div class="span5" style="margin-right: 1em">
       Hi, I noticed that you have not yet set up an SSH public key for use with Arvados.  
       <%= link_to "Click here to learn about SSH keys in Arvados.",
          "http://doc.arvados.org/user/getting_started/ssh-access.html", style: "font-weight: bold" %>
     </div>
       <%= form_for AuthorizedKey.new do |f| %>
        <%= hidden_field_tag :return_to, request.original_url %>
-       <%= f.text_area :public_key, cols: 50, rows: 4, placeholder: "Paste your public key here", style: "width: 45%" %>
+       <%= f.text_area :public_key, cols: 50, rows: 4, placeholder: "Paste your public key here", style: "width: 40%" %>
        <%= f.submit :Save, value: raw("&check;"), class: "btn btn-primary", style: "vertical-align: top" %>
       <% end %>
   </div>
 <% end %>
 
 <% if Collection.limit(1).where(created_by: current_user.uuid).count == 0 %>
-<div class="alert alert-block alert-info">
+<div class="alert alert-info daxalert">
   <button type="button" class="close" data-dismiss="alert">&times;</button>
-  <p><%= image_tag "dax.png", style: "max-width: 5%; margin-right: 1em" %>
+  <%= image_tag "dax.png", class: "dax" %>
+  <p>
     Hi, I noticed you haven't uploaded a new collection yet. 
     <%= link_to "Click here to learn how to upload data to Arvados Keep.", "http://doc.arvados.org/user/tutorials/tutorial-keep.html", style: "font-weight: bold" %>
   </p>
@@ -57,9 +72,9 @@
 <% end %>
 
 <% if Job.limit(1).where(created_by: current_user.uuid).count == 0 %>
-<div class="alert alert-block alert-info">
+<div class="alert alert-info daxalert">
   <button type="button" class="close" data-dismiss="alert">&times;</button>  
-  <p><%= image_tag "dax.png", style: "max-width: 5%; margin-right: 1em" %>
+  <p><%= image_tag "dax.png", class: "dax" %>
     Hi, I noticed you haven't run a job yet. 
     <%= link_to "Click here to learn how to run an Arvados Crunch job.", "http://doc.arvados.org/user/tutorials/tutorial-job1.html", style: "font-weight: bold" %>
   </p>
@@ -67,9 +82,9 @@
 <% end %>
 
 <% if PipelineInstance.limit(1).where(created_by: current_user.uuid).count == 0 %>
-<div class="alert alert-block alert-info">
+<div class="alert alert-info daxalert">
   <button type="button" class="close" data-dismiss="alert">&times;</button>
-  <p><%= image_tag "dax.png", style: "max-width: 5%; margin-right: 1em" %>
+  <p><%= image_tag "dax.png", class: "dax" %>
     Hi, I noticed you haven't run a pipeline yet.  
     <%= link_to "Click here to learn how to run an Arvados Crunch pipeline.", "http://doc.arvados.org/user/tutorials/tutorial-new-pipeline.html", style: "font-weight: bold" %>
   </p>
 <% end %>
 
 <div class="row-fluid">
-  <div class="col span12">
-    <div class="clearfix">
-      <h4>Account summary</h4>
-      <div class="well clearfix">
-        <% [Human, Trait, Collection, 'File', PipelineTemplate, PipelineInstance].each do |aclass| %>
-        <div class="col span2 centerme">
-          <span class="bigfatnumber">
-            <% if aclass == 'File' %>
-            <%= Collection.limit(4000).where({}).collect(&:files).flatten(1).count %>
-            <% else %>
-            <%= aclass.limit(4000).where({}).count %>
-            <% end %>
-          </span>
-          <br />
-          <%= raw(aclass.to_s.pluralize.underscore.gsub '_', '&nbsp;') %>
-        </div>
-       <% end %>
-      </div>
-    </div>
-  </div>
-</div>
 
-<div class="row-fluid">
-  <div class="col span3">
-    <div class="clearfix">
-      <h4>Configuration</h4>
-      <div class="well dash-list">
-        <ul class="nav nav-list">
-          <li class="clearfix">
-            <a href="<%= authorized_keys_path %>">
-              <span class="pull-left"><%= raw '&#x2714;' if @my_ssh_keys.any? %>&nbsp;</span>
-              SSH keys
-              <span class="pull-right"><%= @my_ssh_keys.count %></span>
-            </a>
-          </li>
-          <li class="clearfix">
-            <a href="<%= virtual_machines_path %>">
-              <span class="pull-left"><%= raw '&#x2714;' if @my_vm_perms.any? %>&nbsp;</span>
-              Virtual machines
-              <span class="pull-right"><%= @my_vm_perms.collect(&:head_uuid).uniq.count %></span>
-            </a>
-          </li>
-          <li class="clearfix">
-            <a href="<%= repositories_path %>">
-              <span class="pull-left"><%= raw '&#x2714;' if @my_repo_perms.any? %>&nbsp;</span>
-              Repositories
-              <span class="pull-right"><%= @my_repo_perms.collect(&:head_uuid).uniq.count %></span>
-            </a>
-          </li>
-        </ul>
-      </div>
-    </div>
-  </div>
   <div class="col span4">
-    <%= render partial: 'quick_links' %>
-  </div>
-  <div class="col span5">
     <div class="clearfix">
-      <h4>Recent jobs</h4>
-      <% if not current_user.andand.is_active or @my_jobs.empty? %>
+      <h4>Recent collections</h4>
+      <% if not current_user.andand.is_active or @my_collections.empty? %>
       (None)
       <% else %>
       <table class="table table-bordered table-condensed job-table">
-        <% @my_jobs[0..8].each do |j| %>
+       <colgroup>
+          <col width="70%" />
+          <col width="30%" />
+       </colgroup>
+        <% @my_collections[0..8].each do |c| %>
         <tr>
           <td>
             <small>
-              <%= link_to j.script[0..31], job_path(j.uuid) %>
+              <%= link_to c.uuid[0..31], collection_path(c.uuid) %> 
             </small>
           </td>
           <td>
             <small>
-              <%= j.script_version[0..7] %>
+<%= raw(distance_of_time_in_words(c[:created_at], Time.now).sub('about
+','~').sub(' ','&nbsp;')) if c[:created_at] %> ago
             </small>
           </td>
+        </tr>
+        <% end %>
+      </table>
+      <%= link_to raw("Show all collections &rarr;"), collections_path, class: 'pull-right' %>
+      <% end %>
+    </div>
+  </div>
+
+  <div class="col span4">
+    <div class="clearfix">
+      <h4>Recent jobs</h4>
+      <% if not current_user.andand.is_active or @my_jobs.empty? %>
+      (None)
+      <% else %>
+      <table class="table table-bordered table-condensed job-table">
+       <colgroup>
+          <col width="40%" />
+          <col width="20%" />
+          <col width="40%" />
+       </colgroup>
+
+        <% @my_jobs[0..8].each do |j| %>
+        <tr>
           <td>
             <small>
-              <%= j.script_parameters.andand[:input].andand.to_s.andand[0..7] %>
+              <%= link_to j.script[0..31], job_path(j.uuid) %>
             </small>
           </td>
           <td>
             <span class="label">queued</span>
             <% end %>
           </td>
+         <td>
+           <small>
+           <% if j.success %>
+           <%= link_to j.output[0..31], collection_path(j.output) %>  
+           <% end %>
+           </small>
+         </td>
         </tr>
         <% end %>
       </table>
-      <%= link_to raw("Show more jobs / details &rarr;"), jobs_path, class: 'pull-right' %>
+      <%= link_to raw("Show all jobs &rarr;"), jobs_path, class: 'pull-right' %>
       <% end %>
     </div>
   </div>
+
+  <div class="col span4">
+    <div class="clearfix">
+      <h4>Recent pipeline instances</h4>
+      <% if not current_user.andand.is_active or @my_pipelines.empty? %>
+      (None)
+      <% else %>
+      <table class="table table-bordered table-condensed job-table">
+       <colgroup>
+          <col width="80%" />
+          <col width="20%" />
+       </colgroup>
+
+        <% @my_pipelines[0..8].each do |p| %>
+        <tr>
+          <td>
+            <small>
+             <% i = PipelineTemplate.limit(1).where(uuid: p.pipeline_template_uuid)[0] %>
+               <%= link_to i.name, pipeline_instance_path(p.uuid) %>
+            </small>
+          </td>
+          <td>
+            <% if p.success %>
+            <span class="label label-success">finished</span>
+            <% elsif p.success == false %>
+            <span class="label label-danger">failed</span>
+            <% elsif p.active %>
+            <span class="label label-info">running</span>
+            <% else %>
+            <span class="label">queued</span>
+            <% end %>
+          </td>
+        </tr>
+        <% end %>
+      </table>
+      <%= link_to raw("Show all pipeline instances &rarr;"), jobs_path, class: 'pull-right' %>
+      <% end %>
+    </div>
+  </div>
+
+
 </div>
 
 <% elsif current_user %>