aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2014-08-27 17:24:42 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-08-29 13:56:39 +0100
commitc2ced09e7ea4a1762d2788bb12a761734d20fd8e (patch)
tree98af1c6ca9f39c11565f197dfbce0864e9ae0e6b
parent93887dadd5ee35557d320e96059c466d2e541065 (diff)
downloadbitbake-c2ced09e7ea4a1762d2788bb12a761734d20fd8e.tar.gz
toaster: create Build methods for calculating progress and ETA
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@intel.com>
-rw-r--r--lib/toaster/orm/models.py18
-rwxr-xr-xlib/toaster/toastergui/views.py13
2 files changed, 19 insertions, 12 deletions
diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py
index 5a6dcd72f..bb921fc98 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 e68f8b002..86a34adf2 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,
}