diff options
Diffstat (limited to 'bitbake/lib/toaster/toastergui/templates/builddashboard.html')
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/builddashboard.html | 198 |
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 | 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&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> | ||
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&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> | ||
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 %} | ||
146 | 0 | ||
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 %} | ||