New two-column dashboard layout suggested by Adam
[arvados.git] / apps / workbench / app / views / users / home.html.erb
index 8cdb79584dafcfd5aecdfd738d02aa98e0a58107..bf14fdd854d72bed8ee9b748d5e07aaa5c5994f9 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: 10%;
+      margin-right: 1em;
+      float: left
+      }
+      .daxalert {
+      overflow: hidden;
+      }
     </style>
 <% end %>
 
 <% if current_user.andand.is_active %>
 
+<div class="container-fluid">
+  
+  <div class="span7">
 
-<% if @my_ssh_keys.count == 0%>
-  <div class="alert alert-info">
-    <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" %>
-      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" %>
-      Once have an SSH key you would like to use, paste your SSH public key
-      in the text box.
-    </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.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">
-  <button type="button" class="close" data-dismiss="alert">&times;</button>
-  <p><%= image_tag "dax.png", style: "max-width: 5%; margin-right: 1em" %>
-    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>
-</div>
-
-<% end %>
-
-<% if Job.limit(1).where(created_by: current_user.uuid).count == 0 %>
-<div class="alert alert-block alert-info">
-  <button type="button" class="close" data-dismiss="alert">&times;</button>  
-  <p><%= image_tag "dax.png", style: "max-width: 5%; margin-right: 1em" %>
-    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>
-</div>
-<% end %>
-
-<% if PipelineInstance.limit(1).where(created_by: current_user.uuid).count == 0 %>
-<div class="alert alert-block alert-info">
-  <button type="button" class="close" data-dismiss="alert">&times;</button>
-  <p><%= image_tag "dax.png", style: "max-width: 5%; margin-right: 1em" %>
-    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>
-</div>
-<% 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>
+    <div>
+      <strong>Recent jobs</strong>
+      <%= link_to raw("Show all jobs &rarr;"), jobs_path, class: 'pull-right' %>
       <% if not current_user.andand.is_active or @my_jobs.empty? %>
       (None)
       <% else %>
       <table class="table table-bordered table-condensed job-table">
-        <% @my_jobs[0..8].each do |j| %>
+       <colgroup>
+          <col width="28%" />
+          <col width="38%" />
+          <col width="7%" />
+          <col width="15%" />
+          <col width="12%" />
+       </colgroup>
+
+        <tr>
+         <th>Script</th>
+         <th>Output</th>
+         <th>Log</th>
+         <th>Status</th>
+         <th>Age</th>
+       </tr>
+
+        <% @my_jobs[0..6].each do |j| %>
         <tr>
           <td>
             <small>
               <%= link_to j.script[0..31], job_path(j.uuid) %>
             </small>
           </td>
+
+         <td>
+           <small>
+           <% if j.success %>
+
+             <a href="<%= collection_path(j.output) %>">
+               <% Collection.limit(1).where(uuid: j.output).each do |c|
+                      c.files.each do |file| %>
+                 <%= "#{file[0]}/#{file[1]}" %>
+               <% end %>
+               <% end %>
+             </a>
+
+           <% end %>
+           </small>
+         </td>
+
+         <td>
+           <small>
+           <% if j.success %>
+             <a href="<%= collection_path(j.log) %>">Log</a>
+           <% end %>
+           </small>
+         </td>
+
           <td>
             <small>
