New two-column dashboard layout suggested by Adam
[arvados.git] / apps / workbench / app / views / users / home.html.erb
index 28e6a5bcc271cb801a95225b43c0baec9df57231..bf14fdd854d72bed8ee9b748d5e07aaa5c5994f9 100644 (file)
-<% if @tutorial_links.any? %>
-<% content_for :tutorials do %>
-<h4>Tutorials</h4>
-<% @tutorial_links.each do |tut| %>
-<div class="well clearfix">
-  <div>
-    <strong><%= tut.properties[:page_title] %></strong>
-    <% if @tutorial_complete[tut.properties[:page_title]] %>
-    <span class="badge badge-success pull-right">&#x2714;</span>
-    <% else %>
-    <span class="badge pull-right">&#x270d;</span>
-    <% end %>
-  </div>
-  <%= render_content_from_database tut.properties[:page_subtitle] %>
-  <br />
-  <%= link_to raw('Tutorial: ' + tut.properties[:page_title] + ' &#x279c;'), link_path(tut.uuid), class: "pull-right btn btn-primary" %>
-</div>
-<% end %>
-<% end %>
+<% content_for :head do %>
+    <style>
+      .dash-list {
+        padding: 9px 0;
+      }
+      .dash-list>ul>li>a>span {
+      min-width: 1.5em;
+      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;
+      margin-right: auto;
+      text-align: center;
+      }
+      .bigfatnumber {
+      font-size: 4em;
+      font-weight: bold;
+      }
+      .dax {
+      max-width: 10%;
+      margin-right: 1em;
+      float: left
+      }
+      .daxalert {
+      overflow: hidden;
+      }
+    </style>
 <% end %>
 
-<% content_for :references do %>
-<h4>References</h4>
-<div class="well clearfix">
-  <div>
-    <strong>API Reference</strong>
-  </div>
-  API calls for running jobs, building pipelines, and developing apps.
-  <br />
-  <%= link_to raw('API Reference &#x279c;'), 'http://doc.arvados.org/api/', class: "pull-right btn" %>
-</div>
-<div class="well clearfix">
-  <div>
-    <strong>User Guide</strong>
+<% if current_user.andand.is_active %>
+
+<div class="container-fluid">
+  
+  <div class="span7">
+
+    <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">
+       <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>
+<%= 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>
+            <% elsif j.success == false %>
+            <span class="label label-danger">failed</span>
+            <% elsif j.running and j.started_at and not j.finished_at %>
+            <% percent_total_tasks = 100 / (j.tasks_summary[:running] + j.tasks_summary[:done] + j.tasks_summary[:todo]) rescue 0 %>
+            <div class="progress" style="margin-bottom: 0">
+              <div class="bar bar-success" style="width: <%= j.tasks_summary[:done] * percent_total_tasks rescue 0 %>%;"></div>
+              <div class="bar" style="width: <%= j.tasks_summary[:running] * percent_total_tasks rescue 0 %>%; opacity: 0.3"></div>
+            </div>
+            <% else %>
+            <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>
+      <% end %>
+    </div>
   </div>
-  Getting acquainted with the Arvados platform.
-  <br />
-  <%= link_to raw('User Guide &#x279c;'), 'http://doc.arvados.org/user/', class: "pull-right btn" %>
-</div>
-<div class="well clearfix">
-  <div>
-    <strong>arvados.org</strong>
+
+<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>
-  Project home page: developer docs, source code, background.
-  <br />
-  <%= link_to raw('arvados.org &#x279c;'), 'https://arvados.org/', class: "pull-right btn" %>
-</div>
 <% end %>
 
