closes #6640
[arvados.git] / apps / workbench / app / views / projects / _show_dashboard.html.erb
1   <div class="row">
2     <div class="col-md-6">
3       <div class="panel panel-default" style="min-height: 10.5em">
4         <div class="panel-heading"><span class="panel-title">Active pipelines</span>
5           <% if current_user.andand.is_active %>
6           <span class="pull-right">
7           <%= link_to(
8           choose_pipeline_templates_path(
9             title: 'Choose a pipeline to run:',
10             action_name: 'Next: choose inputs <i class="fa fa-fw fa-arrow-circle-right"></i>',
11             action_href: pipeline_instances_path,
12             action_method: 'post',
13             action_data: {'selection_param' => 'pipeline_instance[pipeline_template_uuid]', 'pipeline_instance[owner_uuid]' => current_user.uuid, 'success' => 'redirect-to-created-object'}.to_json),
14           { class: "btn btn-primary btn-xs", remote: true }) do %>
15             <i class="fa fa-fw fa-gear"></i> Run a pipeline...
16           <% end %>
17           </span>
18           <% end %>
19         </div>
20
21         <% _running_pipelines = running_pipelines %>
22         <% _finished_pipelines = finished_pipelines(8) %>
23         <% lookup = preload_objects_for_dataclass PipelineTemplate, (_running_pipelines.map(&:pipeline_template_uuid) + _finished_pipelines.map(&:pipeline_template_uuid)) %>
24
25         <div class="panel-body">
26           <% if _running_pipelines.empty? %>
27             No pipelines are currently running.
28           <% else %>
29           <% _running_pipelines.each do |p| %>
30             <div class="dashboard-panel-info-row">
31               <div class="clearfix">
32                 <%= link_to_if_arvados_object p, {friendly_name: true, lookup: lookup} %>
33
34                 <div class="pull-right" style="width: 40%">
35                   <div class="progress" style="margin-bottom: 0px">
36                     <% p.components.each do |k, v| %>
37                       <% if v.is_a? Hash and v[:job] %>
38                         <%= render partial: 'job_progress', locals: {:j => v[:job], :scaleby => (1.0/p.components.size)} %>
39                       <% end %>
40                     <% end %>
41                   </div>
42                 </div>
43               </div>
44
45               <%
46                 running = p.components.select { |k, c| c.is_a? Hash and c[:job].andand[:state] == "Running" }
47                 queued = p.components.select { |k, c| c.is_a? Hash and c[:job].andand[:state] == "Queued" }
48                 %>
49
50               <div class="clearfix">
51                 Started at <%= render_localized_date(p[:started_at] || p[:created_at], "noseconds") %>.
52                 <% pipeline_time = Time.now - (p[:started_at] || p[:created_at]) %>
53                 Active for <%= render_runtime(pipeline_time, false) %>.
54
55                 <div class="pull-right">
56                   <% running.each do |k,v| %>
57                     <%= render partial: 'job_progress', locals: {:j => v[:job], :show_progress_bar => false, :title => k} %>
58                   <% end %>
59                   <% queued.each do |k,v| %>
60                     <%= render partial: 'job_progress', locals: {:j => v[:job], :show_progress_bar => false, :title => k} %>
61                   <% end %>
62                 </div>
63               </div>
64             </div>
65           <% end %>
66           <% end %>
67         </div>
68       </div>
69
70       <div class="panel panel-default">
71         <div class="panel-heading"><span class="panel-title">Recently finished pipelines</span>
72           <span class="pull-right">
73             <%= link_to pipeline_instances_path, class: 'btn btn-default btn-xs' do %>
74               All pipelines <i class="fa fa-fw fa-arrow-circle-right"></i>
75             <% end %>
76           </span>
77         </div>
78         <div class="panel-body">
79           <% _finished_pipelines.each do |p| %>
80             <div class="dashboard-panel-info-row">
81               <div class="row">
82                 <div class="col-md-6 text-overflow-ellipsis">
83                   <%= link_to_if_arvados_object p, {friendly_name: true, lookup: lookup} %>
84                 </div>
85                 <div class="col-md-2">
86                   <%= render partial: "pipeline_status_label", locals: {p: p}%>
87                 </div>
88                 <div class="col-md-4">
89                   <%= render_localized_date(p[:finished_at] || p[:modified_at], "noseconds") %>
90                 </div>
91               </div>
92               <div class="row">
93                 <div class="col-md-12">
94                   <% if p[:started_at] and p[:finished_at] %>
95                     <% pipeline_time = p[:finished_at] - p[:started_at] %>
96                     Active for <%= render_runtime(pipeline_time, false) %>
97                   <% end %>
98
99                   <span class="pull-right text-overflow-ellipsis" style="max-width: 100%">
100                     <% outputs = [] %>
101                     <% p.components.each do |k, c| %>
102                       <% outputs << c[:output_uuid] if c[:output_uuid] %>
103                     <% end %>
104                     <% if outputs.size == 0 %>
105                       No output.
106                     <% elsif outputs.size == 1 %>
107                       <i class="fa fa-fw fa-archive"></i> <%= link_to_if_arvados_object outputs[0], friendly_name: true %>
108                     <% else %>
109                       <a href="#<%= p[:uuid] %>-outputs" data-toggle="collapse">Outputs <span class="caret"></span></a>
110                     <% end %>
111                   </span>
112                 </div>
113               </div>
114
115               <div class="row collapse" id="<%= p[:uuid] %>-outputs" >
116                 <div class="col-md-12">
117                   <div class="pull-right" style="max-width: 100%">
118                     <% outputs.each do |out| %>
119                       <div class="text-overflow-ellipsis">
120                         <i class="fa fa-fw fa-archive"></i> <%= link_to_if_arvados_object out, friendly_name: true %>
121                       </div>
122                     <% end %>
123                   </div>
124                 </div>
125               </div>
126             </div>
127           <% end %>
128         </div>
129       </div>
130     </div>
131
132     <div class="col-md-6">
133       <% nodes = Node.all %>
134       <div class="panel panel-default" style="min-height: 10.5em">
135         <div class="panel-heading"><span class="panel-title">Compute and job status</span>
136           <span class="pull-right">
137             <%= link_to jobs_path, class: 'btn btn-default btn-xs' do %>
138               All jobs <i class="fa fa-fw fa-arrow-circle-right"></i>
139             <% end %>
140           </span>
141         </div>
142         <div class="panel-body">
143           <div>
144             <%= render partial: 'compute_node_summary', locals: {nodes: nodes} %>
145             <div style="text-align: center">
146               <a data-toggle="collapse" href="#compute_node_status">Details <span class="caret"></span></a>
147             </div>
148           </div>
149           <div id="compute_node_status" class="collapse">
150             <%= render partial: 'compute_node_status', locals: {nodes: nodes} %>
151           </div>
152         </div>
153       </div>
154       <div class="panel panel-default">
155         <div class="panel-heading"><span class="panel-title">Recent collections</span>
156           <span class="pull-right">
157             <%= link_to collections_path, class: 'btn btn-default btn-xs' do %>
158               All collections <i class="fa fa-fw fa-arrow-circle-right"></i>
159             <% end %>
160           </span>
161         </div>
162         <div class="panel-body">
163           <% r = recent_collections(8) %>
164           <% r[:collections].each do |p| %>
165             <div class="dashboard-panel-info-row">
166               <div>
167                 <i class="fa fa-fw fa-folder-o"></i><%= link_to_if_arvados_object r[:owners][p[:owner_uuid]], friendly_name: true %>/
168                 <span class="pull-right"><%= render_localized_date(p[:modified_at], "noseconds") %></span>
169               </div>
170               <div class="text-overflow-ellipsis" style="margin-left: 1em; width: 100%"><%= link_to_if_arvados_object p, {friendly_name: true, no_tags: true} %>
171               </div>
172             </div>
173           <% end %>
174         </div>
175       </div>
176     </div>
177   </div>