diff options
author | Tiancong Wang <tcwang@google.com> | 2020-02-13 21:08:49 +0000 |
---|---|---|
committer | Tiancong Wang <tcwang@google.com> | 2020-02-13 21:08:49 +0000 |
commit | b75f321fc8978b92ce3db6886ccb966768f0c7a8 (patch) | |
tree | 35fa0fbaeaaddd9cc2a126a05eee3527b51e83a8 /deprecated/automation/server/server.py | |
parent | cddd960b0ba2eb62c372c0d3176c75f0bd05d5e8 (diff) | |
parent | e617e3393dd24003aa976ece5050bb291070041c (diff) | |
download | toolchain-utils-b75f321fc8978b92ce3db6886ccb966768f0c7a8.tar.gz |
Merging 18 commit(s) from Chromium's toolchain-utils am: 0ae38c8498 am: 2a19d36a82 am: e617e3393dr_aml_301500702android-mainline-12.0.0_r55android-mainline-11.0.0_r9android-mainline-11.0.0_r8android-mainline-11.0.0_r7android-mainline-11.0.0_r6android-mainline-11.0.0_r5android-mainline-11.0.0_r45android-mainline-11.0.0_r44android-mainline-11.0.0_r43android-mainline-11.0.0_r42android-mainline-11.0.0_r41android-mainline-11.0.0_r40android-mainline-11.0.0_r4android-mainline-11.0.0_r39android-mainline-11.0.0_r38android-mainline-11.0.0_r37android-mainline-11.0.0_r36android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r33android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r3android-mainline-11.0.0_r29android-mainline-11.0.0_r28android-mainline-11.0.0_r27android-mainline-11.0.0_r26android-mainline-11.0.0_r25android-mainline-11.0.0_r24android-mainline-11.0.0_r23android-mainline-11.0.0_r22android-mainline-11.0.0_r21android-mainline-11.0.0_r20android-mainline-11.0.0_r2android-mainline-11.0.0_r19android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12android-mainline-11.0.0_r10android-mainline-11.0.0_r1android-11.0.0_r48android-11.0.0_r47android-11.0.0_r46android-11.0.0_r45android-11.0.0_r44android-11.0.0_r43android-11.0.0_r42android-11.0.0_r41android-11.0.0_r40android-11.0.0_r39android-11.0.0_r38android-11.0.0_r37android-11.0.0_r36android-11.0.0_r35android-11.0.0_r34android-11.0.0_r33android-11.0.0_r32android-11.0.0_r31android-11.0.0_r30android-11.0.0_r29android-11.0.0_r28android-11.0.0_r27android-11.0.0_r26android-11.0.0_r24android-11.0.0_r23android-11.0.0_r22android-11.0.0_r21android-11.0.0_r20android-11.0.0_r19android-11.0.0_r18android-11.0.0_r16android11-qpr3-s1-releaseandroid11-qpr3-releaseandroid11-qpr2-releaseandroid11-qpr1-s2-releaseandroid11-qpr1-s1-releaseandroid11-qpr1-releaseandroid11-qpr1-d-s1-releaseandroid11-qpr1-d-releaseandroid11-qpr1-c-releaseandroid11-mainline-tethering-releaseandroid11-mainline-sparse-2021-jan-releaseandroid11-mainline-sparse-2020-dec-releaseandroid11-mainline-releaseandroid11-mainline-permission-releaseandroid11-mainline-os-statsd-releaseandroid11-mainline-networkstack-releaseandroid11-mainline-media-swcodec-releaseandroid11-mainline-media-releaseandroid11-mainline-extservices-releaseandroid11-mainline-documentsui-releaseandroid11-mainline-conscrypt-releaseandroid11-mainline-cellbroadcast-releaseandroid11-mainline-captiveportallogin-releaseandroid11-devandroid11-d2-releaseandroid11-d1-b-release
Change-Id: I3f25c7ee034b2e20e37ed941b8eae24eec7043eb
Diffstat (limited to 'deprecated/automation/server/server.py')
-rwxr-xr-x | deprecated/automation/server/server.py | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/deprecated/automation/server/server.py b/deprecated/automation/server/server.py new file mode 100755 index 00000000..c8f22521 --- /dev/null +++ b/deprecated/automation/server/server.py @@ -0,0 +1,125 @@ +#!/usr/bin/python2 +# +# Copyright 2010 Google Inc. All Rights Reserved. + +import logging +import optparse +import pickle +import signal +from SimpleXMLRPCServer import SimpleXMLRPCServer +import sys + +from automation.common import logger +from automation.common.command_executer import CommandExecuter +from automation.server import machine_manager +from automation.server.job_group_manager import JobGroupManager +from automation.server.job_manager import JobManager + + +class Server(object): + """Plays a role of external interface accessible over XMLRPC.""" + + def __init__(self, machines_file=None, dry_run=False): + """Default constructor. + + Args: + machines_file: Path to file storing a list of machines. + dry_run: If True, the server only simulates command execution. + """ + CommandExecuter.Configure(dry_run) + + self.job_manager = JobManager( + machine_manager.MachineManager.FromMachineListFile( + machines_file or machine_manager.DEFAULT_MACHINES_FILE)) + + self.job_group_manager = JobGroupManager(self.job_manager) + + self._logger = logging.getLogger(self.__class__.__name__) + + def ExecuteJobGroup(self, job_group, dry_run=False): + job_group = pickle.loads(job_group) + self._logger.info('Received ExecuteJobGroup(%r, dry_run=%s) request.', + job_group, dry_run) + + for job in job_group.jobs: + job.dry_run = dry_run + return self.job_group_manager.AddJobGroup(job_group) + + def GetAllJobGroups(self): + self._logger.info('Received GetAllJobGroups() request.') + return pickle.dumps(self.job_group_manager.GetAllJobGroups()) + + def KillJobGroup(self, job_group_id): + self._logger.info('Received KillJobGroup(%d) request.', job_group_id) + self.job_group_manager.KillJobGroup(pickle.loads(job_group_id)) + + def GetJobGroup(self, job_group_id): + self._logger.info('Received GetJobGroup(%d) request.', job_group_id) + + return pickle.dumps(self.job_group_manager.GetJobGroup(job_group_id)) + + def GetJob(self, job_id): + self._logger.info('Received GetJob(%d) request.', job_id) + + return pickle.dumps(self.job_manager.GetJob(job_id)) + + def GetMachineList(self): + self._logger.info('Received GetMachineList() request.') + + return pickle.dumps(self.job_manager.machine_manager.GetMachineList()) + + def StartServer(self): + self.job_manager.StartJobManager() + + def StopServer(self): + self.job_manager.StopJobManager() + self.job_manager.join() + + +def GetServerOptions(): + """Get server's settings from command line options.""" + parser = optparse.OptionParser() + parser.add_option('-m', + '--machines-file', + dest='machines_file', + help='The location of the file ' + 'containing the machines database', + default=machine_manager.DEFAULT_MACHINES_FILE) + parser.add_option('-n', + '--dry-run', + dest='dry_run', + help='Start the server in dry-run mode, where jobs will ' + 'not actually be executed.', + action='store_true', + default=False) + return parser.parse_args()[0] + + +def Main(): + logger.SetUpRootLogger(filename='server.log', level=logging.DEBUG) + + options = GetServerOptions() + server = Server(options.machines_file, options.dry_run) + server.StartServer() + + def _HandleKeyboardInterrupt(*_): + server.StopServer() + sys.exit(1) + + signal.signal(signal.SIGINT, _HandleKeyboardInterrupt) + + try: + xmlserver = SimpleXMLRPCServer( + ('localhost', 8000), + allow_none=True, + logRequests=False) + xmlserver.register_instance(server) + xmlserver.serve_forever() + except Exception as ex: + logging.error(ex) + server.StopServer() + sys.exit(1) + + +if __name__ == '__main__': + Main() |