summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-12-31 00:02:11 +0000
committerGerrit Code Review <review@openstack.org>2014-12-31 00:02:11 +0000
commit5206278992c3d24c2f95bfdf366993369c186341 (patch)
tree53c761e6cf384d9f0e05a4894770c6cfbec78b4b
parent95313d0a2d4cbf35a002a3662286559af8981c5f (diff)
parent5761a0f0b75277140c081ab61b7f3c41edc82e31 (diff)
downloadpython-openstackclient-5206278992c3d24c2f95bfdf366993369c186341.tar.gz
Merge "Add usage show command"
-rw-r--r--openstackclient/compute/v2/usage.py74
-rw-r--r--setup.cfg2
2 files changed, 76 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)))
diff --git a/setup.cfg b/setup.cfg
index 02b7751d..9a92140a 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -131,6 +131,8 @@ openstack.compute.v2 =
server_unrescue = openstackclient.compute.v2.server:UnrescueServer
server_unset = openstackclient.compute.v2.server:UnsetServer
+ usage_show = openstackclient.compute.v2.usage:ShowUsage
+
openstack.identity.v2 =
catalog_list = openstackclient.identity.v2_0.catalog:ListCatalog
catalog_show = openstackclient.identity.v2_0.catalog:ShowCatalog