From f803d05f73635e0de811bafbc45d7e60c6bd8ebd Mon Sep 17 00:00:00 2001 From: Vijendar Komalla Date: Mon, 19 Oct 2015 15:12:24 -0500 Subject: [PATCH] Connecting app logs to workflow Changing the solumclient to get logs from workflow resource instead of assembly resource. Change-Id: Idf899d99bf5cd71128304446035107ab6f6d4f0f Closes-Bug: #1498181 --- solumclient/solum.py | 39 ++++++++++++++++++++++++++++++++++++++ solumclient/v1/workflow.py | 21 ++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/solumclient/solum.py b/solumclient/solum.py index 036dbae..453a8fe 100644 --- a/solumclient/solum.py +++ b/solumclient/solum.py @@ -980,6 +980,9 @@ Available commands: solum workflow show Print the details of a workflow. + + solum workflow logs + List all the logs of a given workflow. """ def list(self): @@ -1012,6 +1015,42 @@ Available commands: 'source', 'id', 'created_at', 'updated_at', 'status'] self._print_dict(wf, fields, wrap=72) + def logs(self): + """Get Logs.""" + self.parser.add_argument('app', + help="App uuid or name") + self.parser.add_argument('workflow', + help="Workflow id or uuid") + args = self.parser.parse_args() + revision = args.workflow + try: + revision = int(revision, 10) + except ValueError: + revision = args.workflow + app = self.client.apps.find(name_or_id=args.app) + + wfman = cli_wf.WorkflowManager(self.client, app_id=app.id) + loglist = wfman.logs(revision_or_id=revision) + fields = ["resource_uuid"] + for log in loglist: + strategy_info = json.loads(log.strategy_info) + if log.strategy == 'local': + if 'local_storage' not in fields: + fields.append('local_storage') + log.local_storage = log.location + elif log.strategy == 'swift': + if 'swift_container' not in fields: + fields.append('swift_container') + if 'swift_path' not in fields: + fields.append('swift_path') + log.swift_container = strategy_info['container'] + log.swift_path = log.location + else: + if 'location' not in fields: + fields.append('location') + + self._print_list(loglist, fields) + class OldAppCommands(cli_utils.CommandsBase): """Commands for working with applications. diff --git a/solumclient/v1/workflow.py b/solumclient/v1/workflow.py index d9bab83..5cfb11f 100644 --- a/solumclient/v1/workflow.py +++ b/solumclient/v1/workflow.py @@ -24,6 +24,11 @@ class Workflow(apiclient_base.Resource): return "" % self._info +class UserLog(apiclient_base.Resource): + def __repr__(self): + return "" % self._info + + class WorkflowManager(solum_base.CrudManager, solum_base.FindMixin): resource_class = Workflow collection_key = 'workflows' @@ -50,6 +55,22 @@ class WorkflowManager(solum_base.CrudManager, solum_base.FindMixin): return (super(WorkflowManager, self).get( base_url=self.base_url, **kwargs)) + def logs(self, **kwargs): + self.resource_class = UserLog + url = self.build_url(self.base_url, **kwargs) + rev_or_uuid = kwargs['revision_or_id'] + try: + if uuidutils.is_uuid_like(rev_or_uuid): + workflow_id = rev_or_uuid + else: + wf = self.find(**kwargs) + workflow_id = wf.id + except exceptions.NoUniqueMatch: + raise exc.NotUnique(resource='Workflow') + + url += '/%s/logs/' % workflow_id + return self._list(url) + def find(self, **kwargs): if 'workflow_id' in kwargs: return (super(WorkflowManager, self).get(