<% if current_user.andand.is_active %>
<div>
<strong>Recent jobs</strong>
- <%= link_to '(refresh)', request.fullpath, class: 'refresh', remote: true, method: 'get' %>
+ <%= link_to '(refresh)', {format: :js}, {class: 'refresh', remote: true} %>
<%= link_to raw("Show all jobs →"), jobs_path, class: 'pull-right' %>
<% if not current_user.andand.is_active or @my_jobs.empty? %>
<p>(None)</p>
</colgroup>
<tr>
- <th>Script</th>
- <th>Output</th>
- <th>Log</th>
- <th>Age</th>
- <th>Status</th>
- <th>Progress</th>
- </tr>
+ <th>Script</th>
+ <th>Output</th>
+ <th>Log</th>
+ <th>Created at</th>
+ <th>Status</th>
+ </tr>
+
+ <%# Preload collections, logs, and pipeline instance objects %>
+ <%
+ collection_uuids = []
+ log_uuids = []
+ @my_jobs[0..6].each do |j|
+ collection_uuids << j.output
+ log_uuids << j.log
+ end
+
+ @my_collections[0..6].each do |c|
+ collection_uuids << c.uuid
+ end
+
+ preload_collections_for_objects collection_uuids
+ preload_log_collections_for_objects log_uuids
+
+ pi_uuids = []
+ @my_pipelines[0..6].each do |p|
+ pi_uuids << p.uuid
+ end
+ resource_class = resource_class_for_uuid(pi_uuids.first, friendly_name: true)
+ preload_objects_for_dataclass resource_class, pi_uuids
+ %>
<% @my_jobs[0..6].each do |j| %>
- <tr>
+ <tr data-object-uuid="<%= j.uuid %>">
<td>
<small>
- <%= link_to((j.script.andand[0..31] || j.uuid), job_path(j.uuid)) %>
+ <%= link_to((j.script.andand[0..31] || j.uuid), job_path(j.uuid)) %>
</small>
</td>
- <td>
- <small>
- <% if j.success and j.output %>
-
- <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] : "#{file[0]}/#{file[1]}" %>
- <% end %>
- <% end %>
- </a>
-
- <% end %>
- </small>
-</td>
+ <td>
+ <small>
+ <% if j.state == "Complete" and j.output %>
+ <a href="<%= collection_path(j.output) %>">
+ <% collections = collections_for_object(j.output) %>
+ <% if collections && !collections.empty? %>
+ <% c = collections.first %>
+ <% c.files.each do |file| %>
+ <%= file[0] == '.' ? file[1] : "#{file[0]}/#{file[1]}" %>
+ <% end %>
+ <% end %>
+ </a>
+ <% end %>
+ </small>
+ </td>
<td>
<small>
<% if j.log %>
- <% fixup = /([a-f0-9]{32}\+\d+)(\+?.*)/.match(j.log)%>
- <% Collection.limit(1).where(uuid: fixup[1]).each do |c| %>
+ <% log_collections = log_collections_for_object(j.log) %>
+ <% if log_collections && !log_collections.empty? %>
+ <% c = log_collections.first %>
<% c.files.each do |file| %>
<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 %>
+ <% elsif j.respond_to? :log_buffer and j.log_buffer.is_a? String %>
<% buf = j.log_buffer.strip.split("\n").last %>
<span title="<%= buf %>"><%= buf %></span>
<% end %>
<td>
<small>
- <%= raw(distance_of_time_in_words(j.created_at, Time.now).sub('about
-','~').sub(' ',' ')) if j.created_at %>
+ <%= j.created_at.to_s if j.created_at %>
</small>
</td>
-<td>
- <%= render partial: 'job_status_label', locals: {:j => j} %>
-</td>
<td>
<div class="inline-progress-container">
<%= render partial: 'job_progress', locals: {:j => j} %>
<div>
<strong>Recent pipeline instances</strong>
- <%= link_to '(refresh)', request.fullpath, class: 'refresh', remote: true, method: 'get' %>
+ <%= link_to '(refresh)', {format: :js}, {class: 'refresh', remote: true} %>
<%= link_to raw("Show all pipeline instances →"), pipeline_instances_path, class: 'pull-right' %>
<% if not current_user.andand.is_active or @my_pipelines.empty? %>
<p>(None)</p>
</colgroup>
<tr>
- <th>Instance</th>
- <th>Template</th>
- <th>Age</th>
- <th>Status</th>
- <th>Progress</th>
+ <th>Instance</th>
+ <th>Template</th>
+ <th>Created at</th>
+ <th>Status</th>
+ <th>Progress</th>
</tr>
<% @my_pipelines[0..6].each do |p| %>
- <tr>
+ <tr data-object-uuid="<%= p.uuid %>">
<td>
<small>
- <%= link_to_if_arvados_object p.uuid, friendly_name: true %>
+ <%= 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 %>
+ <%= link_to_if_arvados_object p.pipeline_template_uuid, friendly_name: true %>
</small>
</td>
<td>
<small>
- <%= raw(distance_of_time_in_words(p.created_at, Time.now).sub('about
-','~').sub(' ',' ')) if p.created_at %>
+ <%= (p.created_at.to_s) if p.created_at %>
</small>
</td>
<div>
<strong>Recent collections</strong>
- <%= link_to '(refresh)', request.fullpath, class: 'refresh', remote: true, method: 'get' %>
+ <%= link_to '(refresh)', {format: :js}, {class: 'refresh', remote: true} %>
<%= link_to raw("Show all collections →"), collections_path, class: 'pull-right' %>
<div class="pull-right" style="padding-right: 1em; width: 30%;">
<%= form_tag collections_path,
<table class="table table-bordered table-condensed table-fixedlayout">
<colgroup>
<col width="46%" />
- <col width="27%" />
- <col width="27%" />
+ <col width="32%" />
+ <col width="10%" />
+ <col width="12%" />
</colgroup>
<tr>
- <th>Contents</th>
- <th>Tags</th>
- <th>Age</th>
+ <th>Contents</th>
+ <th>Tags</th>
+ <th>Age</th>
+ <th>Storage</th>
</tr>
<% @my_collections[0..6].each do |c| %>
- <tr>
+ <tr data-object-uuid="<%= c.uuid %>">
<td>
<small>
- <a href="<%= collection_path(c.uuid) %>">
- <% c.files.each do |file| %>
- <%= file[0] == '.' ? file[1] : "#{file[0]}/#{file[1]}" %>
- <% end %>
- </a>
+ <a href="<%= collection_path(c.uuid) %>">
+ <% c.files.each do |file| %>
+ <%= file[0] == '.' ? file[1] : "#{file[0]}/#{file[1]}" %>
+ <% end %>
+ </a>
</small>
</td>
<td>
</td>
<td>
<small>
- <%= raw(distance_of_time_in_words(c.created_at, Time.now).sub('about
-','~').sub(' ',' ')) if c.created_at %>
+ <%= c.created_at.to_s if c.created_at %>
</small>
</td>
+ <td>
+ <%= render partial: 'collections/toggle_persist', locals: { uuid: c.uuid, current_state: @persist_state[c.uuid] } %>
+ </td>
</tr>
<% end %>
</table>
<div class="col-sm-8">
<h2>Welcome to Arvados, <%= current_user.first_name %>!</h2>
<div class="well">
- <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 style="padding-bottom: 1em">
- <%= link_to raw('Contact us ✉'),
- Rails.configuration.activation_contact_link, class: "pull-right btn btn-primary" %></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 style="padding-bottom: 1em">
+ <%= link_to raw('Contact us ✉'),
+ Rails.configuration.activation_contact_link, class: "pull-right btn btn-primary" %></p>
</div>
</div>
</div>