diff options
Diffstat (limited to 'bitbake/lib/toaster/toastergui/templates/builddashboard.html')
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/builddashboard.html | 131 |
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 | 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&count=25&search=&page=1&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&count=25&search=&page=1&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&count=25&search=&page=1&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&count=25&search=&page=1&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 | ||