diff options
author | Lauren Perry <lauren.perry@codethink.co.uk> | 2015-03-30 12:32:58 +0100 |
---|---|---|
committer | Baserock Gerrit <gerrit@baserock.org> | 2015-04-17 08:41:58 +0000 |
commit | ab92ce0343b838b336313f604ea035a60dfcb960 (patch) | |
tree | 945fd98350ba347ca8c2e326670cdfe5f039b765 /distbuild/initiator_connection.py | |
parent | 1c125ade7e19d1f92b49ad010ff4a9ec3faa36e4 (diff) | |
download | morph-ab92ce0343b838b336313f604ea035a60dfcb960.tar.gz |
distbuild: Add distbuild-list-jobs function
Add InitiatorListJobs class and list-jobs message template, add
distbuild-list-jobs to morph commandlist, send running job
information back to initiator, split out handling of build request
and list-jobs messages to separate functions and change generating
a random integer to UUID for message identification
Change-Id: Id02604f2c1201dbc10f6bbd7f501b8ce1ce0deae
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)', |