summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/templates/builddashboard.html
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/toastergui/templates/builddashboard.html')
-rw-r--r--bitbake/lib/toaster/toastergui/templates/builddashboard.html198
1 files changed, 198 insertions, 0 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/builddashboard.html b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
new file mode 100644
index 0000000000..fa4b194eb9
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
@@ -0,0 +1,198 @@
1{% extends "basebuildpage.html" %}
2{% load humanize %}
3{% load projecttags %}
4
5{% block parentbreadcrumb %}
6{{build.get_sorted_target_list.0.target}} {%if build.target_set.all.count > 1%}(+ {{build.target_set.all.count|add:"-1"}}){%endif%} {{build.machine}} ({{build.completed_on|date:"d/m/y H:i"}})
7{% endblock %}
8
9{% block buildinfomain %}
10<!-- page title -->
11<div class="row-fluid span10">
12 <div class="page-header">
13 <h1>{{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}}</h1>
14 </div>
15</div>
16
17<!-- build result bar -->
18<div class="row-fluid span10 pull-right">
19 <div class="alert {%if build.outcome == build.SUCCEEDED%}alert-success{%elif build.outcome == build.FAILED%}alert-error{%else%}alert-info{%endif%}">
20 <div class="row-fluid lead">
21 <span class="pull-left"><strong>
22 {%if build.outcome == build.SUCCEEDED%}Completed{%elif build.outcome == build.FAILED%}Failed{%else%}{%endif%}
23 </strong> on
24 {{build.completed_on|date:"d/m/y H:i"}}
25</span>
26{% if build.warnings_no or build.errors_no %}
27&nbsp;with
28{% endif %}
29{%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
30{% if build.errors_no %}
31 <span > <i class="icon-minus-sign red"></i><strong><a href="#errors" class="error show-errors"> {{build.errors_no}} error{{build.errors_no|pluralize}}</a></strong></span>
32{% endif %}
33{% if build.warnings_no %}
34{% if build.errors_no %}
35 and
36{% endif %}
37 <span > <i class="icon-warning-sign yellow"></i><strong><a href="#warnings" class="warning show-warnings"> {{build.warnings_no}} warning{{build.warnings_no|pluralize}}</a></strong></span>
38{% endif %}
39 <span class="pull-right">Build time: <a href="{% url 'buildtime' build.pk %}">{{ build.timespent|sectohms }}</a></span>
40{%endif%}
41 </div>
42 </div>
43</div>
44
45{% if build.errors_no %}
46<div class="accordion span10 pull-right" id="errors">
47 <div class="accordion-group">
48 <div class="accordion-heading">
49 <a class="accordion-toggle error toggle-errors">
50 <h2 id="error-toggle">
51 <i class="icon-minus-sign"></i>
52 {{build.errors_no}} error{{build.errors_no|pluralize}}
53 </h2>
54 </a>
55 </div>
56 <div class="accordion-body collapse in" id="collapse-errors">
57 <div class="accordion-inner">
58 <div class="span10">
59 {% for error in logmessages %}{% if error.level == 2 %}
60 <div class="alert alert-error">
61 <pre>{{error.message}}</pre>
62 </div>
63 {% endif %}{% endfor %}
64 </div>
65 </div>
66 </div>
67 </div>
68</div>
69{% endif %}
70
71{%if build.outcome == build.SUCCEEDED%}
72<!-- built images -->
73<div class="row-fluid span10 pull-right">
74 {% if hasImages %}
75 <h2>Images</h2>
76 {% for target in targets %}
77 {% if target.target.is_image %}
78 <div class="well dashboard-section">
79 <h3><a href="{% url 'target' build.pk target.target.pk %}">{{target.target}}</a>
80 </h3>
81 <dl class="dl-horizontal">
82 <dt>Packages included</dt>
83 <dd><a href="{% url 'target' build.pk target.target.pk %}">{{target.npkg}}</a></dd>
84 <dt>Total package size</dt>
85 <dd>{{target.pkgsz|filtered_filesizeformat}}</dd>
86 <dt>
87 <i class="icon-question-sign get-help" title="The location in disk of the license manifest, a document listing all packages installed in your image and their licenses"></i>
88 <a href="{% url 'target' build.pk target.target.pk %}">License manifest</a>
89 </dt>
90 <dd><code>{{target.target.license_manifest_path}}</code></dd>
91 <dt>
92 <i class="icon-question-sign get-help" title="Image files are stored in <code>/build/tmp/deploy/images/</code>"></i>
93 Image files
94 </dt>
95 <dd>
96 <ul>
97 {% for i in target.imageFiles %}
98 <li>{{i.path}}
99 ({{i.size|filtered_filesizeformat}})</li>
100 {% endfor %}
101 </ul>
102 </dd>
103 </dl>
104 </div>
105 {% endif %}
106 {% endfor %}
107 {% endif %}
108</div>
109
110{%else%}
111<!-- error dump -->
112{%endif%}
113
114<!-- build summary -->
115<div class="row-fluid span10 pull-right">
116<h2>Build summary</h2>
117 <div class="well span4 dashboard-section" style="margin-left:0px;">
118 <h4><a href="{%url 'configuration' build.pk%}">Configuration</a></h4>
119 <dl>
120 <dt>Machine</dt><dd>{{build.machine}}</dd>
121 <dt>Distro</dt><dd>{{build.distro}}</dd>
122 <dt>Layers</dt>{% for i in build.layer_version_build.all|dictsort:"layer.name" %}<dd>{{i.layer.name}}</dd>{%endfor%}
123 </dl>
124 </div>
125 <div class="well span4 dashboard-section">
126 <h4><a href="{%url 'tasks' build.pk%}">Tasks</a></h4>
127 <dl>
128 <dt>Total number of tasks</dt><dd><a href="{% url 'tasks' build.pk %}">{{build.task_build.all.count}}</a></dd>
129 <dt>
130 Tasks executed
131 <i class="icon-question-sign get-help" title="'Executed' tasks are those that need to be run in order to generate the task output"></i>
132 </dt>
133 <dd><a href="{% url 'tasks' build.pk %}?filter=task_executed%3A1&amp;count=25&amp;search=&amp;page=1&amp;orderby=order%3A%2B">{% query build.task_build task_executed=1 order__gt=0 as exectask%}{{exectask.count}}</a></dd>
134 <dt>
135 Tasks not executed
136 <i class="icon-question-sign get-help" title="'Not executed' tasks don't need to run because their outcome is provided by another task"></i>
137 </dt>
138 <dd><a href="{% url 'tasks' build.pk %}?filter=task_executed%3A0&amp;count=25&amp;search=&amp;page=1&amp;orderby=order%3A%2B">{% query build.task_build task_executed=0 order__gt=0 as noexectask%}{{noexectask.count}}</a></dd>
139 <dt>
140 Reuse
141 <i class="icon-question-sign get-help" title="The percentage of 'not executed' tasks over the total number of tasks, which is a measure of the efficiency of your build"></i>
142 </dt>
143 <dd>
144{% query build.task_build order__gt=0 as texec %}
145{% if noexectask.count|multiply:100|divide:texec.count < 0 %}
1460
147{% else %}
148{{noexectask.count|multiply:100|divide:texec.count}}
149{% endif %}
150%
151 </dd>
152 </dl>
153 </div>
154 <div class="well span4 dashboard-section">
155 <h4><a href="{% url 'recipes' build.pk %}">Recipes</a> & <a href="{% url 'packages' build.pk %}">Packages</a></h4>
156 <dl>
157 <dt>Recipes built</dt><dd><a href="{% url 'recipes' build.pk %}">{{recipecount}}</a></dd>
158 <dt>Packages built</dt><dd><a href="{% url 'packages' build.pk %}">{{packagecount}}</a></dd>
159 </dl>
160 </div>
161</div>
162
163{% if build.warnings_no %}
164<div class="accordion span10 pull-right" id="warnings">
165 <div class="accordion-group">
166 <div class="accordion-heading">
167 <a class="accordion-toggle warning toggle-warnings">
168 <h2 id="warning-toggle">
169 <i class="icon-warning-sign"></i>
170 {{build.warnings_no}} warning{{build.warnings_no|pluralize}}
171 </h2>
172 </a>
173 </div>
174 <div class="accordion-body collapse" id="collapse-warnings">
175 <div class="accordion-inner">
176 <div class="span10">
177 {% for warning in logmessages %}{% if warning.level == 1 %}
178 <div class="alert alert-warning">
179 <pre>{{warning.message}}</pre>
180 </div>
181 {% endif %}{% endfor %}
182 </div>
183 </div>
184 </div>
185 </div>
186</div>
187{% endif %}
188
189<script type="text/javascript">
190 $(document).ready(function() {
191 //show warnings section when requested from the previous page
192 if (location.href.search('#warnings') > -1) {
193 $('#collapse-warnings').addClass('in');
194 }
195 });
196</script>
197
198{% endblock %}