CLI command "synergy usage show" enhanced
- now it is possible to show the usage by project and user - removed unuseful check in QueueCommand - removed unused var in UsageCommand - removed unused import: 'from synergy_scheduler_manager.common.queue import Queue' Sem-Ver: feature Please enter the commit message for your changes. Lines starting Change-Id: I2ed6304328dcb628fe4662eb6977ce4b988b8a15
This commit is contained in:
parent
3f700fe681
commit
d6e2010abd
@ -1,7 +1,6 @@
|
||||
from synergy.client.command import ExecuteCommand
|
||||
from synergy.client.tabulate import tabulate
|
||||
from synergy_scheduler_manager.common.project import Project
|
||||
from synergy_scheduler_manager.common.queue import Queue
|
||||
from synergy_scheduler_manager.common.quota import SharedQuota
|
||||
from synergy_scheduler_manager.common.user import User
|
||||
|
||||
@ -45,10 +44,6 @@ class QueueCommand(ExecuteCommand):
|
||||
"QueueManager",
|
||||
command,
|
||||
args=cmd_args)
|
||||
|
||||
if not isinstance(queue, Queue):
|
||||
print("wrong data")
|
||||
|
||||
table = []
|
||||
headers = ["name", "size", "is open"]
|
||||
|
||||
@ -157,23 +152,59 @@ class UsageCommand(ExecuteCommand):
|
||||
usage_subparsers = usage_parser.add_subparsers(dest="command")
|
||||
show_parser = usage_subparsers.add_parser("show", add_help=True,
|
||||
help="shows the usage info")
|
||||
group = show_parser.add_mutually_exclusive_group()
|
||||
|
||||
subparsers = show_parser.add_subparsers()
|
||||
parser_a = subparsers.add_parser('project', help='project help')
|
||||
|
||||
group = parser_a.add_mutually_exclusive_group()
|
||||
group.add_argument("-d", "--project_id", metavar="<id>")
|
||||
group.add_argument("-m", "--project_name", metavar="<name>")
|
||||
group.add_argument("-a", "--all_projects", action="store_true")
|
||||
|
||||
parser_b = subparsers.add_parser('user', help='user help')
|
||||
|
||||
group = parser_b.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("-d", "--project_id", metavar="<id>")
|
||||
group.add_argument("-m", "--project_name", metavar="<name>")
|
||||
|
||||
group = parser_b.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("-i", "--user_id", metavar="<id>")
|
||||
group.add_argument("-n", "--user_name", metavar="<name>")
|
||||
group.add_argument("-a", "--all_users", action="store_true")
|
||||
|
||||
group = show_parser.add_mutually_exclusive_group()
|
||||
group.add_argument("-d", "--project_id", metavar="<id>")
|
||||
group.add_argument("-m", "--project_name", metavar="<name>")
|
||||
|
||||
def execute(self, synergy_url, args):
|
||||
if args.command == "show":
|
||||
command = "show"
|
||||
cmd_args = {"user_id": args.user_id,
|
||||
"user_name": args.user_name,
|
||||
"all_users": args.all_users,
|
||||
"project_id": args.project_id,
|
||||
"project_name": args.project_name}
|
||||
user_id = None
|
||||
if hasattr(args, "user_id"):
|
||||
user_id = args.user_id
|
||||
|
||||
user_name = None
|
||||
if hasattr(args, "user_name"):
|
||||
user_name = args.user_name
|
||||
|
||||
all_users = False
|
||||
if hasattr(args, "all_users"):
|
||||
all_users = args.all_users
|
||||
|
||||
project_id = None
|
||||
if hasattr(args, "project_id"):
|
||||
project_id = args.project_id
|
||||
|
||||
project_name = None
|
||||
if hasattr(args, "project_name"):
|
||||
project_name = args.project_name
|
||||
|
||||
all_projects = False
|
||||
if hasattr(args, "all_projects"):
|
||||
all_projects = args.all_projects
|
||||
|
||||
cmd_args = {"user_id": user_id,
|
||||
"user_name": user_name,
|
||||
"all_users": all_users,
|
||||
"project_id": project_id,
|
||||
"project_name": project_name,
|
||||
"all_projects": all_projects}
|
||||
|
||||
result = super(UsageCommand, self).execute(synergy_url,
|
||||
"SchedulerManager",
|
||||
@ -181,18 +212,20 @@ class UsageCommand(ExecuteCommand):
|
||||
args=cmd_args)
|
||||
|
||||
if isinstance(result, Project):
|
||||
self.printProject(result)
|
||||
self.printProjects([result])
|
||||
elif isinstance(result, User):
|
||||
self.printUsers([result])
|
||||
else:
|
||||
self.printUsers(result)
|
||||
elif isinstance(result, list):
|
||||
if all(isinstance(n, Project) for n in result):
|
||||
self.printProjects(result)
|
||||
else:
|
||||
self.printUsers(result)
|
||||
|
||||
def printProject(self, project):
|
||||
if not project:
|
||||
def printProjects(self, projects):
|
||||
if not projects:
|
||||
return
|
||||
|
||||
data = project.getData()
|
||||
share = project.getShare()
|
||||
data = projects[0].getData()
|
||||
date_format = "{:%d %b %Y %H:%M:%S}"
|
||||
from_date = date_format.format(data["time_window_from_date"])
|
||||
to_date = date_format.format(data["time_window_to_date"])
|
||||
@ -202,16 +235,20 @@ class UsageCommand(ExecuteCommand):
|
||||
"share"]
|
||||
|
||||
table = []
|
||||
row = []
|
||||
row.append(project.getName())
|
||||
|
||||
shared = "vcpus: {:.2f}% | memory: {:.2f}%".format(
|
||||
data["effective_vcpus"] * 100, data["effective_memory"] * 100)
|
||||
for project in projects:
|
||||
data = project.getData()
|
||||
share = project.getShare()
|
||||
row = []
|
||||
row.append(project.getName())
|
||||
|
||||
row.append(shared)
|
||||
row.append("{:.2f}%".format(share.getNormalizedValue() * 100))
|
||||
shared = "vcpus: {:.2f}% | memory: {:.2f}%".format(
|
||||
data["effective_vcpus"] * 100, data["effective_memory"] * 100)
|
||||
|
||||
table.append(row)
|
||||
row.append(shared)
|
||||
row.append("{:.2f}%".format(share.getNormalizedValue() * 100))
|
||||
|
||||
table.append(row)
|
||||
|
||||
print(tabulate(table, headers, tablefmt="fancy_grid"))
|
||||
|
||||
@ -223,6 +260,7 @@ class UsageCommand(ExecuteCommand):
|
||||
|
||||
date_format = "{:%d %b %Y %H:%M:%S}"
|
||||
data = users[0].getData()
|
||||
|
||||
from_date = date_format.format(data["time_window_from_date"])
|
||||
to_date = date_format.format(data["time_window_to_date"])
|
||||
|
||||
@ -233,7 +271,9 @@ class UsageCommand(ExecuteCommand):
|
||||
|
||||
for user in users:
|
||||
share = user.getShare()
|
||||
|
||||
data = user.getData()
|
||||
|
||||
priority = user.getPriority()
|
||||
|
||||
row = []
|
||||
|
@ -291,10 +291,14 @@ class SchedulerManager(Manager):
|
||||
usr_id = kargs.get("user_id", None)
|
||||
usr_name = kargs.get("user_name", None)
|
||||
all_users = kargs.get("all_users", False)
|
||||
all_projects = kargs.get("all_projects", False)
|
||||
prj_id = kargs.get("project_id", None)
|
||||
prj_name = kargs.get("project_name", None)
|
||||
project = None
|
||||
|
||||
if all_projects:
|
||||
return self.projects.values()
|
||||
|
||||
if (usr_id is not None or usr_name is not None or all_users) and \
|
||||
prj_id is None and prj_name is None:
|
||||
raise Exception("project id or name not defined!")
|
||||
@ -312,7 +316,7 @@ class SchedulerManager(Manager):
|
||||
|
||||
if not project:
|
||||
raise Exception("project (name=%r) not found!" % prj_name)
|
||||
else:
|
||||
elif not all_users:
|
||||
return self.projects.values()
|
||||
|
||||
if usr_id or usr_name:
|
||||
|
Loading…
x
Reference in New Issue
Block a user