mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 00:20:08 +00:00
bitbake: toaster: update Task classification fields
This patch updates the task classification fields (outcome, etc) as to * Changes outcome names from SSTATE to CACHED and from EXISTING to PREBUILT * NoExec tasks now recorded as Not Executed / script type NA instead of Executed / script type NOEXEC. Script type NOEXEC is deleted. * SetScene tasks do not get order numbers * New task method that returns a QuerySet for setscene tasks related to this task: Task.get_related_setscene() * New custom TaskManager that allows searching for setscene tasks related to a certain task: Task.objects.related_setscene(task) (Bitbake rev: a4164821a142f8b625a5fdc209adc6dc80874241) Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
3e1dbed338
commit
731a0ac2c8
@@ -91,9 +91,9 @@ class ORMWrapper(object):
|
|||||||
for v in vars(task_object):
|
for v in vars(task_object):
|
||||||
if v in task_information.keys():
|
if v in task_information.keys():
|
||||||
vars(task_object)[v] = task_information[v]
|
vars(task_object)[v] = task_information[v]
|
||||||
# if we got covered by a setscene task, we're SSTATE
|
# if we got covered by a setscene task, we're CACHED
|
||||||
if task_object.outcome == Task.OUTCOME_COVERED and 1 == Task.objects.filter(task_executed=True, build = task_object.build, recipe = task_object.recipe, task_name=task_object.task_name+"_setscene").count():
|
if task_object.outcome == Task.OUTCOME_COVERED and 1 == Task.objects.related_setscene(task_object).count():
|
||||||
task_object.outcome = Task.OUTCOME_SSTATE
|
task_object.outcome = Task.OUTCOME_CACHED
|
||||||
outcome_task_setscene = Task.objects.get(task_executed=True, build = task_object.build,
|
outcome_task_setscene = Task.objects.get(task_executed=True, build = task_object.build,
|
||||||
recipe = task_object.recipe, task_name=task_object.task_name+"_setscene").outcome
|
recipe = task_object.recipe, task_name=task_object.task_name+"_setscene").outcome
|
||||||
if outcome_task_setscene == Task.OUTCOME_SUCCESS:
|
if outcome_task_setscene == Task.OUTCOME_SUCCESS:
|
||||||
@@ -442,14 +442,19 @@ class BuildInfoHelper(object):
|
|||||||
if event.reason == "covered":
|
if event.reason == "covered":
|
||||||
task_information['outcome'] = Task.OUTCOME_COVERED
|
task_information['outcome'] = Task.OUTCOME_COVERED
|
||||||
if event.reason == "existing":
|
if event.reason == "existing":
|
||||||
task_information['outcome'] = Task.OUTCOME_EXISTING
|
task_information['outcome'] = Task.OUTCOME_PREBUILT
|
||||||
else:
|
else:
|
||||||
task_information['task_executed'] = True
|
task_information['task_executed'] = True
|
||||||
if 'noexec' in vars(event) and event.noexec == True:
|
if 'noexec' in vars(event) and event.noexec == True:
|
||||||
task_information['script_type'] = Task.CODING_NOEXEC
|
task_information['task_executed'] = False
|
||||||
|
task_information['outcome'] = Task.OUTCOME_NA
|
||||||
|
task_information['script_type'] = Task.CODING_NA
|
||||||
|
|
||||||
|
# do not assign order numbers to scene tasks
|
||||||
|
if not isinstance(event, bb.runqueue.sceneQueueTaskStarted):
|
||||||
|
self.task_order += 1
|
||||||
|
task_information['order'] = self.task_order
|
||||||
|
|
||||||
self.task_order += 1
|
|
||||||
task_information['order'] = self.task_order
|
|
||||||
task_obj = self.orm_wrapper.get_update_task_object(task_information)
|
task_obj = self.orm_wrapper.get_update_task_object(task_information)
|
||||||
|
|
||||||
self.internal_state[identifier] = {'start_time': datetime.datetime.now()}
|
self.internal_state[identifier] = {'start_time': datetime.datetime.now()}
|
||||||
|
|||||||
@@ -33,11 +33,15 @@
|
|||||||
{% if task.task_executed %}
|
{% if task.task_executed %}
|
||||||
<td>Executed</td>
|
<td>Executed</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td>Prebuilt</td>
|
<td>Not Executed</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<td>{{task.sstate_checksum}}</td>
|
<td>{{task.sstate_checksum}}</td>
|
||||||
<td>{{task.get_outcome_display}}{% if task.provider %}</br>(by <a href="#{{task.provider.recipe.name}}.{{task.provider.task_name}}">{{task.provider.recipe.name}}.{{task.provider.task_name}}</a>){% endif %}</td>
|
<td>{{task.get_outcome_display}}{% if task.provider %}</br>(by <a href="#{{task.provider.recipe.name}}.{{task.provider.task_name}}">{{task.provider.recipe.name}}.{{task.provider.task_name}}</a>){% endif %}
|
||||||
|
{% if task.outcome == task.OUTCOME_CACHED %}{% for t in task.get_related_setscene %}
|
||||||
|
<br/>({{t.task_name}} {{t.get_outcome_display}})
|
||||||
|
{% endfor %}{%endif%}
|
||||||
|
</td>
|
||||||
<td><p>{{task.message}}</td>
|
<td><p>{{task.message}}</td>
|
||||||
<td>{{task.elapsed_time}}</td>
|
<td>{{task.elapsed_time}}</td>
|
||||||
<td>{{task.cpu_usage}}</td>
|
<td>{{task.cpu_usage}}</td>
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ def _find_task_provider(task):
|
|||||||
def task(request, build_id):
|
def task(request, build_id):
|
||||||
template = 'simple_task.html'
|
template = 'simple_task.html'
|
||||||
|
|
||||||
tasks = _build_page_range(Paginator(Task.objects.filter(build=build_id), 100),request.GET.get('page', 1))
|
tasks = _build_page_range(Paginator(Task.objects.filter(build=build_id, order__gt=0), 100),request.GET.get('page', 1))
|
||||||
|
|
||||||
for t in tasks:
|
for t in tasks:
|
||||||
if t.outcome == Task.OUTCOME_COVERED:
|
if t.outcome == Task.OUTCOME_COVERED:
|
||||||
|
|||||||
@@ -60,6 +60,11 @@ class Target(models.Model):
|
|||||||
return self.target
|
return self.target
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TaskManager(models.Manager):
|
||||||
|
def related_setscene(self, task_object):
|
||||||
|
return Task.objects.filter(task_executed=True, build = task_object.build, recipe = task_object.recipe, task_name=task_object.task_name+"_setscene")
|
||||||
|
|
||||||
class Task(models.Model):
|
class Task(models.Model):
|
||||||
|
|
||||||
SSTATE_NA = 0
|
SSTATE_NA = 0
|
||||||
@@ -75,38 +80,41 @@ class Task(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
CODING_NA = 0
|
CODING_NA = 0
|
||||||
CODING_NOEXEC = 1
|
|
||||||
CODING_PYTHON = 2
|
CODING_PYTHON = 2
|
||||||
CODING_SHELL = 3
|
CODING_SHELL = 3
|
||||||
|
|
||||||
TASK_CODING = (
|
TASK_CODING = (
|
||||||
(CODING_NA, 'N/A'),
|
(CODING_NA, 'N/A'),
|
||||||
(CODING_NOEXEC, 'NoExec'),
|
|
||||||
(CODING_PYTHON, 'Python'),
|
(CODING_PYTHON, 'Python'),
|
||||||
(CODING_SHELL, 'Shell'),
|
(CODING_SHELL, 'Shell'),
|
||||||
)
|
)
|
||||||
|
|
||||||
OUTCOME_SUCCESS = 0
|
OUTCOME_SUCCESS = 0
|
||||||
OUTCOME_COVERED = 1
|
OUTCOME_COVERED = 1
|
||||||
OUTCOME_SSTATE = 2
|
OUTCOME_CACHED = 2
|
||||||
OUTCOME_EXISTING = 3
|
OUTCOME_PREBUILT = 3
|
||||||
OUTCOME_FAILED = 4
|
OUTCOME_FAILED = 4
|
||||||
OUTCOME_NA = 5
|
OUTCOME_NA = 5
|
||||||
|
|
||||||
TASK_OUTCOME = (
|
TASK_OUTCOME = (
|
||||||
(OUTCOME_SUCCESS, 'Succeeded'),
|
(OUTCOME_SUCCESS, 'Succeeded'),
|
||||||
(OUTCOME_COVERED, 'Covered'),
|
(OUTCOME_COVERED, 'Covered'),
|
||||||
(OUTCOME_SSTATE, 'Sstate'),
|
(OUTCOME_CACHED, 'Cached'),
|
||||||
(OUTCOME_EXISTING, 'Existing'),
|
(OUTCOME_PREBUILT, 'Prebuilt'),
|
||||||
(OUTCOME_FAILED, 'Failed'),
|
(OUTCOME_FAILED, 'Failed'),
|
||||||
(OUTCOME_NA, 'Not Available'),
|
(OUTCOME_NA, 'Not Available'),
|
||||||
)
|
)
|
||||||
|
|
||||||
search_allowed_fields = [ "recipe__name", "task_name" ]
|
search_allowed_fields = [ "recipe__name", "task_name" ]
|
||||||
|
|
||||||
|
objects = TaskManager()
|
||||||
|
|
||||||
|
def get_related_setscene(self):
|
||||||
|
return Task.objects.related_setscene(self)
|
||||||
|
|
||||||
build = models.ForeignKey(Build, related_name='task_build')
|
build = models.ForeignKey(Build, related_name='task_build')
|
||||||
order = models.IntegerField(null=True)
|
order = models.IntegerField(null=True)
|
||||||
task_executed = models.BooleanField(default=False) # True means Executed, False means Prebuilt
|
task_executed = models.BooleanField(default=False) # True means Executed, False means Not/Executed
|
||||||
outcome = models.IntegerField(choices=TASK_OUTCOME, default=OUTCOME_NA)
|
outcome = models.IntegerField(choices=TASK_OUTCOME, default=OUTCOME_NA)
|
||||||
sstate_checksum = models.CharField(max_length=100, blank=True)
|
sstate_checksum = models.CharField(max_length=100, blank=True)
|
||||||
path_to_sstate_obj = models.FilePathField(max_length=500, blank=True)
|
path_to_sstate_obj = models.FilePathField(max_length=500, blank=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user