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.html131
1 files changed, 61 insertions, 70 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/builddashboard.html b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
index f33757eaca..04a57ef64f 100644
--- a/bitbake/lib/toaster/toastergui/templates/builddashboard.html
+++ b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
@@ -14,57 +14,49 @@
14{% block buildinfomain %} 14{% block buildinfomain %}
15<!-- page title --> 15<!-- page title -->
16<div class="col-md-10"> 16<div class="col-md-10">
17 <div class="page-header"> 17 <div class="page-header build-data">
18 <h1>{{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}}</h1> 18 <h1>{{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}}</h1>
19 </div> 19 </div>
20 20
21<!-- build result bar --> 21<!-- build result bar -->
22 <div class="alert {%if build.outcome == build.SUCCEEDED%}alert-success{%elif build.outcome == build.FAILED%}alert-error{%else%}alert-info{%endif%}"> 22 <div class="alert {%if build.outcome == build.SUCCEEDED%}alert-success{%elif build.outcome == build.FAILED%}alert-danger{%else%}alert-info{%endif%}">
23 <div class="lead"> 23 <span><strong>{%if build.outcome == build.SUCCEEDED%}Completed{%elif build.outcome == build.FAILED%}Failed{%else%}{%endif%}</strong> on {{build.completed_on|date:"d/m/y H:i"}}</span>
24 <span><strong> 24 {% if build.warnings.count or build.errors.count %}
25 {%if build.outcome == build.SUCCEEDED%}Completed{%elif build.outcome == build.FAILED%}Failed{%else%}{%endif%} 25 <span>with</span>
26 </strong> on 26 {% endif %}
27 {{build.completed_on|date:"d/m/y H:i"}} 27 {%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
28</span> 28 {% if build.errors.count %}
29{% if build.warnings.count or build.errors.count %} 29 <a href="#errors" class="alert-link show-errors"> {{build.errors.count}} error{{build.errors.count|pluralize}}</a>
30&nbsp;with 30 {% endif %}
31{% endif %} 31 {% if build.warnings.count %}
32{%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %} 32 {% if build.errors.count %}and{% endif %}
33{% if build.errors.count %} 33 <a href="#warnings" class="show-warnings"> {{build.warnings.count}} warning{{build.warnings.count|pluralize}}</a>
34 <span > <i class="icon-minus-sign red"></i><strong><a href="#errors" class="error show-errors"> {{build.errors.count}} error{{build.errors.count|pluralize}}</a></strong></span> 34 {% endif %}
35{% endif %} 35 {% if build.cooker_log_path %}
36{% if build.warnings.count %} 36 <a class="alert-link pull-right log" href="{% url 'build_artifact' build.id "cookerlog" build.id %}">Download build log</a>
37{% if build.errors.count %} 37 {% endif %}
38 and 38 <span class="pull-right">
39{% endif %} 39 Build time:
40 <span > <i class="icon-warning-sign yellow"></i><strong><a href="#warnings" class="warning show-warnings"> {{build.warnings.count}} warning{{build.warnings.count|pluralize}}</a></strong></span> 40 <a class="alert-link" href="{% url 'buildtime' build.pk %}">{{ build.timespent_seconds|sectohms }}</a>
41{% endif %} 41 </span>
42 <span class="pull-right">Build time: <a href="{% url 'buildtime' build.pk %}">{{ build.timespent_seconds|sectohms }}</a> 42 {%endif%}
43 {% if build.cooker_log_path %} 43</div>
44 <a class="btn {%if build.outcome == build.SUCCEEDED%}btn-success{%else%}btn-danger{%endif%} pull-right log" href="{% url 'build_artifact' build.id "cookerlog" build.id %}">Download build log</a>
45 {% endif %}
46 </span>
47
48{%endif%}
49 </div>
50 </div>
51 44
52{% if build.errors.count %} 45{% if build.errors.count %}
53<div class="panel-group" id="errors"> 46 <div class="panel panel-default" id="errors">
54 <div class="panel panel-default">
55 <div class="panel-heading"> 47 <div class="panel-heading">
56 <a class="panel-title error toggle-errors" href="#"> 48 <h2 class="panel-title">
57 <h2 id="error-toggle"> 49 <span class="glyphicon glyphicon-minus-sign"></span>
58 <i class="icon-minus-sign"></i> 50 <a data-toggle="collapse" href="#error-info" id="error-toggle">
59 {{build.errors.count}} error{{build.errors.count|pluralize}} 51 {{build.errors.count}} error{{build.errors.count|pluralize}}
60 </h2> 52 </a>
61 </a> 53 </h2>
62 </div> 54 </div>
63 <div class="panel-collapse collapse in" id="collapse-errors"> 55 <div class="panel-collapse collapse in" id="error-info">
64 <div class="panel-body"> 56 <div class="panel-body">
65 <div class="col-md-10"> 57 <div class="col-md-10">
66 {% for error in build.errors %} 58 {% for error in build.errors %}
67 <div class="alert alert-error" data-error="{{ error.id }}"> 59 <div class="alert alert-danger" data-error="{{ error.id }}">
68 <pre>{{error.message}}</pre> 60 <pre>{{error.message}}</pre>
69 </div> 61 </div>
70 {% endfor %} 62 {% endfor %}
@@ -72,7 +64,6 @@
72 </div> 64 </div>
73 </div> 65 </div>
74 </div> 66 </div>
75</div>
76{% endif %} 67{% endif %}
77 68
78{%if build.outcome == build.SUCCEEDED%} 69{%if build.outcome == build.SUCCEEDED%}
@@ -81,9 +72,8 @@
81 <h2>Images</h2> 72 <h2>Images</h2>
82 {% for target in targets %} 73 {% for target in targets %}
83 {% if target.target.is_image %} 74 {% if target.target.is_image %}
84 <div class="well dashboard-section"> 75 <div class="well well-transparent dashboard-section">
85 <h3><a href="{% url 'target' build.pk target.target.pk %}">{{target.target}}</a> 76 <h3><a href="{% url 'target' build.pk target.target.pk %}">{{target.target}}</a></h3>
86 </h3>
87 <dl class="dl-horizontal"> 77 <dl class="dl-horizontal">
88 <dt>Packages included</dt> 78 <dt>Packages included</dt>
89 <dd><a href="{% url 'target' build.pk target.target.pk %}">{{target.npkg}}</a></dd> 79 <dd><a href="{% url 'target' build.pk target.target.pk %}">{{target.npkg}}</a></dd>
@@ -100,7 +90,7 @@
100 <p> 90 <p>
101 This is probably because valid image and license manifest 91 This is probably because valid image and license manifest
102 files from a previous build already exist in your 92 files from a previous build already exist in your
103 <code>.../poky/build/tmp/deploy</code> 93 <code>build/tmp/deploy</code>
104 directory. You can 94 directory. You can
105 also <a href="{% url 'target' build.pk target.target.pk %}">view the 95 also <a href="{% url 'target' build.pk target.target.pk %}">view the
106 license manifest information</a> in Toaster. 96 license manifest information</a> in Toaster.
@@ -110,7 +100,7 @@
110 </div> 100 </div>
111 {% else %} 101 {% else %}
112 <dt> 102 <dt>
113 <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> 103 <span class="glyphicon glyphicon-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"></span>
114 104
115 License manifest 105 License manifest
116 </dt> 106 </dt>
@@ -118,11 +108,11 @@
118 <a href="{% url 'target' build.pk target.target.pk %}">View in Toaster</a> | 108 <a href="{% url 'target' build.pk target.target.pk %}">View in Toaster</a> |
119 <a href="{% url 'build_artifact' build.pk 'licensemanifest' target.target.pk %}">Download</a></dd> 109 <a href="{% url 'build_artifact' build.pk 'licensemanifest' target.target.pk %}">Download</a></dd>
120 <dt> 110 <dt>
121 <i class="icon-question-sign get-help" title="Image files are stored in <code>/build/tmp/deploy/images/</code>"></i> 111 <span class="glyphicon glyphicon-question-sign get-help" title="Image files are stored in <code>build/tmp/deploy/images/</code>"></span>
122 Image files 112 Image files
123 </dt> 113 </dt>
124 <dd> 114 <dd>
125 <ul> 115 <ul class="list-unstyled">
126 {% for i in target.imageFiles %} 116 {% for i in target.imageFiles %}
127 <li> 117 <li>
128 <a href="{% url 'build_artifact' build.pk 'imagefile' i.id %}"> 118 <a href="{% url 'build_artifact' build.pk 'imagefile' i.id %}">
@@ -148,10 +138,10 @@
148{% if build.buildartifact_set.all.count > 0 %} 138{% if build.buildartifact_set.all.count > 0 %}
149<h2>Other artifacts</h2> 139<h2>Other artifacts</h2>
150 140
151 <div class="well dashboard-section"> 141 <div class="well well-transparent dashboard-section">
152 <dl class="dl-horizontal"> 142 <dl class="dl-horizontal">
153 <dt> 143 <dt>
154 <i class="icon-question-sign get-help" title="Build artifacts discovered in <i>tmp/deploy/images</i>. Usually kernel images and kernel modules."></i> 144 <span class="glyphicon glyphicon-question-sign get-help" title="Build artifacts discovered in <i>tmp/deploy/images</i>. Usually kernel images and kernel modules."></span>
155 Other artifacts</dt> 145 Other artifacts</dt>
156 <dd><div> 146 <dd><div>
157 {% for ba in build.buildartifact_set.all|dictsort:"file_name" %} 147 {% for ba in build.buildartifact_set.all|dictsort:"file_name" %}
@@ -172,51 +162,51 @@
172 <div class="row"> 162 <div class="row">
173 <div class="col-md-4 dashboard-section"> 163 <div class="col-md-4 dashboard-section">
174 <div class="well well-transparent"> 164 <div class="well well-transparent">
175 <h4><a href="{%url 'configuration' build.pk%}">Configuration</a></h4> 165 <h3><a href="{%url 'configuration' build.pk%}">Configuration</a></h3>
176 <dl> 166 <dl>
177 <dt>Machine</dt><dd>{{build.machine}}</dd> 167 <dt>Machine</dt><dd>{{build.machine}}</dd>
178 <dt>Distro</dt><dd>{{build.distro}}</dd> 168 <dt>Distro</dt><dd>{{build.distro}}</dd>
179 <dt>Layers</dt>{% for i in build.layer_version_build.all|dictsort:"layer.name" %}<dd>{{i.layer.name}}</dd>{%endfor%} 169 <dt>Layers</dt><dd><ul class="list-unstyled">{% for i in build.layer_version_build.all|dictsort:"layer.name" %}<li>{{i.layer.name}}</li>{%endfor%}</ul></dd>
180 </dl> 170 </dl>
181 </div> 171 </div>
182 </div> 172 </div>
183 <div class="col-md-4 dashboard-section"> 173 <div class="col-md-4 dashboard-section">
184 <div class="well well-transparent"> 174 <div class="well well-transparent">
185 <h4><a href="{%url 'tasks' build.pk%}">Tasks</a></h4> 175 <h3><a href="{%url 'tasks' build.pk%}">Tasks</a></h3>
186 <dl> 176 <dl>
187 {% query build.task_build outcome=4 order__gt=0 as exectask%} 177 {% query build.task_build outcome=4 order__gt=0 as exectask%}
188 {% if exectask.count > 0 %} 178 {% if exectask.count > 0 %}
189 <dt>Failed tasks</dt> 179 <dt>Failed tasks</dt>
190 <dd> 180 <dd>
191 {% if exectask.count == 1 %} 181 {% if exectask.count == 1 %}
192 <a class="error" href="{% url "task" build.id exectask.0.id %}"> 182 <a class="text-danger" href="{% url "task" build.id exectask.0.id %}">
193 {{exectask.0.recipe.name}} 183 {{exectask.0.recipe.name}}
194 <span class="task-name">{{exectask.0.task_name}}</span> 184 <span class="task-name">{{exectask.0.task_name}}</span>
195 </a> 185 </a>
196 186
197 <a href="{% url 'build_artifact' build.id "tasklogfile" exectask.0.id %}"> 187 <a href="{% url 'build_artifact' build.id "tasklogfile" exectask.0.id %}">
198 <i class="icon-download-alt" title="" data-original-title="Download task log file"></i> 188 <span class="glyphicon glyphicon-download-alt get-help" title="Download task log file"></i>
199 </a> 189 </a>
200 190
201 {% elif exectask.count > 1%} 191 {% elif exectask.count > 1%}
202 <a class="error" href="{% url "tasks" build.id %}?filter=outcome%3A4">{{exectask.count}}</a> 192 <a class="text-danger" href="{% url "tasks" build.id %}?filter=outcome%3A4">{{exectask.count}}</a>
203 {% endif %} 193 {% endif %}
204 </dd> 194 </dd>
205 {% endif %} 195 {% endif %}
206 <dt>Total number of tasks</dt><dd><a href="{% url 'tasks' build.pk %}">{% query build.task_build order__gt=0 as alltasks %}{{alltasks.count}}</a></dd> 196 <dt>Total number of tasks</dt><dd><a href="{% url 'tasks' build.pk %}">{% query build.task_build order__gt=0 as alltasks %}{{alltasks.count}}</a></dd>
207 <dt> 197 <dt>
208 Tasks executed 198 Tasks executed
209 <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> 199 <span class="glyphicon glyphicon-question-sign get-help" title="'Executed' tasks are those that need to be run in order to generate the task output"></span>
210 </dt> 200 </dt>
211 <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> 201 <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>
212 <dt> 202 <dt>
213 Tasks not executed 203 Tasks not executed
214 <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> 204 <span class="glyphicon glyphicon-question-sign get-help" title="'Not executed' tasks don't need to run because their outcome is provided by another task"></span>
215 </dt> 205 </dt>
216 <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> 206 <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>
217 <dt> 207 <dt>
218 Reuse 208 Reuse
219 <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> 209 <span class="glyphicon glyphicon-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"></span>
220 </dt> 210 </dt>
221 <dd> 211 <dd>
222{% query build.task_build order__gt=0 as texec %} 212{% query build.task_build order__gt=0 as texec %}
@@ -232,7 +222,7 @@
232 </div> 222 </div>
233 <div class="col-md-4 dashboard-section"> 223 <div class="col-md-4 dashboard-section">
234 <div class="well well-transparent"> 224 <div class="well well-transparent">
235 <h4><a href="{% url 'recipes' build.pk %}">Recipes</a> & <a href="{% url 'packages' build.pk %}">Packages</a></h4> 225 <h3><a href="{% url 'recipes' build.pk %}">Recipes</a> & <a href="{% url 'packages' build.pk %}">Packages</a></h3>
236 <dl> 226 <dl>
237 <dt>Recipes built</dt><dd><a href="{% url 'recipes' build.pk %}">{{recipecount}}</a></dd> 227 <dt>Recipes built</dt><dd><a href="{% url 'recipes' build.pk %}">{{recipecount}}</a></dd>
238 <dt>Packages built</dt><dd><a href="{% url 'packages' build.pk %}">{{packagecount}}</a></dd> 228 <dt>Packages built</dt><dd><a href="{% url 'packages' build.pk %}">{{packagecount}}</a></dd>
@@ -242,17 +232,14 @@
242</div> 232</div>
243 233
244{% if build.warnings.count %} 234{% if build.warnings.count %}
245<div class="panel-group" id="warnings"> 235 <div class="panel panel-default" id="warnings">
246 <div class="panel panel-default">
247 <div class="panel-heading"> 236 <div class="panel-heading">
248 <a class="panel-title warning toggle-warnings" href="#"> 237 <h2 class="panel-title">
249 <h2 id="warning-toggle"> 238 <span class="glyphicon glyphicon-warning-sign"></span>
250 <i class="icon-warning-sign"></i> 239 <a id="warning-toggle" href="#warning-info" data-toggle="collapse">{{build.warnings.count}} warning{{build.warnings.count|pluralize}}</a>
251 {{build.warnings.count}} warning{{build.warnings.count|pluralize}} 240 </h2>
252 </h2>
253 </a>
254 </div> 241 </div>
255 <div class="panel-collapse collapse" id="collapse-warnings"> 242 <div class="panel-collapse collapse" id="warning-info">
256 <div class="panel-body"> 243 <div class="panel-body">
257 <div class="col-md-10"> 244 <div class="col-md-10">
258 {% for warning in logmessages %}{% if warning.level == 1 %} 245 {% for warning in logmessages %}{% if warning.level == 1 %}
@@ -264,7 +251,6 @@
264 </div> 251 </div>
265 </div> 252 </div>
266 </div> 253 </div>
267</div>
268{% endif %} 254{% endif %}
269 255
270</div> <!-- end 10 column row --> 256</div> <!-- end 10 column row -->
@@ -273,8 +259,13 @@
273 $(document).ready(function() { 259 $(document).ready(function() {
274 //show warnings section when requested from the previous page 260 //show warnings section when requested from the previous page
275 if (location.href.search('#warnings') > -1) { 261 if (location.href.search('#warnings') > -1) {
276 $('#collapse-warnings').addClass('in'); 262 $('#warning-info').addClass('in');
277 } 263 }
264
265 //show warnings section when requested from the build outcome
266 $(".show-warnings").click(function() {
267 $('#warning-info').addClass('in');
268 });
278 }); 269 });
279</script> 270</script>
280 271