summaryrefslogtreecommitdiffstats
path: root/import-layers/yocto-poky/bitbake/lib/toaster/toastergui/templates/builddashboard.html
diff options
context:
space:
mode:
Diffstat (limited to 'import-layers/yocto-poky/bitbake/lib/toaster/toastergui/templates/builddashboard.html')
-rw-r--r--import-layers/yocto-poky/bitbake/lib/toaster/toastergui/templates/builddashboard.html379
1 files changed, 210 insertions, 169 deletions
diff --git a/import-layers/yocto-poky/bitbake/lib/toaster/toastergui/templates/builddashboard.html b/import-layers/yocto-poky/bitbake/lib/toaster/toastergui/templates/builddashboard.html
index a0da71ea4..02a29816a 100644
--- a/import-layers/yocto-poky/bitbake/lib/toaster/toastergui/templates/builddashboard.html
+++ b/import-layers/yocto-poky/bitbake/lib/toaster/toastergui/templates/builddashboard.html
@@ -1,8 +1,9 @@
{% extends "basebuildpage.html" %}
{% load humanize %}
{% load projecttags %}
+{% load field_values_filter %}
-{% block title %} {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
+{% block title %} {{build.get_sorted_target_list|field_values:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
{% block parentbreadcrumb %}
{% if build.get_sorted_target_list.count > 0 %}
{{build.get_sorted_target_list.0.target}}
@@ -13,61 +14,57 @@
{% block buildinfomain %}
<!-- page title -->
-<div class="row-fluid span10">
- <div class="page-header">
- <h1>{{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}}</h1>
+<div class="{% if build.started %}col-md-10{% else %}col-md-12{% endif %}">
+ <div class="page-header build-data">
+ <h1>{{build.get_sorted_target_list|field_values:"target"|join:", "}} {{build.machine}}</h1>
</div>
-</div>
<!-- build result bar -->
-<div class="row-fluid span10 pull-right">
- <div class="alert {%if build.outcome == build.SUCCEEDED%}alert-success{%elif build.outcome == build.FAILED%}alert-error{%else%}alert-info{%endif%}">
- <div class="row-fluid lead">
- <span class="pull-left"><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>
-{% if build.warnings.count or build.errors.count %}
-&nbsp;with
-{% endif %}
-{%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
-{% if build.errors.count %}
- <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>
-{% endif %}
-{% if build.warnings.count %}
-{% if build.errors.count %}
- and
-{% endif %}
- <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>
-{% endif %}
- <span class="pull-right">Build time: <a href="{% url 'buildtime' build.pk %}">{{ build.timespent_seconds|sectohms }}</a>
- {% if build.cooker_log_path %}
- <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>
- {% endif %}
- </span>
+ <div class="alert {%if build.outcome == build.SUCCEEDED%}alert-success{%elif build.outcome == build.FAILED%}alert-danger{%else%}alert-info{%endif%}">
+ <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>
+ {% if build.warnings.count or build.errors.count %}
+ <span>with</span>
+ {% endif %}
+ {%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
+ {% if build.errors.count %}
+ <a href="#errors" class="alert-link show-errors"> {{build.errors.count}} error{{build.errors.count|pluralize}}</a>
+ {% endif %}
+ {% if build.warnings.count %}
+ {% if build.errors.count %}and{% endif %}
+ <a href="#warnings" class="show-warnings"> {{build.warnings.count}} warning{{build.warnings.count|pluralize}}</a>
+ {% endif %}
+ {% if build.cooker_log_path %}
+ <a class="pull-right log" href="{% url 'build_artifact' build.id "cookerlog" build.id %}">Download build log</a>
+ {% endif %}
+ <span class="pull-right">
+ Build time:
+ <span data-build-field="buildtime">
+ {% if build.outcome == build.SUCCEEDED %}
+ <a href="{% url 'buildtime' build.pk %}">{{ build.timespent_seconds|sectohms }}</a>
+ {% else %}
+ {{ build.timespent_seconds|sectohms }}
+ {% endif %}
+ </span>
+ </span>
-{%endif%}
- </div>
- </div>
+ {%endif%}
</div>
{% if build.errors.count %}
-<div class="accordion span10 pull-right" id="errors">
- <div class="accordion-group">
- <div class="accordion-heading">
- <a class="accordion-toggle error toggle-errors">
- <h2 id="error-toggle">
- <i class="icon-minus-sign"></i>
+ <div class="panel panel-default" id="errors">
+ <div class="panel-heading">
+ <h2 class="panel-title">
+ <span class="glyphicon glyphicon-minus-sign"></span>
+ <a data-toggle="collapse" href="#error-info" id="error-toggle">
{{build.errors.count}} error{{build.errors.count|pluralize}}
- </h2>
- </a>
+ </a>
+ </h2>
</div>
- <div class="accordion-body collapse in" id="collapse-errors">
- <div class="accordion-inner">
- <div class="span10">
+ <div class="panel-collapse collapse in" id="error-info">
+ <div class="panel-body">
+ <div class="{% if build.started %}col-md-10{% else %}col-md-12{% endif %}">
{% for error in build.errors %}
- <div class="alert alert-error" data-error="{{ error.id }}">
+ <div class="alert alert-danger" data-log-message-id="{{error.pk}}">
<pre>{{error.message}}</pre>
</div>
{% endfor %}
@@ -75,57 +72,62 @@
</div>
</div>
</div>
-</div>
{% endif %}
{%if build.outcome == build.SUCCEEDED%}
<!-- built images -->
-{% if hasImages %}
-<div class="row-fluid span10 pull-right">
- <h2>Images</h2>
+ {% if hasArtifacts %}
+ <h2 data-heading="build-artifacts">Build artifacts</h2>
{% for target in targets %}
{% if target.target.is_image %}
- <div class="well dashboard-section">
- <h3><a href="{% url 'target' build.pk target.target.pk %}">{{target.target}}</a>
- </h3>
- <dl class="dl-horizontal">
- <dt>Packages included</dt>
- <dd><a href="{% url 'target' build.pk target.target.pk %}">{{target.npkg}}</a></dd>
- <dt>Total package size</dt>
- <dd>{{target.pkgsz|filtered_filesizeformat}}</dd>
- {% if target.targetHasNoImages %}
- </dl>
- <div class="row-fluid">
- <div class="alert alert-info span7">
- <p>
- <b>This build did not create any image files</b>
- </p>
- <p>
- This is probably because valid image and license manifest
- files from a previous build already exist in your
- <code>.../poky/build/tmp/deploy</code>
- directory. You can
- also <a href="{% url 'targetpkg' build.pk target.target.pk %}">view the
- license manifest information</a> in Toaster.
- </p>
- </div>
- </div>
+ <div class="well well-transparent dashboard-section" data-artifacts-for-target="{{target.target.pk}}">
+ {% if target.npkg > 0 %}
+ <h3>
+ <a href="{% url 'target' build.pk target.target.pk %}" data-link="target-packages">
+ {{target.target.target}}
+ </a>
+ </h3>
+ <dl class="dl-horizontal">
+ <dt>Packages included</dt>
+ <dd>
+ <a href="{% url 'target' build.pk target.target.pk %}">
+ <span data-value="target-package-count">{{target.npkg}}</span>
+ </a>
+ </dd>
+ <dt>Total package size</dt>
+ <dd>
+ <span data-value="target-package-size">{{target.pkgsz|filtered_filesizeformat}}</span>
+ </dd>
+ </dl>
{% else %}
- <dt>
- <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>
+ <h3>{{target.target.target}}</h3>
+ {% endif %}
- License manifest
+ {% if target.targetHasImages %}
+ <dl class="dl-horizontal">
+ <dt>
+ Manifests
</dt>
+
<dd>
- <a href="{% url 'targetpkg' build.pk target.target.pk %}">View in Toaster</a> |
- <a href="{% url 'build_artifact' build.pk 'licensemanifest' target.target.pk %}">Download</a></dd>
+ <a data-link="license-manifest" href="{% url 'build_artifact' build.pk 'licensemanifest' target.target.pk %}">License manifest</a>
+ </dd>
+
+ {% if target.target.package_manifest_path %}
+ <dd>
+ <a data-link="package-manifest" href="{% url 'build_artifact' build.pk 'packagemanifest' target.target.pk %}">Package manifest</a>
+ </dd>
+ {% endif %}
+ </dl>
+
+ <dl class="dl-horizontal">
<dt>
- <i class="icon-question-sign get-help" title="Image files are stored in <code>/build/tmp/deploy/images/</code>"></i>
+ <span class="glyphicon glyphicon-question-sign get-help" title="Image files are stored in <code>build/tmp/deploy/images/</code>"></span>
Image files
</dt>
<dd>
- <ul>
- {% for i in target.imageFiles %}
+ <ul class="list-unstyled" data-links="image-artifacts">
+ {% for i in target.imageFiles|dictsort:"suffix" %}
<li>
<a href="{% url 'build_artifact' build.pk 'imagefile' i.id %}">
{{i.suffix}}
@@ -135,13 +137,42 @@
{% endfor %}
</ul>
</dd>
- </dl>
+ <dt>
+ Kernel artifacts
+ </dt>
+ <dd>
+ <ul class="list-unstyled" data-links="kernel-artifacts">
+ {% for artifact in target.target_kernel_artifacts|dictsort:"basename" %}
+ <li>
+ <a href="{% url 'build_artifact' build.id 'targetkernelartifact' artifact.id %}">{{artifact.basename}}</a>
+ ({{artifact.file_size|filtered_filesizeformat}})
+ </li>
+ {% endfor %}
+ </ul>
+ </dd>
+ </dl>
+ {% endif %}
+ {% if target.target_sdk_artifacts_count > 0 %}
+ <dl class="dl-horizontal">
+ <dt>
+ SDK artifacts
+ </dt>
+ <dd>
+ <ul class="list-unstyled" data-links="sdk-artifacts">
+ {% for artifact in target.target_sdk_artifacts|dictsort:"basename" %}
+ <li>
+ <a href="{% url 'build_artifact' build.id 'targetsdkartifact' artifact.id %}">{{artifact.basename}}</a>
+ ({{artifact.file_size|filtered_filesizeformat}})
+ </li>
+ {% endfor %}
+ </ul>
+ </dd>
+ </dl>
{% endif %}
</div>
{% endif %}
{% endfor %}
-</div>
-{% endif %}
+ {% endif %}
{%else%}
<!-- error dump -->
@@ -149,13 +180,12 @@
<!-- other artifacts -->
{% if build.buildartifact_set.all.count > 0 %}
-<div class="row-fluid span10 pull-right">
<h2>Other artifacts</h2>
- <div class="well dashboard-section">
+ <div class="well well-transparent dashboard-section">
<dl class="dl-horizontal">
<dt>
- <i class="icon-question-sign get-help" title="Build artifacts discovered in <i>tmp/deploy/images</i>. Usually kernel images and kernel modules."></i>
+ <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>
Other artifacts</dt>
<dd><div>
{% for ba in build.buildartifact_set.all|dictsort:"file_name" %}
@@ -170,92 +200,97 @@
</dl>
</div>
-</div>
{% endif %}
-<!-- build summary -->
-<div class="row-fluid span10 pull-right">
-<h2>Build summary</h2>
- <div class="well span4 dashboard-section" style="margin-left:0px;">
- <h4><a href="{%url 'configuration' build.pk%}">Configuration</a></h4>
- <dl>
- <dt>Machine</dt><dd>{{build.machine}}</dd>
- <dt>Distro</dt><dd>{{build.distro}}</dd>
- <dt>Layers</dt>{% for i in build.layer_version_build.all|dictsort:"layer.name" %}<dd>{{i.layer.name}}</dd>{%endfor%}
- </dl>
- </div>
- <div class="well span4 dashboard-section">
- <h4><a href="{%url 'tasks' build.pk%}">Tasks</a></h4>
- <dl>
- {% query build.task_build outcome=4 order__gt=0 as exectask%}
- {% if exectask.count > 0 %}
- <dt>Failed tasks</dt>
- <dd>
- {% if exectask.count == 1 %}
- <a class="error" href="{% url "task" build.id exectask.0.id %}">
- {{exectask.0.recipe.name}}
- <span class="task-name">{{exectask.0.task_name}}</span>
- </a>
- <a href="{% url 'build_artifact' build.id "tasklogfile" exectask.0.id %}">
- <i class="icon-download-alt" title="" data-original-title="Download task log file"></i>
- </a>
+{% if build.started %}
+ <!-- build summary -->
+ <h2 data-role="build-summary-heading">Build summary</h2>
+ <div class="row">
+ <div class="col-md-4 dashboard-section">
+ <div class="well well-transparent">
+ <h3><a href="{%url 'configuration' build.pk%}">Configuration</a></h3>
+ <dl>
+ <dt>Machine</dt><dd>{{build.machine}}</dd>
+ <dt>Distro</dt><dd>{{build.distro}}</dd>
+ <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>
+ </dl>
+ </div>
+ </div>
+ <div class="col-md-4 dashboard-section">
+ <div class="well well-transparent">
+ <h3><a href="{%url 'tasks' build.pk%}">Tasks</a></h3>
+ <dl>
+ {% query build.task_build outcome=4 order__gt=0 as exectask%}
+ {% if exectask.count > 0 %}
+ <dt>Failed tasks</dt>
+ <dd>
+ {% if exectask.count == 1 %}
+ <a class="text-danger" href="{% url "task" build.id exectask.0.id %}">
+ {{exectask.0.recipe.name}}
+ <span class="task-name">{{exectask.0.task_name}}</span>
+ </a>
- {% elif exectask.count > 1%}
- <a class="error" href="{% url "tasks" build.id %}?filter=outcome%3A4">{{exectask.count}}</a>
- {% endif %}
- </dd>
- {% endif %}
- <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>
- <dt>
- Tasks executed
- <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>
- </dt>
- <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>
- <dt>
- Tasks not executed
- <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>
- </dt>
- <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>
- <dt>
- Reuse
- <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>
- </dt>
- <dd>
-{% query build.task_build order__gt=0 as texec %}
-{% if noexectask.count|multiply:100|divide:texec.count < 0 %}
-0
-{% else %}
-{{noexectask.count|multiply:100|divide:texec.count}}
-{% endif %}
-%
- </dd>
- </dl>
- </div>
- <div class="well span4 dashboard-section">
- <h4><a href="{% url 'recipes' build.pk %}">Recipes</a> & <a href="{% url 'packages' build.pk %}">Packages</a></h4>
- <dl>
- <dt>Recipes built</dt><dd><a href="{% url 'recipes' build.pk %}">{{recipecount}}</a></dd>
- <dt>Packages built</dt><dd><a href="{% url 'packages' build.pk %}">{{packagecount}}</a></dd>
- </dl>
+ <a href="{% url 'build_artifact' build.id "tasklogfile" exectask.0.id %}">
+ <span class="glyphicon glyphicon-download-alt get-help" title="Download task log file"></i>
+ </a>
+
+ {% elif exectask.count > 1%}
+ <a class="text-danger" href="{% url "tasks" build.id %}?limit=25&amp;page=1&amp;orderby=order&amp;filter=task_outcome:failed&amp;default_orderby=order&amp;filter_value=on&amp;">{{exectask.count}}</a>
+ {% endif %}
+ </dd>
+ {% endif %}
+ <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>
+ <dt>
+ Tasks executed
+ <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>
+ </dt>
+ <dd><a href="{% url 'tasks' build.pk %}?limit=25&amp;page=1&amp;orderby=order&amp;filter=execution_outcome:executed&amp;default_orderby=order&amp;filter_value=on&amp;">{% query build.task_build task_executed=1 order__gt=0 as exectask%}{{exectask.count}}</a></dd>
+ <dt>
+ Tasks not executed
+ <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>
+ </dt>
+ <dd><a href="{% url 'tasks' build.pk %}?limit=25&amp;page=1&amp;orderby=order&amp;filter=execution_outcome:not_executed&amp;default_orderby=order&amp;filter_value=on&amp;">{% query build.task_build task_executed=0 order__gt=0 as noexectask%}{{noexectask.count}}</a></dd>
+ <dt>
+ Reuse
+ <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>
+ </dt>
+ <dd>
+ {% query build.task_build order__gt=0 as texec %}
+ {% if noexectask.count|multiply:100|divide:texec.count < 0 %}
+ 0
+ {% else %}
+ {{noexectask.count|multiply:100|divide:texec.count}}
+ {% endif %}
+ %
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="col-md-4 dashboard-section">
+ <div class="well well-transparent">
+ <h3><a href="{% url 'recipes' build.pk %}">Recipes</a> & <a href="{% url 'packages' build.pk %}">Packages</a></h3>
+ <dl>
+ <dt>Recipes built</dt><dd><a href="{% url 'recipes' build.pk %}">{{recipecount}}</a></dd>
+ <dt>Packages built</dt><dd><a href="{% url 'packages' build.pk %}">{{packagecount}}</a></dd>
+ </dl>
+ </div>
</div>
-</div>
+ </div>
+{% endif %} <!-- end build summary -->
{% if build.warnings.count %}
-<div class="accordion span10 pull-right" id="warnings">
- <div class="accordion-group">
- <div class="accordion-heading">
- <a class="accordion-toggle warning toggle-warnings">
- <h2 id="warning-toggle">
- <i class="icon-warning-sign"></i>
- {{build.warnings.count}} warning{{build.warnings.count|pluralize}}
- </h2>
- </a>
+ <div class="panel panel-default" id="warnings">
+ <div class="panel-heading">
+ <h2 class="panel-title">
+ <span class="glyphicon glyphicon-warning-sign"></span>
+ <a id="warning-toggle" href="#warning-info" data-toggle="collapse">{{build.warnings.count}} warning{{build.warnings.count|pluralize}}</a>
+ </h2>
</div>
- <div class="accordion-body collapse" id="collapse-warnings">
- <div class="accordion-inner">
- <div class="span10">
+ <div class="panel-collapse collapse" id="warning-info">
+ <div class="panel-body">
+ <div class="{% if build.started %}col-md-10{% else %}col-md-12{% endif %}">
{% for warning in logmessages %}{% if warning.level == 1 %}
- <div class="alert alert-warning">
+ <div class="alert alert-warning" data-log-message-id="{{warning.pk}}">
<pre>{{warning.message}}</pre>
</div>
{% endif %}{% endfor %}
@@ -263,15 +298,21 @@
</div>
</div>
</div>
-</div>
{% endif %}
+</div> <!-- end 10 column row -->
+
<script type="text/javascript">
$(document).ready(function() {
//show warnings section when requested from the previous page
if (location.href.search('#warnings') > -1) {
- $('#collapse-warnings').addClass('in');
+ $('#warning-info').addClass('in');
}
+
+ //show warnings section when requested from the build outcome
+ $(".show-warnings").click(function() {
+ $('#warning-info').addClass('in');
+ });
});
</script>
OpenPOWER on IntegriCloud