Make Build ETA column clickable, resizeable and sortable like the others.
[tpot/bbremote.git] / bbmodel.py
index fff43d381912fe8bec508054b25848f32886aa66..9b221914d67e167735afe6668d710dac92dec6a7 100644 (file)
@@ -32,6 +32,15 @@ MODE_FULL = 'full'
 #
 # Buildbot remote objects:
 #
+#   StatusPerspectiveClient
+#
+#     subscribe()
+#     unsubscribe()
+#     getBuildSets()
+#     getBuilderNames()
+#     getBuilder()
+#     getSlave()
+#
 #   RemoteBuildSet
 #
 #     getSourceStamp()
@@ -124,8 +133,7 @@ class BBModel(pb.Referenceable):
         d = cf.login(creds)
         reactor.connectTCP(host, port, cf)
 
-        d.addCallback(self.connected)
-        d.addErrback(lambda arg: log.err(arg))
+        d.addCallbacks(self.connected, lambda arg: log.err(arg))
 
         log.msg('connecting to %s:%d as %s' % (host, port, username))
 
@@ -135,6 +143,8 @@ class BBModel(pb.Referenceable):
 
         log.msg('connected')
 
+        # Remote reference is a StatusClientPerspective object.
+
         self.remote = ref
         self.remote.notifyOnDisconnect(self.disconnected)
 
@@ -153,8 +163,8 @@ class BBModel(pb.Referenceable):
 
     def remote_builderAdded(self, buildername, builder):
         """Called by the PB server when a builder has been added to the
-        buildbot.  The buildername is the name of the build as a
-        string, and the builder is a remote reference to the builder."""
+        buildbot.  The buildername parameter is the name of the build
+        as a string, and builder is a RemoteBuilder object."""
 
         log.msg('added builder "%s"' % buildername)
 
@@ -165,7 +175,7 @@ class BBModel(pb.Referenceable):
         self.builders[buildername]['builder'] = builder
         self.builders[buildername]['state'] = None
         self.builders[buildername]['builds'] = {}
-        self.builders[buildername]['results'] = {}
+        self.builders[buildername]['result'] = {}
 
     def remote_builderRemoved(self, buildername):
         """Called by the PB server when a builder has been removed from the
@@ -181,8 +191,8 @@ class BBModel(pb.Referenceable):
 
     def remote_buildStarted(self, buildername, build):
         """Called by the PB server when a builder has started a build. The
-        buildername parameter is the name of the build and the build
-        parameter is a remote reference to the build."""
+        buildername parameter is the name of the build as a string,
+        and build is a RemoteBuild object."""
 
         # Add build to model
 
@@ -194,21 +204,23 @@ class BBModel(pb.Referenceable):
 
         buildnum.addCallback(updateModel)
 
-    def remote_builderChangedState(self, buildername, state, eta):
+    def remote_builderChangedState(self, buildername, statename, eta):
         """Called by the PB server when a builder has changed state.  The
         buildername parameter is the name of the build, state is a
         description of the state of the build, and eta is the
-        estimated time until the completion of the build."""
+        estimated time in seconds until the completion of the build."""
 
         log.msg('builder "%s" changed state from "%s" to "%s"' % 
-                (buildername, self.builders[buildername]['state'], state))
+                (buildername, self.builders[buildername]['state'], statename))
 
         # Reflect state change in model
 
-        self.builders[buildername]['state'] = state
+        self.builders[buildername]['state'] = statename
 
-    def remote_buildFinished(self, buildername, build, results):
-        """Called by the PB server when a build has finished."""
+    def remote_buildFinished(self, buildername, build, result):
+        """Called by the PB server when a build has finished.  Buildername is
+        the name of the build, build a RemoteBuild object, and result an
+        integer exit code being the result of the build."""
 
         # Remove from active builds and add results
 
@@ -216,24 +228,30 @@ class BBModel(pb.Referenceable):
 
         def updateModel(num):
 
-            log.msg('build %d finished on "%s"' % (num, buildername))
+            log.msg('build %d finished on "%s", %s' % 
+                    (num, buildername, result))
 
             if self.builders[buildername]['builds'].has_key(num):
                 del(self.builders[buildername]['builds'][num])
 
-            self.builders[buildername]['results'][num] = results
+            self.builders[buildername]['result'][num] = result
 
         buildnum.addCallback(updateModel)
 
     # Subscription mode >= steps
 
     def remote_stepStarted(self, buildername, build, stepname, step):
+        """Called by the PB server when a step in a build is started."""
+
         log.msg('step "%s" started for "%s"' % (stepname, buildername))
 
     def remote_stepFinished(self, buildername, build, stepname, step, results):
+        """Called by the PB server when a step in a build has finished."""
+
         log.msg('step "%s" finished for "%s"' % (stepname, buildername))
 
     def remote_buildETAUpdate(self, buildername, build, eta):
+        """Called by the PB server to update the ETA for the overall build."""
 
         buildnum = build.callRemote('getNumber')
 
@@ -244,6 +262,7 @@ class BBModel(pb.Referenceable):
 
     def remote_stepETAUpdate(self, buildername, build, stepname, step,
                              eta, expectations):
+        """Called by the PB server to update the ETA for a step in a build.""" 
 
         buildnum = build.callRemote('getNumber')
 
@@ -254,7 +273,8 @@ class BBModel(pb.Referenceable):
 
     def remote_logStarted(self, buildername, build, stepname, step,
                           logname, remotelog):
-
+        """Called when the log for a build step is started."""
+        
         buildnum = build.callRemote('getNumber')
 
         def logStart(num):
@@ -265,6 +285,7 @@ class BBModel(pb.Referenceable):
 
     def remote_logFinished(self, buildername, build, stepname, step,
                            logname, remotelog):
+        """Called when the log for a bild step is finished."""
 
         buildnum = build.callRemote('getNumber')
 
@@ -278,6 +299,7 @@ class BBModel(pb.Referenceable):
 
     def remote_logChunk(self, buildername, build, stepname, step, logname,
                         remotelog, channel, text):
+        """Called when some data is available on the log for a build step."""
 
         buildnum = build.callRemote('getNumber')
 
@@ -286,4 +308,3 @@ class BBModel(pb.Referenceable):
             log.msg('>>>%s<<<' % text)
 
         buildnum.addCallback(logChunk)
-