Skip to content

Commit 5206278

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add usage show command"
2 parents 95313d0 + 5761a0f commit 5206278

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)