Fix dashboard auto-refresh, and show last line of log_buffer (if any)
[arvados.git] / apps / workbench / app / views / users / _tables.html.erb
index 3bf5023c4c59669d34a41651c5b3b6508e4184f1..8d5b84f6ebe40f624cd3d0abe12f461172654938 100644 (file)
@@ -1,18 +1,19 @@
 <% if current_user.andand.is_active %>
   <div>
     <strong>Recent jobs</strong>
+    <%= link_to '(refresh)', request.fullpath, class: 'refresh', remote: true, method: 'get' %>
     <%= link_to raw("Show all jobs &rarr;"), jobs_path, class: 'pull-right' %>
     <% if not current_user.andand.is_active or @my_jobs.empty? %>
       <p>(None)</p>
     <% else %>
       <table class="table table-bordered table-condensed table-fixedlayout">
-       <colgroup>
-          <col width="28%" />
-          <col width="38%" />
-          <col width="7%" />
-          <col width="15%" />
-          <col width="12%" />
-       </colgroup>
+        <colgroup>
+          <col width="20%" />
+          <col width="20%" />
+          <col width="20%" />
+          <col width="13%" />
+          <col width="27%" />
+        </colgroup>
 
         <tr>
          <th>Script</th>
@@ -54,6 +55,9 @@
           <a href="<%= collection_path(j.log) %>/<%= file[1] %>?disposition=inline&size=<%= file[2] %>">Log</a>
         <% end %>
       <% end %>
+    <% elsif j.respond_to? :log_buffer and j.log_buffer %>
+      <% buf = j.log_buffer.strip.split("\n").last %>
+      <span title="<%= buf %>"><%= buf %></span>
     <% end %>
   </small>
 </td>
     <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>
+  <% elsif j.finished_at %>
+    <span class="label">finished?</span>
+  <% elsif j.started_at %>
+    <span class="label label-success">running</span>
   <% else %>
     <span class="label">queued</span>
   <% end %>
+  <% percent_total_tasks = 100 / (j.tasks_summary[:running] + j.tasks_summary[:done] + j.tasks_summary[:todo]) rescue 0 %>
+  <div class="inline-progress-container pull-right">
+    <div class="progress">
+      <span class="progress-bar progress-bar-success" style="width: <%= j.tasks_summary[:done] * percent_total_tasks rescue 0 %>%;">
+      </span>
+      <span class="progress-bar" style="width: <%= j.tasks_summary[:running] * percent_total_tasks rescue 0 %>%;">
+      </span>
+      <% if j.success == false %>
+      <span class="progress-bar progress-bar-danger" style="width: <%= tasks_summary[:failed] * percent_total_tasks rescue 0 %>%;">
+      </span>
+      <% end %>
+    </div>
+  </div>
 </td>
 
 </tr>
 
 <div>
   <strong>Recent pipeline instances</strong>
+  <%= link_to '(refresh)', request.fullpath, class: 'refresh', remote: true, method: 'get' %>
   <%= link_to raw("Show all pipeline instances &rarr;"), pipeline_instances_path, class: 'pull-right' %>
   <% if not current_user.andand.is_active or @my_pipelines.empty? %>
     <p>(None)</p>
   <% else %>
     <table class="table table-bordered table-condensed table-fixedlayout">
       <colgroup>
-        <col width="73%" />
-        <col width="15%" />
-        <col width="12%" />
+        <col width="30%" />
+        <col width="30%" />
+        <col width="13%" />
+        <col width="27%" />
       </colgroup>
 
       <tr>
-       <th>Pipeline template</th>
+       <th>Instance</th>
+       <th>Template</th>
        <th>Age</th>
        <th>Status</th>
       </tr>
         <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 %>
+             <%= link_to_if_arvados_object p.uuid, friendly_name: true %>
+            </small>
+          </td>
+
+          <td>
+            <small>
+             <%= link_to_if_arvados_object p.pipeline_template_uuid, friendly_name: true %>
             </small>
           </td>
 
               <span class="label label-success">finished</span>
             <% elsif p.success == false %>
               <span class="label label-danger">failed</span>
+            <% elsif p.active and p.modified_at < 30.minutes.ago %>
+              <span class="label label-info">stopped</span>
             <% elsif p.active %>
               <span class="label label-info">running</span>
             <% else %>
               <span class="label">queued</span>
             <% end %>
+
+            <% summary = pipeline_summary p %>
+            <div class="inline-progress-container pull-right">
+              <div class="progress">
+                <span class="progress-bar progress-bar-success" style="width: <%= summary[:percent_done] %>%;">
+                </span>
+                <% if p.success == false %>
+                <span class="progress-bar progress-bar-danger" style="width: <%= 100.0 - summary[:percent_done] %>%;">
+                </span>
+                <% else %>
+                <span class="progress-bar" style="width: <%= summary[:percent_running] %>%;">
+                </span>
+                <span class="progress-bar progress-bar-info" style="width: <%= summary[:percent_queued] %>%;">
+                </span>
+                <span class="progress-bar progress-bar-danger" style="width: <%= summary[:percent_failed] %>%;">
+                </span>
+                <% end %>
+              </div>
+            </div>
           </td>
 
         </tr>
 
 <div>
   <strong>Recent collections</strong>
+  <%= link_to '(refresh)', request.fullpath, class: 'refresh', remote: true, method: 'get' %>
   <%= link_to raw("Show all collections &rarr;"), collections_path, class: 'pull-right' %>
-  <div class="pull-right" style="padding-right: 1em">
+  <div class="pull-right" style="padding-right: 1em; width: 30%;">
     <%= form_tag collections_path,
           method: 'get',
           class: 'form-search small-form-margin' do %>
-    <div class="input-append">
-      <%= text_field_tag :search, params[:search], class: 'search-query search-mini' %>
-      <%= submit_tag "Search", name: nil, class: 'btn btn-mini btn-info' %>
+    <div class="input-group input-group-sm">
+      <%= text_field_tag :search, params[:search], class: 'form-control', placeholder: 'Search' %>
+      <span class="input-group-btn">
+        <%= button_tag(class: 'btn btn-info') do %>
+        <span class="glyphicon glyphicon-search"></span>
+        <% end %>
+      </span>
     </div>  
     <% end %>
   </div>
 <% else %>
   <%= image_tag "dax.png", style: "max-width=40%" %>
 <% end %>
+
+<% content_for :js do %>
+setInterval(function(){$('a.refresh:eq(0)').click()}, 60000);
+<% end %>