diff options
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.html | 379 |
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 %} - 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&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> - <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&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> - <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&page=1&orderby=order&filter=task_outcome:failed&default_orderby=order&filter_value=on&">{{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&page=1&orderby=order&filter=execution_outcome:executed&default_orderby=order&filter_value=on&">{% 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&page=1&orderby=order&filter=execution_outcome:not_executed&default_orderby=order&filter_value=on&">{% 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> |