diff options
author | Alexandru DAMIAN <alexandru.damian@intel.com> | 2014-01-14 12:35:12 +0000 |
---|---|---|
committer | Alexandru DAMIAN <alexandru.damian@intel.com> | 2014-01-27 15:19:49 +0000 |
commit | a4164821a142f8b625a5fdc209adc6dc80874241 (patch) | |
tree | 88fd56b864c7649017fd7c2152aad7ae0673c503 | |
parent | 6ed1a28eb0e52a6de83a37664ff6f4418ce84ee4 (diff) | |
download | bitbake-contrib-a4164821a142f8b625a5fdc209adc6dc80874241.tar.gz |
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)
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
-rw-r--r-- | lib/bb/ui/buildinfohelper.py | 19 | ||||
-rw-r--r-- | lib/toaster/bldviewer/templates/simple_task.html | 8 | ||||
-rw-r--r-- | lib/toaster/bldviewer/views.py | 2 | ||||
-rw-r--r-- | lib/toaster/orm/models.py | 22 |
4 files changed, 34 insertions, 17 deletions
diff --git a/lib/bb/ui/buildinfohelper.py b/lib/bb/ui/buildinfohelper.py index 3d5f1c860..b90e915a1 100644 --- a/lib/bb/ui/buildinfohelper.py +++ b/lib/bb/ui/buildinfohelper.py @@ -91,9 +91,9 @@ class ORMWrapper(object): for v in vars(task_object): if v in task_information.keys(): vars(task_object)[v] = task_information[v] - # if we got covered by a setscene task, we're SSTATE - 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(): - task_object.outcome = Task.OUTCOME_SSTATE + # if we got covered by a setscene task, we're CACHED + if task_object.outcome == Task.OUTCOME_COVERED and 1 == Task.objects.related_setscene(task_object).count(): + task_object.outcome = Task.OUTCOME_CACHED 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 if outcome_task_setscene == Task.OUTCOME_SUCCESS: @@ -442,14 +442,19 @@ class BuildInfoHelper(object): if event.reason == "covered": task_information['outcome'] = Task.OUTCOME_COVERED if event.reason == "existing": - task_information['outcome'] = Task.OUTCOME_EXISTING + task_information['outcome'] = Task.OUTCOME_PREBUILT else: task_information['task_executed'] = 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) self.internal_state[identifier] = {'start_time': datetime.datetime.now()} diff --git a/lib/toaster/bldviewer/templates/simple_task.html b/lib/toaster/bldviewer/templates/simple_task.html index cb6f309fe..a5ed5295e 100644 --- a/lib/toaster/bldviewer/templates/simple_task.html +++ b/lib/toaster/bldviewer/templates/simple_task.html @@ -33,11 +33,15 @@ {% if task.task_executed %} <td>Executed</td> {% else %} - <td>Prebuilt</td> + <td>Not Executed</td> {% endif %} <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>{{task.elapsed_time}}</td> <td>{{task.cpu_usage}}</td> diff --git a/lib/toaster/bldviewer/views.py b/lib/toaster/bldviewer/views.py index 22b42d39c..6a90ed7b5 100644 --- a/lib/toaster/bldviewer/views.py +++ b/lib/toaster/bldviewer/views.py @@ -84,7 +84,7 @@ def _find_task_provider(task): def task(request, build_id): 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: if t.outcome == Task.OUTCOME_COVERED: diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py index ff26c7d43..7c439487e 100644 --- a/lib/toaster/orm/models.py +++ b/lib/toaster/orm/models.py @@ -60,6 +60,11 @@ class Target(models.Model): 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): SSTATE_NA = 0 @@ -75,38 +80,41 @@ class Task(models.Model): ) CODING_NA = 0 - CODING_NOEXEC = 1 CODING_PYTHON = 2 CODING_SHELL = 3 TASK_CODING = ( (CODING_NA, 'N/A'), - (CODING_NOEXEC, 'NoExec'), (CODING_PYTHON, 'Python'), (CODING_SHELL, 'Shell'), ) OUTCOME_SUCCESS = 0 OUTCOME_COVERED = 1 - OUTCOME_SSTATE = 2 - OUTCOME_EXISTING = 3 + OUTCOME_CACHED = 2 + OUTCOME_PREBUILT = 3 OUTCOME_FAILED = 4 OUTCOME_NA = 5 TASK_OUTCOME = ( (OUTCOME_SUCCESS, 'Succeeded'), (OUTCOME_COVERED, 'Covered'), - (OUTCOME_SSTATE, 'Sstate'), - (OUTCOME_EXISTING, 'Existing'), + (OUTCOME_CACHED, 'Cached'), + (OUTCOME_PREBUILT, 'Prebuilt'), (OUTCOME_FAILED, 'Failed'), (OUTCOME_NA, 'Not Available'), ) 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') 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) sstate_checksum = models.CharField(max_length=100, blank=True) path_to_sstate_obj = models.FilePathField(max_length=500, blank=True) |