query and conversion completed
authorkrishnatejaperannagari <krishnatejaperannagari@gmail.com>
Mon, 23 Jun 2014 08:33:26 +0000 (14:03 +0530)
committerkrishnatejaperannagari <krishnatejaperannagari@gmail.com>
Thu, 26 Jun 2014 16:17:30 +0000 (21:47 +0530)
Signed-off-by: krishnatejaperannagari <krishnatejaperannagari@gmail.com>
buildfarm/__init__.py
buildfarm/build.py
buildfarm/web/__init__.py

index 7c4428e80bd4aa374ce425f68f8a9b3c0d42a615..cf7f92e3aca2b63b7daa1be7cf767bc20858bde8 100644 (file)
@@ -143,6 +143,10 @@ class BuildFarm(object):
         result = self._get_store().find(StormBuild)
         return distinct_builds(result.order_by(Desc(StormBuild.upload_time)))
 
+    def get_summary_builds(self):
+        store = self._get_store()
+        return store.execute("SELECT tree,status FROM build GROUP BY tree,host,compiler having max(age);")
+
     def get_tree_builds(self, tree):
         result = self._get_store().find(StormBuild,
             Cast(StormBuild.tree, "TEXT") == Cast(tree, "TEXT"))
index fae37a179709b038109c2118833b7169f8569fdf..eb8e4423fe99908da53e8cba81dbde69469fa4d0 100644 (file)
@@ -566,8 +566,8 @@ class BuildResultStore(object):
         os.link(build.basename+".log", new_basename+".log")
         if os.path.exists(build.basename+".err"):
             os.link(build.basename+".err", new_basename+".err")
-        new_build = StormBuild(new_basename, build.tree, build.host,
-            build.compiler, rev)
+        #they are supposed to be in unicode only but since comparision for sumary page depends on them the unicode conversion is done to avoid duplicates when running query in summary_builds
+        new_build = StormBuild(new_basename, unicode(build.tree), unicode(build.host), unicode(build.compiler), rev)
         new_build.checksum = build.log_checksum()
         new_build.upload_time = build.upload_time
         new_build.status_str = build.status().__serialize__()
index 08d577a1ba3402c676d8a2dda53aedf2efc4cf2a..ffaeb60507f13ecf8e40313f64a55c740aa3e32e 100755 (executable)
@@ -42,6 +42,7 @@ from buildfarm.build import (
     LogFileMissing,
     NoSuchBuildError,
     NoTestOutput,
+    BuildStatus,
     )
 
 import cgi
@@ -728,16 +729,16 @@ class ViewSummaryPage(BuildFarmPage):
         # output when we want
         broken_table = ""
 
-        builds = self.buildfarm.get_last_builds()
+        builds = self.buildfarm.get_summary_builds()
 
         for build in builds:
-            host_count[build.tree]+=1
-            status = build.status()
+            host_count[build[0]]+=1
+            status = BuildStatus.__deserialize__(build[1])
 
             if status.failed:
-                broken_count[build.tree]+=1
+                broken_count[build[0]]+=1
                 if "panic" in status.other_failures:
-                    panic_count[build.tree]+=1
+                    panic_count[build[0]]+=1
         return (host_count, broken_count, panic_count)
 
     def render_text(self, myself):