diff options
Diffstat (limited to 'distbuild/initiator_connection.py')
-rw-r--r-- | distbuild/initiator_connection.py | 64 |
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)', |