Index: infra_libs/app.py |
diff --git a/infra_libs/app.py b/infra_libs/app.py |
deleted file mode 100644 |
index b04a98bf25e0e99c6b63e6735b8b365180748bc0..0000000000000000000000000000000000000000 |
--- a/infra_libs/app.py |
+++ /dev/null |
@@ -1,136 +0,0 @@ |
-# 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. |
- |
-import argparse |
-import datetime |
-import logging |
-import os |
-import sys |
- |
-import psutil |
- |
-from infra_libs import logs |
-from infra_libs import ts_mon |
- |
- |
-class BaseApplication(object): |
- """Encapsulates common boilerplate for setting up an application. |
- |
- Subclasses must implement the main() method, and will usually also implement |
- add_argparse_options(). |
- |
- By default this will initialise logging and timeseries monitoring (ts_mon) |
- modules. |
- |
- Minimal example:: |
- |
- import infra_libs |
- |
- class MyApplication(infra_libs.BaseApplication): |
- def main(self, opts): |
- # Do stuff. |
- |
- if __name__ == '__main__': |
- MyApplication().run() |
- |
- Class variables (override these in your class definition): |
- PROG_NAME: The program name to display in the --help message. Defaults to |
- sys.argv[0]. Passed to argparse.ArgumentParser. |
- DESCRIPTION: Text to display in the --help message. Passed to |
- argparse.ArgumentParser. |
- USES_STANDARD_LOGGING: Whether to configure the standard logging libraries. |
- Defaults to True. |
- USES_TS_MON: Whether to configure timeseries monitoring. Defaults to True. |
- |
- Instance variables (use these in your application): |
- opts: The argparse.Namespace containing parsed commandline arguments. |
- """ |
- |
- PROG_NAME = None |
- DESCRIPTION = None |
- USES_STANDARD_LOGGING = True |
- USES_TS_MON = True |
- |
- def __init__(self): |
- self.opts = None |
- self.parser = None |
- |
- def add_argparse_options(self, parser): |
- """Register any arguments used by this application. |
- |
- Override this method and call parser.add_argument(). |
- |
- Args: |
- parser: An argparse.ArgumentParser object. |
- """ |
- |
- if self.USES_STANDARD_LOGGING: |
- logs.add_argparse_options(parser) |
- if self.USES_TS_MON: |
- ts_mon.add_argparse_options(parser) |
- |
- def process_argparse_options(self, options): |
- """Process any commandline arguments. |
- |
- Args: |
- options: An argparse.Namespace object. |
- """ |
- |
- if self.USES_STANDARD_LOGGING: |
- logs.process_argparse_options(options) |
- if self.USES_TS_MON: |
- ts_mon.process_argparse_options(options) |
- |
- def main(self, opts): |
- """Your application's main method. |
- |
- Do the work of your application here. When this method returns the |
- application will exit. |
- |
- Args: |
- opts: An argparse.Namespace containing parsed commandline options. This |
- is passed as an argument for convenience but is also accessible as an |
- instance variable (self.opts). |
- |
- Return: |
- An integer exit status, or None to use an exit status of 0. |
- """ |
- raise NotImplementedError |
- |
- def run(self, args=None): |
- """Main application entry point.""" |
- |
- if args is None: # pragma: no cover |
- args = sys.argv |
- |
- # Add and parse commandline args. |
- self.parser = argparse.ArgumentParser( |
- description=self.DESCRIPTION, |
- prog=self.PROG_NAME or args[0], |
- formatter_class=argparse.RawTextHelpFormatter) |
- |
- self.add_argparse_options(self.parser) |
- self.opts = self.parser.parse_args(args[1:]) |
- self.process_argparse_options(self.opts) |
- |
- # Print a startup log message. |
- logging.info('Process started at %s', datetime.datetime.utcfromtimestamp( |
- psutil.Process().create_time()).isoformat()) |
- logging.info('Command line arguments:') |
- for index, arg in enumerate(sys.argv): |
- logging.info('argv[%d]: %s', index, arg) |
- logging.info('Process id %d', os.getpid()) |
- logging.info('Current working directory %s', os.getcwd()) |
- |
- # Run the application's main function. |
- try: |
- status = self.main(self.opts) |
- except Exception: |
- logging.exception('Uncaught exception, exiting:') |
- if self.USES_TS_MON: |
- # Flushing ts_mon to try to report the exception. |
- ts_mon.flush() |
- status = 1 |
- |
- sys.exit(status) |