From dab3b1b45486b2da0df23bd9e9715046a8a0515c Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Mon, 4 Jul 2016 16:34:46 +0100 Subject: [PATCH] bitbake: toaster: views Fix most frequently built target in project reporting Clean up and fix the most frequently built targets for the "Most built recipes" section for the project configuration page. [YOCTO #9846] (Bitbake rev: 860475cfdd35301fb609ab3c89347566b0ca0adc) Signed-off-by: Michael Wood Signed-off-by: Elliot Smith Signed-off-by: Richard Purdie --- bitbake/lib/toaster/toastergui/views.py | 42 +++++++++++++++++++------ 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index c40273c8ba..2db68bdd4d 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py @@ -1404,15 +1404,37 @@ if True: pid = prj.id from collections import Counter - freqtargets = [] - try: - btargets = sum(build.target_set.all() for build in Build.objects.filter(project=prj, outcome__lt=Build.IN_PROGRESS)) - brtargets = sum(br.brtarget_set.all() for br in BuildRequest.objects.filter(project = prj, state = BuildRequest.REQ_FAILED)) - freqtargets = [x.target for x in btargets] + [x.target for x in brtargets] - except TypeError: - pass - freqtargets = Counter(freqtargets) - freqtargets = sorted(freqtargets, key = lambda x: freqtargets[x], reverse=True) + + freqtargets = Counter(Target.objects.filter( + Q(build__project=prj), + ~Q(build__outcome=Build.IN_PROGRESS) + ).order_by("target").values_list("target", flat=True)) + + freqtargets = freqtargets.most_common(5) + + # We now have the targets in order of frequency but if there are two + # with the same frequency then we need to make sure those are in + # alphabetical order without losing the frequency ordering + + tmp = [] + switch = None + for i, freqtartget in enumerate(freqtargets): + target, count = freqtartget + try: + target_next, count_next = freqtargets[i+1] + if count == count_next and target > target_next: + switch = target + continue + except IndexError: + pass + + tmp.append(target) + + if switch: + tmp.append(switch) + switch = None + + freqtargets = tmp layers = [{"id": x.layercommit.pk, "orderid": x.pk, "name" : x.layercommit.layer.name, "vcs_url": x.layercommit.layer.vcs_url, "vcs_reference" : x.layercommit.get_vcs_reference(), @@ -1432,7 +1454,7 @@ if True: "layers" : layers, "targets" : [{"target" : x.target, "task" : x.task, "pk": x.pk} for x in prj.projecttarget_set.all()], "variables": [(x.name, x.value) for x in prj.projectvariable_set.all()], - "freqtargets": freqtargets[:5], + "freqtargets": freqtargets, "releases": [{"id": x.pk, "name": x.name, "description":x.description} for x in Release.objects.all()], "project_html": 1, "recipesTypeAheadUrl": reverse('xhr_recipestypeahead', args=(prj.pk,)),