-              <%= j.script_version[0..7] %>
-            </small>
-          </td>
-          <td>
-            <small>
-              <%= j.script_parameters.andand[:input].andand.to_s.andand[0..7] %>
+<%= raw(distance_of_time_in_words(j[:created_at], Time.now).sub('about
+','~').sub(' ','&nbsp;')) if j[:created_at] %> ago
             </small>
           </td>
+
           <td>
             <% if j.success %>
             <span class="label label-success">finished</span>
             <span class="label">queued</span>
             <% end %>
           </td>
+
+        </tr>
+        <% end %>
+      </table>
+      <% end %>
+    </div>
+
+    <div>
+      <strong>Recent pipeline instances</strong>
+      <%= link_to raw("Show all pipeline instances &rarr;"), jobs_path, class: 'pull-right' %>
+      <% 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="73%" />
+          <col width="15%" />
+          <col width="12%" />
+       </colgroup>
+
+        <tr>
+         <th>Pipeline template</th>
+         <th>Age</th>
+         <th>Status</th>
+       </tr>
+
+        <% @my_pipelines[0..6].each do |p| %>
+        <tr>
+          <td>
+            <small>
+             <% PipelineTemplate.limit(1).where(uuid: p.pipeline_template_uuid).each do |i| %>
+               <%= link_to i.name, pipeline_instance_path(p.uuid) %>
+             <% end %>
+            </small>
+          </td>
+
+          <td>
+            <small>
+<%= raw(distance_of_time_in_words(p[:created_at], Time.now).sub('about
+','~').sub(' ','&nbsp;')) if p[:created_at] %> ago
+            </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>
+      <% end %>
+    </div>
+
+    <div>
+      <strong>Recent collections</strong>
+      <%= link_to raw("Show all collections &rarr;"), collections_path, class: 'pull-right' %>
+      <% if not current_user.andand.is_active or @my_collections.empty? %>
+      (None)
+      <% else %>
+      <table class="table table-bordered table-condensed job-table">
+       <colgroup>
+          <col width="73%" />
+          <col width="27%" />
+       </colgroup>
+
+       <tr>
+         <th>Contents</th>
+         <th>Age</th>
+       </tr>
+
+        <% @my_collections[0..6].each do |c| %>
+        <tr>
+          <td>
+            <small>
+             <a href="<%= collection_path(c.uuid) %>">
+              <% c.files.each do |file| %>
+              <%= "#{file[0]}/#{file[1]}" %>
+             <% end %>
+             </a>
+            </small>
+          </td>
+          <td>
+            <small>
+<%= 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 more jobs / details &rarr;"), jobs_path, class: 'pull-right' %>
       <% end %>
     </div>
   </div>
+
+<div class="span4">
+<% if @my_ssh_keys.count == 0%>
+  <div class="alert alert-info daxalert">
+    <button type="button" class="close" data-dismiss="alert">&times;</button>
+    <%= image_tag "dax.png", class: "dax" %>
+    <div>
+      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",
+         target: "_blank" %>
+      When you have an SSH key you would like to use, paste the SSH public key
+      in the text box.
+    </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: 100%" %>
+       <%= f.submit :Save, value: raw("&check;"), class: "btn btn-primary pull-right" %>
+      <% end %>
+  </div>
+<% end %>
+
+<% if @my_collections.count == 0 %>
+<div class="alert alert-info daxalert">
+  <button type="button" class="close" data-dismiss="alert">&times;</button>
+  <%= 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", target: "_blank" %>
+  </p>
+</div>
+
+<% end %>
+
+<% if @my_jobs.count == 0 %>
+<div class="alert alert-info daxalert">
+  <button type="button" class="close" data-dismiss="alert">&times;</button>  
+  <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",
+       target: "_blank" %>
+  </p>
+</div>
+<% end %>
+
+<% if @my_pipelines.count == 0 %>
+<div class="alert alert-info daxalert">
+  <button type="button" class="close" data-dismiss="alert">&times;</button>
+  <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",
+       target: "_blank" %>
+  </p>
+</div>
+<% end %>
+
+<div class="well">
+  <p><strong>Useful links</strong></p>
+  <p><ul>
+      <li><%= link_to "Arvados project page", "http://arvados.org", target: "_blank" %></li>
+      <li><%= link_to "Tutorials and user guide",
+      "http://doc.arvados.org/user/", target: "_blank" %></li>
+    </ul>
+  </p>
+</div>
+
+</div>
 </div>
 
 <% elsif current_user %>