Files
poky/bitbake/lib/toaster/toastergui/templates/tasks.html
Elliot Smith 0dcab0258e bitbake: toaster: rework task buildstats storage and display
The data available from buildstats is now more fine grained than
previously, so take advantage of that to enrich the data we save
against tasks:

* Store the CPU usage for user and system separately, and display
them separately.
* Disk IO is now measured in bytes, not ms. Also store the
read/write bytes separately.
* Store started and ended times, as well as elapsed_time. This
will enable future features such as showing which tasks were
running at a particular point in the build.

There was also a problem with how we were looking up the Task
object, which meant that the buildstats were being added to
new tasks which weren't correctly associated with the build. Fix
how we look up the Task (only looking for tasks which match the
build, and the task and recipe names in the build stats data) so
the build stats are associated with the correct task.

[YOCTO #8842]

(Bitbake rev: efa6f915566b979bdbad233ae195b413cef1b8da)

Signed-off-by: Elliot Smith <elliot.smith@intel.com>
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-03-09 22:45:16 +00:00

144 lines
5.3 KiB
HTML

{% extends "basebuildpage.html" %}
{% load humanize %}
{% load projecttags %}
{% block title %} {{mainheading}} - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster{% endblock %}
{% block localbreadcrumb %}
<li>{{mainheading}}</li>
{% endblock %}
{% block nav-tasks %}
{% if 'Tasks' == mainheading %}
<li class="active"><a href="{% url 'tasks' build.pk %}">Tasks</a></li>
{% else %}
<li><a href="{% url 'tasks' build.pk %}">Tasks</a></li>
{% endif %}
{% endblock %}
{% block nav-buildtime %}
{% if 'Time' == mainheading %}
<li class="active"><a href="{% url 'buildtime' build.pk %}">Time</a></li>
{% else %}
<li><a href="{% url 'buildtime' build.pk %}">Time</a></li>
{% endif %}
{% endblock %}
{% block nav-cputime %}
{% if 'CPU time' == mainheading %}
<li class="active"><a href="{% url 'cputime' build.pk %}">CPU time</a></li>
{% else %}
<li><a href="{% url 'cputime' build.pk %}">CPU time</a></li>
{% endif %}
{% endblock %}
{% block nav-diskio %}
{% if 'Disk I/O' == mainheading %}
<li class="active"><a href="{% url 'diskio' build.pk %}">Disk I/O</a></li>
{% else %}
<li><a href="{% url 'diskio' build.pk %}">Disk I/O</a></li>
{% endif %}
{% endblock %}
{% block buildinfomain %}
<div class="span10">
{% if not request.GET.filter and not request.GET.search and not objects.paginator.count %}
<!-- Empty - no data in database -->
<div class="page-header">
<h1>{{mainheading}}</h1>
</div>
<div class="alert alert-info lead">
No data was recorded for this build.
</div>
{% else %}
<div class="page-header">
<h1>
{% if request.GET.filter and objects.paginator.count > 0 or request.GET.search and objects.paginator.count > 0 %}
{{objects.paginator.count}} task{{objects.paginator.count|pluralize}} found
{%elif request.GET.filter and objects.paginator.count == 0 or request.GET.search and objects.paginator.count == 0 %}
No tasks found
{%else%}
{{mainheading}}
{%endif%}
</h1>
</div>
{% if objects.paginator.count == 0 %}
<div class="row-fluid">
<div class="alert">
<form class="no-results input-append" id="searchform">
<input id="search" name="search" class="input-xxlarge" type="text" value="{{request.GET.search}}"/>{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" class="add-on btn" tabindex="-1"><i class="icon-remove"></i></a>{% endif %}
<button class="btn" type="submit" value="Search">Search</button>
<button class="btn btn-link" onclick="javascript:$('#search').val('');searchform.submit()">Show all tasks</button>
</form>
</div>
</div>
{% else %}
{% include "basetable_top.html" %}
{% for task in objects %}
<tr {{ task|task_color }} id="{{task.order}}">
<td class="order">
<a href="{%url "task" build.pk task.pk%}">{{task.order}}</a>
</td>
<td class="recipe_name" >
<a href="{% url "recipe" build.pk task.recipe.pk %}">{{task.recipe.name}}</a>
</td>
<td class="recipe_version">
<a href="{% url "recipe" build.pk task.recipe.pk %}">{{task.recipe.version}}</a>
</td>
<td class="task_name">
<a href="{%url "task" build.pk task.pk%}">{{task.task_name}}</a> {% if task.get_description %}<i class="icon-question-sign get-help hover-help" title="{{task.get_description}}"></i> {% endif %}
</td>
<td class="executed">
<a href="{%url "task" build.pk task.pk%}">{{task.get_executed_display}}</a>
</td>
<td class="outcome">
<a href="{%url "task" build.pk task.pk%}">{{task.get_outcome_display}} </a>
{% if task.outcome = task.OUTCOME_FAILED %}
<a href="{% url 'build_artifact' build.pk "tasklogfile" task.pk %}">
<i class="icon-download-alt" title="Download task log file"></i>
</a>
{% endif %}
<i class="icon-question-sign get-help hover-help" title="{{task.get_outcome_help}}"></i>
</td>
<td class="cache_attempt">
<a href="{%url "task" build.pk task.pk%}">{{task.get_sstate_result_display|format_none_and_zero}}</a>
</td>
<td class="time_taken">
{{task.elapsed_time|format_none_and_zero|floatformat:2}}
</td>
<td class="cpu_time_system">
{{task.cpu_time_system|format_none_and_zero|floatformat:2}}
</td>
<td class="cpu_time_user">
{{task.cpu_time_user|format_none_and_zero|floatformat:2}}
</td>
<td class="disk_io">
{{task.disk_io|format_none_and_zero|intcomma}}
</td>
</tr>
{% endfor %}
{% include "basetable_bottom.html" %}
{% endif %} {# objects.paginator.count #}
{% endif %} {# empty #}
</div>
<script type="text/javascript">
$(document).ready(function() {
// enable blue hightlight animation for the order link
if (location.href.search('#') > -1) {
var task_order = location.href.split('#')[1];
$("#" + task_order).addClass("highlight");
}
});
</script>
{% endblock %}