diff options
| author | Jenkins <jenkins@review.openstack.org> | 2014-12-31 00:02:11 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2014-12-31 00:02:11 +0000 |
| commit | 5206278992c3d24c2f95bfdf366993369c186341 (patch) | |
| tree | 53c761e6cf384d9f0e05a4894770c6cfbec78b4b /openstackclient | |
| parent | 95313d0a2d4cbf35a002a3662286559af8981c5f (diff) | |
| parent | 5761a0f0b75277140c081ab61b7f3c41edc82e31 (diff) | |
| download | python-openstackclient-5206278992c3d24c2f95bfdf366993369c186341.tar.gz | |
Merge "Add usage show command"
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/compute/v2/usage.py | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/openstackclient/compute/v2/usage.py b/openstackclient/compute/v2/usage.py index 05d6038f..c71ecb18 100644 --- a/openstackclient/compute/v2/usage.py +++ b/openstackclient/compute/v2/usage.py @@ -20,6 +20,8 @@ import logging import sys from cliff import lister +from cliff import show +import six from openstackclient.common import utils @@ -114,3 +116,75 @@ class ListUsage(lister.Lister): 'total_local_gb_usage': lambda x: float("%.2f" % x), }, ) for s in usage_list)) + + +class ShowUsage(show.ShowOne): + """Show resource usage for a single project. """ + + log = logging.getLogger(__name__ + ".ShowUsage") + + def get_parser(self, prog_name): + parser = super(ShowUsage, self).get_parser(prog_name) + parser.add_argument( + "--start", + metavar="<start>", + default=None, + help="Usage range start date, ex 2012-01-20" + " (default: 4 weeks ago)." + ) + parser.add_argument( + "--end", + metavar="<end>", + default=None, + help="Usage range end date, ex 2012-01-20 (default: tomorrow)." + ) + parser.add_argument( + "--project", + metavar="<project>", + default=None, + help="Name or ID of project to show usage for." + ) + return parser + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + + identity_client = self.app.client_manager.identity + compute_client = self.app.client_manager.compute + dateformat = "%Y-%m-%d" + now = datetime.datetime.utcnow() + + if parsed_args.start: + start = datetime.datetime.strptime(parsed_args.start, dateformat) + else: + start = now - datetime.timedelta(weeks=4) + + if parsed_args.end: + end = datetime.datetime.strptime(parsed_args.end, dateformat) + else: + end = now + datetime.timedelta(days=1) + + if parsed_args.project: + project = utils.find_resource( + identity_client.projects, + parsed_args.project, + ).id + else: + # Get the project from the current auth + project = self.app.client_manager.auth_ref.project_id + + usage = compute_client.usage.get(project, start, end) + + if parsed_args.formatter == 'table': + sys.stdout.write("Usage from %s to %s on project %s: \n" % ( + start.strftime(dateformat), + end.strftime(dateformat), + project + )) + + info = {} + info['Servers'] = len(usage.server_usages) + info['RAM MB-Hours'] = float("%.2f" % usage.total_memory_mb_usage) + info['CPU Hours'] = float("%.2f" % usage.total_vcpus_usage) + info['Disk GB-Hours'] = float("%.2f" % usage.total_local_gb_usage) + return zip(*sorted(six.iteritems(info))) |