-<% if current_user.andand.is_active %>
-<% content_for :manage_access do %>
-<h4>Setup</h4>
-<div class="well clearfix">
-  <div>
-    <strong>SSH keys</strong>
-    <span class="badge <%= 'badge-success' if @my_ssh_keys.any? %> pull-right"><%= @my_ssh_keys.count %></span>
-  </div>
-  You&rsquo;ll use public key authentication when logging in to a
-  VM or use a hosted git repository.
-  <br />
-  <%= link_to raw('Add/edit keys &#x279c;'), authorized_keys_path, class: "pull-right btn #{'btn-primary' if @my_ssh_keys.empty?}" %>
-</div>
-<div class="well clearfix">
-  <div>
-    <strong>Virtual machines</strong>
-    <span class="badge <%= 'badge-success' if @my_vm_perms.any? %> pull-right"><%= @my_vm_perms.collect(&:head_uuid).uniq.count %></span>
-  </div>
-  Arvados includes virtual machines with SDKs installed and ready to use.
-  <br />
-  <% if @my_vm_perms.any? %>
-  <%= link_to raw('Show VMs &#x279c;'), virtual_machines_path, class: "pull-right btn" %>
-  <% elsif @my_ssh_keys.any? %>
-  <%= link_to raw('Request a VM &#x279c;'), virtual_machines_path, class: "pull-right btn btn-primary" %>
-  <% else %>
-  <%= link_to raw('Request a VM &#x279c;'), virtual_machines_path, { :class => "pull-right btn disabled", :"data-toggle" => "tooltip", :"data-placement" => "bottom", :title => "Add an SSH public key first!" } %>
-  <% 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>
-<div class="well clearfix">
-  <div>
-    <strong>Git repositories</strong>
-    <span class="badge <%= 'badge-success' if @my_repo_perms.any? %> pull-right"><%= @my_repo_perms.collect(&:head_uuid).uniq.count %></span>
-  </div>
-  In order to run jobs using your own code, you need to push your code to a git repository. We provide hosted git repositories to make this easy.
-  <br />
-  <% if @my_repo_perms.any? %>
-  <%= link_to raw('Show repositories &#x279c;'), repositories_path, class: "pull-right btn" %>
-  <% elsif @my_ssh_keys.any? %>
-  <%= link_to raw('Request a repository &#x279c;'), repositories_path, class: "pull-right btn btn-primary" %>
-  <% else %>
-  <%= link_to raw('Request a repository &#x279c;'), repositories_path, { :class => "pull-right btn disabled", :"data-toggle" => "tooltip", :"data-placement" => "bottom", :title => "Add an SSH public key first!" } %>
-  <% end %>
+
+<% 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="row-fluid">
-  <div class="col span4">
-    <% if content_for? :manage_access %>
-    <%= yield :manage_access %>
-    <% else %>
-    <%= render partial: 'request_activation' %>
-    <% end %>
-  </div>
+<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>
 
-  <% if content_for? :tutorials %>
-  <div class="col span4">
-    <%= yield :tutorials %>
-  </div>
-  <% end %>
+</div>
+</div>
 
-  <div class="col span4">
-    <%= yield :references %>
+<% elsif current_user %>
+  <%= image_tag "dax.png", style: "float: left; max-width: 25%; margin-right: 2em" %>
+  <h1>Welcome to Arvados, <%= current_user.first_name %>!</h1>
+  <div class="row-fluid">
+    <div class="col span8">
+      <h4>Your account status</h4>
+      <div class="well clearfix">
+       <p><strong>New / inactive</strong></p>
+       <p>
+         Your account must be activated by an Arvados administrator.  If this
+         is your first time accessing Arvados and would like to request
+         access, or you believe you are seeing the page in error, please 
+         <%= link_to "contact us", Rails.configuration.activation_contact_link %>.  
+         You should receive an email at the address you used to log in when
+         your account is activated.  In the mean time, you can 
+         <%= link_to "learn more about Arvados", "https://arvados.org/projects/arvados/wiki/Introduction_to_Arvados" %>,
+         and <%= link_to "read the Arvados user guide", "http://doc.arvados.org/user" %>.
+       </p>
+       <p>
+         <%= link_to raw('Contact us &#x2709;'),
+             Rails.configuration.activation_contact_link, class: "pull-right btn btn-primary" %></p>
+      </div>
+    </div>
   </div>
-</div>
+<% end %>