[bitbake-devel] [PATCH 11/11] toaster: create Build methods for calculating progress and ETA

Alex DAMIAN alexandru.damian at intel.com
Wed Aug 27 17:23:43 UTC 2014


From: Alexandru DAMIAN <alexandru.damian at intel.com>

We move the code to calculate build progress as percent
and the ETA of the build to the model, so that they can be
reused across different pages.

Signed-off-by: Alexandru DAMIAN <alexandru.damian at intel.com>
---
 lib/toaster/orm/models.py       | 18 ++++++++++++++++++
 lib/toaster/toastergui/views.py | 13 +------------
 2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py
index 5a6dcd7..bb921fc 100644
--- a/lib/toaster/orm/models.py
+++ b/lib/toaster/orm/models.py
@@ -120,6 +120,24 @@ class Build(models.Model):
     build_name = models.CharField(max_length=100)
     bitbake_version = models.CharField(max_length=50)
 
+    def completeper(self):
+        tf = Task.objects.filter(build = self)
+        tfc = tf.count()
+        if tfc > 0:
+            completeper = tf.exclude(order__isnull=True).count()*100/tf.count()
+        else:
+            completeper = 0
+        return completeper
+
+    def eta(self):
+        from django.utils import timezone
+        eta = 0
+        completeper = self.completeper()
+        if self.completeper() > 0:
+            eta = timezone.now() + ((timezone.now() - self.started_on)*(100-completeper)/completeper)
+        return eta
+
+
     def get_sorted_target_list(self):
         tgts = Target.objects.filter(build_id = self.id).order_by( 'target' );
         return( tgts );
diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index e68f8b0..86a34ad 100755
--- a/lib/toaster/toastergui/views.py
+++ b/lib/toaster/toastergui/views.py
@@ -224,17 +224,6 @@ def builds(request):
 
     # build view-specific information; this is rendered specifically in the builds page, at the top of the page (i.e. Recent builds)
     build_mru = Build.objects.filter(completed_on__gte=(timezone.now()-timedelta(hours=24))).order_by("-started_on")[:3]
-    for b in [ x for x in build_mru if x.outcome == Build.IN_PROGRESS ]:
-        tf = Task.objects.filter(build = b)
-        tfc = tf.count()
-        if tfc > 0:
-            b.completeper = tf.exclude(order__isnull=True).count()*100/tf.count()
-        else:
-            b.completeper = 0
-
-        b.eta = 0
-        if b.completeper > 0:
-            b.eta = timezone.now() + ((timezone.now() - b.started_on)*(100-b.completeper)/b.completeper)
 
     # set up list of fstypes for each build
     fstypes_map = {};
@@ -1854,7 +1843,7 @@ if toastermain.settings.MANAGED:
         context = {
             "project" : prj,
             #"buildrequests" : prj.buildrequest_set.filter(state=BuildRequest.REQ_QUEUED),
-            "buildrequests" : map(lambda x: (x, {"machine" : x.brvariable_set.filter(name="MACHINE")[0]}), prj.buildrequest_set.order_by("-pk")),
+            "buildrequests" : map(lambda x: (x, {"machine" : x.brvariable_set.filter(name="MACHINE")[0]}), prj.buildrequest_set.filter(state__lt = BuildRequest.REQ_INPROGRESS).order_by("-pk")),
             "builds" : prj.build_set.all(),
             "puser": puser,
         }
-- 
1.9.1




More information about the bitbake-devel mailing list