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.html218
1 files changed, 218 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..acf4d0a361
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
@@ -0,0 +1,218 @@
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 {% if target.targetHasNoImages %}
87 </dl>
88 <div class="row-fluid">
89 <div class="alert alert-info span7">
90 <p>
91 <b>This build did not create any image files</b>
92 </p>
93 <p>
94 This is probably because valid image and license manifest
95 files from a previous build already exist in your
96 <code>.../poky/build/tmp/deploy</code>
97 directory. You can
98 also <a href="{% url 'targetpkg' build.pk target.target.pk %}">view the
99 license manifest information</a> in Toaster.
100 </p>
101 </div>
102 </div>
103 {% else %}
104 <dt>
105 <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>
106 <a href="{% url 'targetpkg' build.pk target.target.pk %}">License manifest</a>
107 </dt>
108 <dd><code>{{target.target.license_manifest_path}}</code></dd>
109 <dt>
110 <i class="icon-question-sign get-help" title="Image files are stored in <code>/build/tmp/deploy/images/</code>"></i>
111 Image files
112 </dt>
113 <dd>
114 <ul>
115 {% for i in target.imageFiles %}
116 <li>{{i.path}}
117 ({{i.size|filtered_filesizeformat}})</li>
118 {% endfor %}
119 </ul>
120 </dd>
121 </dl>
122 {% endif %}
123 </div>
124 {% endif %}
125 {% endfor %}
126
127 {% endif %}
128</div>
129
130{%else%}
131<!-- error dump -->
132{%endif%}
133
134<!-- build summary -->
135<div class="row-fluid span10 pull-right">
136<h2>Build summary</h2>
137 <div class="well span4 dashboard-section" style="margin-left:0px;">
138 <h4><a href="{%url 'configuration' build.pk%}">Configuration</a></h4>
139 <dl>
140 <dt>Machine</dt><dd>{{build.machine}}</dd>
141 <dt>Distro</dt><dd>{{build.distro}}</dd>
142 <dt>Layers</dt>{% for i in build.layer_version_build.all|dictsort:"layer.name" %}<dd>{{i.layer.name}}</dd>{%endfor%}
143 </dl>
144 </div>
145 <div class="well span4 dashboard-section">
146 <h4><a href="{%url 'tasks' build.pk%}">Tasks</a></h4>
147 <dl>
148 <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>
149 <dt>
150 Tasks executed
151 <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>
152 </dt>
153 <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>
154 <dt>
155 Tasks not executed
156 <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>
157 </dt>
158 <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>
159 <dt>
160 Reuse
161 <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>
162 </dt>
163 <dd>
164{% query build.task_build order__gt=0 as texec %}
165{% if noexectask.count|multiply:100|divide:texec.count < 0 %}
1660
167{% else %}
168{{noexectask.count|multiply:100|divide:texec.count}}
169{% endif %}
170%
171 </dd>
172 </dl>
173 </div>
174 <div class="well span4 dashboard-section">
175 <h4><a href="{% url 'recipes' build.pk %}">Recipes</a> & <a href="{% url 'packages' build.pk %}">Packages</a></h4>
176 <dl>
177 <dt>Recipes built</dt><dd><a href="{% url 'recipes' build.pk %}">{{recipecount}}</a></dd>
178 <dt>Packages built</dt><dd><a href="{% url 'packages' build.pk %}">{{packagecount}}</a></dd>
179 </dl>
180 </div>
181</div>
182
183{% if build.warnings_no %}
184<div class="accordion span10 pull-right" id="warnings">
185 <div class="accordion-group">
186 <div class="accordion-heading">
187 <a class="accordion-toggle warning toggle-warnings">
188 <h2 id="warning-toggle">
189 <i class="icon-warning-sign"></i>
190 {{build.warnings_no}} warning{{build.warnings_no|pluralize}}
191 </h2>
192 </a>
193 </div>
194 <div class="accordion-body collapse" id="collapse-warnings">
195 <div class="accordion-inner">
196 <div class="span10">
197 {% for warning in logmessages %}{% if warning.level == 1 %}
198 <div class="alert alert-warning">
199 <pre>{{warning.message}}</pre>
200 </div>
201 {% endif %}{% endfor %}
202 </div>
203 </div>
204 </div>
205 </div>
206</div>
207{% endif %}
208
209<script type="text/javascript">
210 $(document).ready(function() {
211 //show warnings section when requested from the previous page
212 if (location.href.search('#warnings') > -1) {
213 $('#collapse-warnings').addClass('in');
214 }
215 });
216</script>
217
218{% endblock %}