diff options
| author | Jenkins <jenkins@review.openstack.org> | 2014-07-11 18:22:06 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2014-07-11 18:22:06 +0000 |
| commit | bc6495c6a19abb67a9af9bc94e82e6c12b1a7b83 (patch) | |
| tree | 367c6f6c359ebed491cefae63ceabf8ddbe55093 /openstackclient/shell.py | |
| parent | 70283744a04f868072edc0a31fe49a3122c4bc6e (diff) | |
| parent | 4844a257790deef231176557776754dde929f840 (diff) | |
| download | python-openstackclient-bc6495c6a19abb67a9af9bc94e82e6c12b1a7b83.tar.gz | |
Merge "Add basic timing support"
Diffstat (limited to 'openstackclient/shell.py')
| -rw-r--r-- | openstackclient/shell.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/openstackclient/shell.py b/openstackclient/shell.py index 1d0c5771..28724343 100644 --- a/openstackclient/shell.py +++ b/openstackclient/shell.py @@ -32,6 +32,7 @@ from openstackclient.common import clientmanager from openstackclient.common import commandmanager from openstackclient.common import exceptions as exc from openstackclient.common import restapi +from openstackclient.common import timing from openstackclient.common import utils from openstackclient.identity import client as identity_client @@ -60,6 +61,7 @@ class OpenStackShell(app.App): CONSOLE_MESSAGE_FORMAT = '%(levelname)s: %(name)s %(message)s' log = logging.getLogger(__name__) + timing_data = [] def __init__(self): # Patch command.Command to add a default auth_required = True @@ -303,6 +305,12 @@ class OpenStackShell(app.App): metavar='<url>', default=env('OS_URL'), help='Defaults to env[OS_URL]') + parser.add_argument( + '--timing', + default=False, + action='store_true', + help="Print API call timing info", + ) parser.add_argument( '--os-identity-api-version', @@ -410,6 +418,7 @@ class OpenStackShell(app.App): password=self.options.os_password, region_name=self.options.os_region_name, verify=self.verify, + timing=self.options.timing, api_version=self.api_version, trust_id=self.options.os_trust_id, ) @@ -499,9 +508,33 @@ class OpenStackShell(app.App): def clean_up(self, cmd, result, err): self.log.debug('clean_up %s', cmd.__class__.__name__) + if err: self.log.debug('got an error: %s', err) + # Process collected timing data + if self.options.timing: + # Loop through extensions + for mod in self.ext_modules: + client = getattr(self.client_manager, mod.API_NAME) + if hasattr(client, 'get_timings'): + self.timing_data.extend(client.get_timings()) + + # Use the Timing pseudo-command to generate the output + tcmd = timing.Timing(self, self.options) + tparser = tcmd.get_parser('Timing') + + # If anything other than prettytable is specified, force csv + format = 'table' + # Check the formatter used in the actual command + if hasattr(cmd, 'formatter') \ + and cmd.formatter != cmd._formatter_plugins['table'].obj: + format = 'csv' + + sys.stdout.write('\n') + targs = tparser.parse_args(['-f', format]) + tcmd.run(targs) + def interact(self): # NOTE(dtroyer): Maintain the old behaviour for interactive use as # this path does not call prepare_to_run_command() |
