mirror of
https://git.yoctoproject.org/poky
synced 2026-09-19 00:49:33 +02:00
bitbake: toasterui: UI query performance improvements
We reduce the number of queries by using "select_related" to bring in more data in a single query. Improvements in project page refresh, recipes table and tasks table. (Bitbake rev: eefdae12120f879b555ba0a353277a18675eecbc) 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
9c358bd1d7
commit
e133fbf301
@@ -362,11 +362,14 @@ class Task(models.Model):
|
|||||||
return "Not Executed"
|
return "Not Executed"
|
||||||
|
|
||||||
def get_description(self):
|
def get_description(self):
|
||||||
helptext = HelpText.objects.filter(key=self.task_name, area=HelpText.VARIABLE, build=self.build)
|
if '_helptext' in vars(self) and self._helptext != None:
|
||||||
|
return self._helptext
|
||||||
try:
|
try:
|
||||||
return helptext[0].text
|
self._helptext = HelpText.objects.get(key=self.task_name, area=HelpText.VARIABLE, build=self.build).text
|
||||||
except IndexError:
|
except HelpText.DoesNotExit:
|
||||||
return ''
|
self._helptext = None
|
||||||
|
|
||||||
|
return self._helptext
|
||||||
|
|
||||||
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)
|
||||||
|
|||||||
@@ -75,8 +75,9 @@ def _project_recent_build_list(prj):
|
|||||||
'build_time_page_url': reverse('buildtime', args=(y.pk,)),
|
'build_time_page_url': reverse('buildtime', args=(y.pk,)),
|
||||||
"errors": y.errors_no,
|
"errors": y.errors_no,
|
||||||
"warnings": y.warnings_no,
|
"warnings": y.warnings_no,
|
||||||
"completeper": y.completeper(),
|
"completeper": y.completeper() if y.outcome == Build.IN_PROGRESS else "0",
|
||||||
"eta": y.eta().strftime('%s')+"000"}, Build.objects.filter(buildrequest = x)),
|
"eta": y.eta().strftime('%s')+"000" if y.outcome == Build.IN_PROGRESS else "0",
|
||||||
|
}, Build.objects.filter(buildrequest = x)),
|
||||||
}, list(prj.buildrequest_set.filter(Q(state__lt=BuildRequest.REQ_COMPLETED) or Q(state=BuildRequest.REQ_DELETED)).order_by("-pk")) +
|
}, list(prj.buildrequest_set.filter(Q(state__lt=BuildRequest.REQ_COMPLETED) or Q(state=BuildRequest.REQ_DELETED)).order_by("-pk")) +
|
||||||
list(prj.buildrequest_set.filter(state__in=[BuildRequest.REQ_COMPLETED, BuildRequest.REQ_FAILED]).order_by("-pk")[:3]))
|
list(prj.buildrequest_set.filter(state__in=[BuildRequest.REQ_COMPLETED, BuildRequest.REQ_FAILED]).order_by("-pk")[:3]))
|
||||||
|
|
||||||
@@ -828,6 +829,8 @@ def tasks_common(request, build_id, variant, task_anchor):
|
|||||||
else:
|
else:
|
||||||
queryset = _get_queryset(Task, queryset_all, filter_string, search_term, ordering_string, 'order')
|
queryset = _get_queryset(Task, queryset_all, filter_string, search_term, ordering_string, 'order')
|
||||||
|
|
||||||
|
queryset = queryset.select_related("recipe", "build")
|
||||||
|
|
||||||
# compute the anchor's page
|
# compute the anchor's page
|
||||||
if anchor:
|
if anchor:
|
||||||
request.GET = request.GET.copy()
|
request.GET = request.GET.copy()
|
||||||
@@ -1023,14 +1026,14 @@ def recipes(request, build_id):
|
|||||||
if retval:
|
if retval:
|
||||||
return _redirect_parameters( 'recipes', request.GET, mandatory_parameters, build_id = build_id)
|
return _redirect_parameters( 'recipes', request.GET, mandatory_parameters, build_id = build_id)
|
||||||
(filter_string, search_term, ordering_string) = _search_tuple(request, Recipe)
|
(filter_string, search_term, ordering_string) = _search_tuple(request, Recipe)
|
||||||
queryset = Recipe.objects.filter(layer_version__id__in=Layer_Version.objects.filter(build=build_id))
|
queryset = Recipe.objects.filter(layer_version__id__in=Layer_Version.objects.filter(build=build_id)).select_related("layer_version", "layer_version__layer")
|
||||||
queryset = _get_queryset(Recipe, queryset, filter_string, search_term, ordering_string, 'name')
|
queryset = _get_queryset(Recipe, queryset, filter_string, search_term, ordering_string, 'name')
|
||||||
|
|
||||||
recipes = _build_page_range(Paginator(queryset, pagesize),request.GET.get('page', 1))
|
recipes = _build_page_range(Paginator(queryset, pagesize),request.GET.get('page', 1))
|
||||||
|
|
||||||
# prefetch the forward and reverse recipe dependencies
|
# prefetch the forward and reverse recipe dependencies
|
||||||
deps = { }; revs = { }
|
deps = { }; revs = { }
|
||||||
queryset_dependency=Recipe_Dependency.objects.filter(recipe__layer_version__build_id = build_id)
|
queryset_dependency=Recipe_Dependency.objects.filter(recipe__layer_version__build_id = build_id).select_related("depends_on", "recipe")
|
||||||
for recipe in recipes:
|
for recipe in recipes:
|
||||||
deplist = [ ]
|
deplist = [ ]
|
||||||
for recipe_dep in [x for x in queryset_dependency if x.recipe_id == recipe.id]:
|
for recipe_dep in [x for x in queryset_dependency if x.recipe_id == recipe.id]:
|
||||||
@@ -1804,7 +1807,7 @@ if toastermain.settings.MANAGED:
|
|||||||
(filter_string, search_term, ordering_string) = _search_tuple(request, BuildRequest)
|
(filter_string, search_term, ordering_string) = _search_tuple(request, BuildRequest)
|
||||||
# we don't display in-progress or deleted builds
|
# we don't display in-progress or deleted builds
|
||||||
queryset_all = buildrequests.exclude(state = BuildRequest.REQ_DELETED)
|
queryset_all = buildrequests.exclude(state = BuildRequest.REQ_DELETED)
|
||||||
queryset_all = queryset_all.annotate(Count('brerror'))
|
queryset_all = queryset_all.select_related("build", "build__project").annotate(Count('brerror'))
|
||||||
queryset_with_search = _get_queryset(BuildRequest, queryset_all, filter_string, search_term, ordering_string, '-updated')
|
queryset_with_search = _get_queryset(BuildRequest, queryset_all, filter_string, search_term, ordering_string, '-updated')
|
||||||
|
|
||||||
|
|
||||||
@@ -2179,7 +2182,7 @@ if toastermain.settings.MANAGED:
|
|||||||
# return all project settings
|
# return all project settings
|
||||||
return HttpResponse(jsonfilter( {
|
return HttpResponse(jsonfilter( {
|
||||||
"error": "ok",
|
"error": "ok",
|
||||||
"layers" : map(lambda x: {"id": x.layercommit.pk, "orderid" : x.pk, "name" : x.layercommit.layer.name, "giturl" : x.layercommit.layer.vcs_url, "url": x.layercommit.layer.layer_index_url, "layerdetailurl": reverse("layerdetails", args=(x.layercommit.layer.pk,)), "branch" : { "name" : x.layercommit.up_branch.name, "layersource" : x.layercommit.up_branch.layer_source.name}}, prj.projectlayer_set.all().order_by("id")),
|
"layers" : map(lambda x: {"id": x.layercommit.pk, "orderid" : x.pk, "name" : x.layercommit.layer.name, "giturl" : x.layercommit.layer.vcs_url, "url": x.layercommit.layer.layer_index_url, "layerdetailurl": reverse("layerdetails", args=(x.layercommit.layer.pk,)), "branch" : { "name" : x.layercommit.up_branch.name, "layersource" : x.layercommit.up_branch.layer_source.name}}, prj.projectlayer_set.all().select_related("layer").order_by("id")),
|
||||||
"builds" : _project_recent_build_list(prj),
|
"builds" : _project_recent_build_list(prj),
|
||||||
"variables": map(lambda x: (x.name, x.value), prj.projectvariable_set.all()),
|
"variables": map(lambda x: (x.name, x.value), prj.projectvariable_set.all()),
|
||||||
"machine": {"name": prj.projectvariable_set.get(name="MACHINE").value},
|
"machine": {"name": prj.projectvariable_set.get(name="MACHINE").value},
|
||||||
|
|||||||
Reference in New Issue
Block a user