From d6e2010abd4e513f4de59adeb29a6df9efa8664c Mon Sep 17 00:00:00 2001 From: Lisa Zangrando Date: Wed, 9 Nov 2016 12:32:07 +0100 Subject: [PATCH] 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 --- synergy_scheduler_manager/client/command.py | 98 +++++++++++++------ .../scheduler_manager.py | 6 +- 2 files changed, 74 insertions(+), 30 deletions(-) diff --git a/synergy_scheduler_manager/client/command.py b/synergy_scheduler_manager/client/command.py index e96d46c..fa54950 100644 --- a/synergy_scheduler_manager/client/command.py +++ b/synergy_scheduler_manager/client/command.py @@ -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="") + group.add_argument("-m", "--project_name", metavar="") + 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="") + group.add_argument("-m", "--project_name", metavar="") + + group = parser_b.add_mutually_exclusive_group(required=True) group.add_argument("-i", "--user_id", metavar="") group.add_argument("-n", "--user_name", metavar="") group.add_argument("-a", "--all_users", action="store_true") - group = show_parser.add_mutually_exclusive_group() - group.add_argument("-d", "--project_id", metavar="") - group.add_argument("-m", "--project_name", metavar="") - 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 = [] diff --git a/synergy_scheduler_manager/scheduler_manager.py b/synergy_scheduler_manager/scheduler_manager.py index 10d60b0..254757c 100644 --- a/synergy_scheduler_manager/scheduler_manager.py +++ b/synergy_scheduler_manager/scheduler_manager.py @@ -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: