summaryrefslogtreecommitdiff
path: root/distbuild/initiator.py
diff options
context:
space:
mode:
Diffstat (limited to 'distbuild/initiator.py')
-rw-r--r--distbuild/initiator.py60
1 files changed, 57 insertions, 3 deletions
diff --git a/distbuild/initiator.py b/distbuild/initiator.py
index 48299a3d..eee25313 100644
--- a/distbuild/initiator.py
+++ b/distbuild/initiator.py
@@ -19,7 +19,7 @@ import cliapp
import itertools
import logging
import os
-import random
+import uuid
import time
import distbuild
@@ -92,7 +92,7 @@ class Initiator(distbuild.StateMachine):
]
self.add_transitions(spec)
- random_id = random.randint(0, 2**32-1)
+ msg_uuid = uuid.uuid4().hex
self._app.status(
msg='Requesting build of %(repo)s %(ref)s %(morph)s',
@@ -100,7 +100,7 @@ class Initiator(distbuild.StateMachine):
ref=self._ref,
morph=self._morphology)
msg = distbuild.message('build-request',
- id=random_id,
+ id=msg_uuid,
repo=self._repo_name,
ref=self._ref,
morphology=self._morphology,
@@ -247,3 +247,57 @@ class Initiator(distbuild.StateMachine):
f.close()
self._step_outputs = {}
+
+
+class InitiatorListJobs(distbuild.StateMachine):
+
+ def __init__(self, cm, conn, app):
+ distbuild.StateMachine.__init__(self, 'waiting')
+ self._cm = cm
+ self._conn = conn
+ self._app = app
+
+ def setup(self):
+ distbuild.crash_point()
+
+ self._jm = distbuild.JsonMachine(self._conn)
+ self.mainloop.add_state_machine(self._jm)
+ logging.debug('initiator: _jm=%s' % repr(self._jm))
+
+ spec = [
+ # state, source, event_class, new_state, callback
+ ('waiting', self._jm, distbuild.JsonEof, None, self._terminate),
+ ('waiting', self._jm, distbuild.JsonNewMessage, None,
+ self._handle_json_message),
+ ]
+ self.add_transitions(spec)
+
+ msg_uuid = uuid.uuid4().hex
+
+ self._app.status(msg='Requesting currently running distbuilds.')
+ msg = distbuild.message('list-requests',
+ id=msg_uuid,
+ )
+ self._jm.send(msg)
+ logging.debug('Initiator: sent to controller: %s', repr(msg))
+
+ def _handle_json_message(self, event_source, event):
+ distbuild.crash_point()
+
+ logging.debug('Initiator: from controller: %s', str(event.msg))
+
+ handlers = {
+ 'list-request-output': self._handle_list_request_output,
+ }
+
+ handler = handlers[event.msg['type']]
+ handler(event.msg)
+
+ def _handle_list_request_output(self, msg):
+ self._app.status(msg=str(msg['message']))
+ self.mainloop.queue_event(self._cm, distbuild.StopConnecting())
+ self._jm.close()
+
+ def _terminate(self, event_source, event):
+ self.mainloop.queue_event(self._cm, distbuild.StopConnecting())
+ self._jm.close()