| # Copyright 2015 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Common library methods used by both coordinator and task machines.""" |
| |
| import argparse |
| import logging |
| import os |
| import socket |
| import sys |
| |
| # pylint: disable=relative-import |
| # Import event directly here since it is used to decorate a module-level method. |
| import event |
| |
| LOGGING_LEVELS = ['DEBUG', 'INFO', 'WARNING', 'WARN', 'ERROR'] |
| MY_IP = socket.gethostbyname(socket.gethostname()) |
| DEFAULT_TIMEOUT_SECS = 30 * 60 # 30 minutes |
| THIS_DIR = os.path.dirname(os.path.abspath(__file__)) |
| LEGION_IMPORT_FIX = os.path.join(THIS_DIR, '..', '..') |
| SWARMING_DIR = os.path.join(THIS_DIR, '..', '..', '..', 'tools', |
| 'swarming_client') |
| |
| |
| def InitLogging(): |
| """Initialize the logging module. |
| |
| Raises: |
| argparse.ArgumentError if the --verbosity arg is incorrect. |
| """ |
| parser = argparse.ArgumentParser() |
| logging_action = parser.add_argument('--verbosity', default='INFO') |
| args, _ = parser.parse_known_args() |
| if args.verbosity not in LOGGING_LEVELS: |
| raise argparse.ArgumentError( |
| logging_action, 'Only levels %s supported' % str(LOGGING_LEVELS)) |
| logging.basicConfig( |
| format='%(asctime)s %(filename)s:%(lineno)s %(levelname)s] %(message)s', |
| datefmt='%H:%M:%S', level=args.verbosity) |
| |
| |
| def GetOutputDir(): |
| """Get the isolated output directory specified on the command line.""" |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--output-dir') |
| args, _ = parser.parse_known_args() |
| return args.output_dir |
| |
| |
| def GetUnusedPort(): |
| """Finds and returns an unused port.""" |
| s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| s.bind(('localhost', 0)) |
| _, port = s.getsockname() |
| s.close() |
| return port |
| |
| |
| def SetupEnvironment(): |
| """Perform all environmental setup steps needed.""" |
| InitLogging() |
| sys.path.append(LEGION_IMPORT_FIX) |
| sys.path.append(SWARMING_DIR) |
| |
| |
| def Shutdown(): |
| """Raises the on_shutdown event.""" |
| OnShutdown() |
| |
| |
| @event.Event |
| def OnShutdown(): |
| """Shutdown event dispatcher. |
| |
| To use this simply use the following code example: |
| common_lib.OnShutdown += my_handler_method |
| |
| my_handler_method will be called when OnShutdown is called (this is done via |
| the Shutdown method above, but can be called directly as well. |
| """ |
| pass |
| |