summaryrefslogtreecommitdiff
path: root/distbuild/initiator_connection.py
diff options
context:
space:
mode:
Diffstat (limited to 'distbuild/initiator_connection.py')
-rw-r--r--distbuild/initiator_connection.py64
1 files changed, 44 insertions, 20 deletions
diff --git a/distbuild/initiator_connection.py b/distbuild/initiator_connection.py
index 8d6c1f4c..54322f6a 100644
--- a/distbuild/initiator_connection.py
+++ b/distbuild/initiator_connection.py
@@ -99,30 +99,54 @@ class InitiatorConnection(distbuild.StateMachine):
try:
if event.msg['type'] == 'build-request':
- if (event.msg.get('protocol_version') !=
- distbuild.protocol.VERSION):
- msg = distbuild.message('build-failed',
- id=event.msg['id'],
- reason=('Protocol version mismatch between server & '
- 'initiator: distbuild network uses distbuild '
- 'protocol version %i, but client uses version'
- ' %i.' % (distbuild.protocol.VERSION,
- event.msg.get('protocol_version'))))
- self.jm.send(msg)
- self._log_send(msg)
- return
- new_id = self._idgen.next()
- self.our_ids.add(new_id)
- self._route_map.add(event.msg['id'], new_id)
- event.msg['id'] = new_id
- build_controller = distbuild.BuildController(
- self, event.msg, self.artifact_cache_server,
- self.morph_instance)
- self.mainloop.add_state_machine(build_controller)
+ self._handle_build_request(event)
+ elif event.msg['type'] == 'list-requests':
+ self._handle_list_requests(event)
+ else:
+ logging.error('Invalid message type: %s', event.msg)
except (KeyError, ValueError) as ex:
logging.error('Invalid message from initiator: %s: exception %s',
event.msg, ex)
+ def _handle_build_request(self, event):
+ if event.msg.get('protocol_version') != distbuild.protocol.VERSION:
+ msg = distbuild.message('build-failed',
+ id=event.msg['id'],
+ reason=('Protocol version mismatch between server & initiator:'
+ ' distbuild network uses distbuild protocol version %i'
+ ', but client uses version %i.' % (
+ distbuild.protocol.VERSION,
+ event.msg.get('protocol_version'))))
+ self.jm.send(msg)
+ self._log_send(msg)
+ return
+ new_id = self._idgen.next()
+ self.our_ids.add(new_id)
+ self._route_map.add(event.msg['id'], new_id)
+ event.msg['id'] = new_id
+ build_controller = distbuild.BuildController(
+ self, event.msg, self.artifact_cache_server,
+ self.morph_instance)
+ self.mainloop.add_state_machine(build_controller)
+
+ def _handle_list_requests(self, event):
+ requests = self.mainloop.state_machines_of_type(
+ distbuild.BuildController)
+ output_msg = []
+ output_msg.append('%s distbuild requests(s) currently in progress' %
+ len(requests))
+ for build in requests:
+ output_msg.append('Build request ID: %s\n Initiator: %s\n Repo: '
+ '%s\n Ref: %s\n Component: %s'
+ % (build.get_request()['id'],
+ build.get_initiator_connection().initiator_name,
+ build.get_request()['repo'],
+ build.get_request()['ref'],
+ build.get_request()['morphology']))
+ msg = distbuild.message('list-request-output',
+ message=('\n\n'.join(output_msg)))
+ self.jm.send(msg)
+
def _disconnect(self, event_source, event):
for id in self.our_ids:
logging.debug('InitiatorConnection: %s: InitiatorDisconnect(%s)',