def main(args): parser = optparse.OptionParser( description=sys.modules[__name__].__doc__, version=__version__) parser.add_option('--file', help='Name of the request file') parser.add_option( '--swarming-server', help='Swarming server to send data back') parser.add_option( '--cost-usd-hour', type='float', help='Cost of this VM in $/h') parser.add_option('--start', type='float', help='Time this task was started') options, args = parser.parse_args(args) if not options.file: parser.error('You must provide the request file name.') if args: parser.error('Unknown args: %s' % args) on_error.report_on_exception_exit(options.swarming_server) logging.info('starting') remote = xsrf_client.XsrfRemote(options.swarming_server) now = monotonic_time() if options.start > now: options.start = now try: if not load_and_run( options.file, remote, options.cost_usd_hour, options.start): return TASK_FAILED return 0 finally: logging.info('quitting')
def main(args): parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) parser.add_option('--in-file', help='Name of the request file') parser.add_option('--out-file', help='Name of the JSON file to write a task summary to') parser.add_option('--swarming-server', help='Swarming server to send data back') parser.add_option('--cost-usd-hour', type='float', help='Cost of this VM in $/h') parser.add_option('--start', type='float', help='Time this task was started') options, args = parser.parse_args(args) if not options.in_file or not options.out_file or args: parser.error('task_runner is meant to be used by swarming_bot.') on_error.report_on_exception_exit(options.swarming_server) logging.info('starting') remote = xsrf_client.XsrfRemote(options.swarming_server) now = monotonic_time() if options.start > now: options.start = now try: load_and_run(options.in_file, remote, options.cost_usd_hour, options.start, options.out_file) return 0 finally: logging.info('quitting')
def main(args): parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) parser.add_option('--in-file', help='Name of the request file') parser.add_option( '--out-file', help='Name of the JSON file to write a task summary to') parser.add_option( '--swarming-server', help='Swarming server to send data back') parser.add_option( '--cost-usd-hour', type='float', help='Cost of this VM in $/h') parser.add_option('--start', type='float', help='Time this task was started') options, args = parser.parse_args(args) if not options.in_file or not options.out_file or args: parser.error('task_runner is meant to be used by swarming_bot.') on_error.report_on_exception_exit(options.swarming_server) logging.info('starting') remote = xsrf_client.XsrfRemote(options.swarming_server) now = monotonic_time() if options.start > now: options.start = now try: load_and_run( options.in_file, remote, options.cost_usd_hour, options.start, options.out_file) return 0 finally: logging.info('quitting')
def parse_args(self, *args, **kwargs): options, args = tools.OptionParserWithLogging.parse_args( self, *args, **kwargs) options.service = options.service.rstrip('/') if not options.service: self.error('--service is required.') on_error.report_on_exception_exit(options.service) return options, args
def test_report(self): url = 'https://localhost/' on_error.report_on_exception_exit(url) self.assertEqual([on_error._check_for_exception_on_exit], self._atexit) self.assertEqual('https://localhost', on_error._SERVER.urlhost) self.assertEqual(self.HOSTNAME, on_error._HOSTNAME) with self.assertRaises(ValueError): on_error.report_on_exception_exit(url)
def get_remote(): """Return a XsrfRemote instance to the preconfigured server.""" global _ERROR_HANDLER_WAS_REGISTERED config = get_config() server = config['server'] if not _ERROR_HANDLER_WAS_REGISTERED: on_error.report_on_exception_exit(server) _ERROR_HANDLER_WAS_REGISTERED = True return xsrf_client.XsrfRemote(server, '/swarming/api/v1/bot/handshake')
def parse_args(self, *args, **kwargs): options, args = logging_utils.OptionParserWithLogging.parse_args( self, *args, **kwargs) if not options.service: self.error('--service is required.') try: options.service = normalize_host_url(options.service) except ValueError as exc: self.error(str(exc)) on_error.report_on_exception_exit(options.service) return options, args
def get_config(): """Returns the data from config.json.""" global _ERROR_HANDLER_WAS_REGISTERED with contextlib.closing(zipfile.ZipFile(THIS_FILE, 'r')) as f: config = json.load(f.open('config/config.json', 'r')) server = config.get('server', '') if not _ERROR_HANDLER_WAS_REGISTERED and server: on_error.report_on_exception_exit(server) _ERROR_HANDLER_WAS_REGISTERED = True return config
def _process_swarming(self, options): """Processes the --swarming option and aborts if not specified. Returns the identity as determined by the server. """ if not options.swarming: self.error('--swarming is required.') try: options.swarming = net.fix_url(options.swarming) except ValueError as e: self.error('--swarming %s' % e) on_error.report_on_exception_exit(options.swarming) try: user = auth.ensure_logged_in(options.swarming) except ValueError as e: self.error(str(e)) return user
def main(args): subprocess42.inhibit_os_error_reporting() # Disable magical auto-detection of OAuth config. See main() in bot_main.py # for detailed explanation why. net.disable_oauth_config() parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) parser.add_option('--in-file', help='Name of the request file') parser.add_option( '--out-file', help='Name of the JSON file to write a task summary to') parser.add_option( '--swarming-server', help='Swarming server to send data back') parser.add_option( '--is-grpc', action='store_true', help='If true, --swarming-server is a gRPC proxy') parser.add_option( '--cost-usd-hour', type='float', help='Cost of this VM in $/h') parser.add_option('--start', type='float', help='Time this task was started') parser.add_option( '--bot-file', help='Path to a file describing the state of the host.') parser.add_option( '--auth-params-file', help='Path to a file with bot authentication parameters') options, args = parser.parse_args(args) if not options.in_file or not options.out_file: parser.error('task_runner is meant to be used by swarming_bot.') on_error.report_on_exception_exit(options.swarming_server) logging.info('starting') now = monotonic_time() if options.start > now: options.start = now try: load_and_run( options.in_file, options.swarming_server, options.is_grpc, options.cost_usd_hour, options.start, options.out_file, args, options.bot_file, options.auth_params_file) return 0 finally: logging.info('quitting')
def main(args): subprocess42.inhibit_os_error_reporting() parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) parser.add_option('--in-file', help='Name of the request file') parser.add_option('--out-file', help='Name of the JSON file to write a task summary to') parser.add_option('--swarming-server', help='Swarming server to send data back') parser.add_option('--cost-usd-hour', type='float', help='Cost of this VM in $/h') parser.add_option('--start', type='float', help='Time this task was started') parser.add_option('--min-free-space', type='int', help='Value to send down to run_isolated') parser.add_option('--bot-file', help='Path to a file describing the state of the host.') parser.add_option('--auth-params-file', help='Path to a file with bot authentication parameters') options, args = parser.parse_args(args) if not options.in_file or not options.out_file or args: parser.error('task_runner is meant to be used by swarming_bot.') on_error.report_on_exception_exit(options.swarming_server) logging.info('starting') now = monotonic_time() if options.start > now: options.start = now try: load_and_run(options.in_file, options.swarming_server, options.cost_usd_hour, options.start, options.out_file, options.min_free_space, options.bot_file, options.auth_params_file) return 0 finally: logging.info('quitting')
def main(args): parser = optparse.OptionParser(description=sys.modules[__name__].__doc__, version=__version__) parser.add_option('--file', help='Name of the request file') parser.add_option('--swarming-server', help='Swarming server to send data back') parser.add_option('--cost-usd-hour', type='float', help='Cost of this VM in $/h') parser.add_option('--start', type='float', help='Time this task was started') parser.add_option('--json-file', help='Name of the JSON file to write a task summary to') options, args = parser.parse_args(args) if not options.file: parser.error('You must provide the request file name.') if args: parser.error('Unknown args: %s' % args) on_error.report_on_exception_exit(options.swarming_server) logging.info('starting') remote = xsrf_client.XsrfRemote(options.swarming_server) now = monotonic_time() if options.start > now: options.start = now try: if not load_and_run(options.file, remote, options.cost_usd_hour, options.start, options.json_file): return TASK_FAILED return 0 finally: logging.info('quitting')
def run_shell_out(url, mode): # Enable 'report_on_exception_exit' even though main file is *_test.py. on_error._is_in_test = lambda: False # Hack it out so registering works. on_error._ENABLED_DOMAINS = (socket.getfqdn(),) # Don't try to authenticate into localhost. on_error.net.OAuthAuthenticator = lambda *_: None if not on_error.report_on_exception_exit(url): print 'Failure to register the handler' return 1 # Hack out certificate verification because we are using a self-signed # certificate here. In practice, the SSL certificate is signed to guard # against MITM attacks. on_error._SERVER.engine.session.verify = False if mode == 'crash': # Sadly, net is a bit overly verbose, which breaks # test_shell_out_crash_server_down. logging.error = lambda *_, **_kwargs: None logging.warning = lambda *_, **_kwargs: None raise ValueError('Oops') if mode == 'report': # Generate a manual report without an exception frame. Also set the version # value. setattr(sys.modules['__main__'], '__version__', '123') on_error.report('Oh dang') if mode == 'exception': # Report from inside an exception frame. try: raise TypeError('You are not my type') except TypeError: on_error.report('Really') if mode == 'exception_no_msg': # Report from inside an exception frame. try: raise TypeError('You are not my type #2') except TypeError: on_error.report(None) return 0
def test_no_http(self): # http:// url are denied. url = 'http://localhost/' self.assertIs(False, on_error.report_on_exception_exit(url)) self.assertEqual([], self._atexit)