Skip to content

Commit 5761a0f

Browse files
author
Steve Martinelli
committed
Add usage show command
Should show basic usage by project id, if not specified then use the project id the user is authN'ing with. Change-Id: I0284a5efd84075b18e1a7117cc9f8f7fecf16274 Closes-Bug: #1400796
1 parent 6e3c9a3 commit 5761a0f

2 files changed

Lines changed: 76 additions & 0 deletions

File tree

‎openstackclient/compute/v2/usage.py‎

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import sys
2121

2222
from cliff import lister
23+
from cliff import show
24+
import six
2325

2426
from openstackclient.common import utils
2527

@@ -114,3 +116,75 @@ def _format_project(project):
114116
'total_local_gb_usage': lambda x: float("%.2f" % x),
115117
},
116118
) for s in usage_list))
119+
120+
121+
class ShowUsage(show.ShowOne):
122+
"""Show resource usage for a single project. """
123+
124+
log = logging.getLogger(__name__ + ".ShowUsage")
125+
126+
def get_parser(self, prog_name):
127+
parser = super(ShowUsage, self).get_parser(prog_name)
128+
parser.add_argument(
129+
"--start",
130+
metavar="<start>",
131+
default=None,
132+
help="Usage range start date, ex 2012-01-20"
133+
" (default: 4 weeks ago)."
134+
)
135+
parser.add_argument(
136+
"--end",
137+
metavar="<end>",
138+
default=None,
139+
help="Usage range end date, ex 2012-01-20 (default: tomorrow)."
140+
)
141+
parser.add_argument(
142+
"--project",
143+
metavar="<project>",
144+
default=None,
145+
help="Name or ID of project to show usage for."
146+
)
147+
return parser
148+
149+
def take_action(self, parsed_args):
150+
self.log.debug("take_action(%s)", parsed_args)
151+
152+
identity_client = self.app.client_manager.identity
153+
compute_client = self.app.client_manager.compute
154+
dateformat = "%Y-%m-%d"
155+
now = datetime.datetime.utcnow()
156+
157+
if parsed_args.start:
158+
start = datetime.datetime.strptime(parsed_args.start, dateformat)
159+
else:
160+
start = now - datetime.timedelta(weeks=4)
161+
162+
if parsed_args.end:
163+
end = datetime.datetime.strptime(parsed_args.end, dateformat)
164+
else:
165+
end = now + datetime.timedelta(days=1)
166+
167+
if parsed_args.project:
168+
project = utils.find_resource(
169+
identity_client.projects,
170+
parsed_args.project,
171+
).id
172+
else:
173+
# Get the project from the current auth
174+
project = self.app.client_manager.auth_ref.project_id
175+
176+
usage = compute_client.usage.get(project, start, end)
177+
178+
if parsed_args.formatter == 'table':
179+
sys.stdout.write("Usage from %s to %s on project %s: \n" % (
180+
start.strftime(dateformat),
181+
end.strftime(dateformat),
182+
project
183+
))
184+
185+
info = {}
186+
info['Servers'] = len(usage.server_usages)
187+
info['RAM MB-Hours'] = float("%.2f" % usage.total_memory_mb_usage)
188+
info['CPU Hours'] = float("%.2f" % usage.total_vcpus_usage)
189+
info['Disk GB-Hours'] = float("%.2f" % usage.total_local_gb_usage)
190+
return zip(*sorted(six.iteritems(info)))

‎setup.cfg‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ openstack.compute.v2 =
131131
server_unrescue = openstackclient.compute.v2.server:UnrescueServer
132132
server_unset = openstackclient.compute.v2.server:UnsetServer
133133

134+
usage_show = openstackclient.compute.v2.usage:ShowUsage
135+
134136
openstack.identity.v2 =
135137
catalog_list = openstackclient.identity.v2_0.catalog:ListCatalog
136138
catalog_show = openstackclient.identity.v2_0.catalog:ShowCatalog

0 commit comments

Comments
 (0)