Connecting app logs to workflow

Changing the solumclient to get logs from workflow resource
instead of assembly resource.

Change-Id: Idf899d99bf5cd71128304446035107ab6f6d4f0f
Closes-Bug: #1498181
This commit is contained in:
Vijendar Komalla
2015-10-19 15:12:24 -05:00
parent 66137c9858
commit f803d05f73
2 changed files with 60 additions and 0 deletions

View File

@@ -980,6 +980,9 @@ Available commands:
solum workflow show <APP_NAME> <WORKFLOW_ID> solum workflow show <APP_NAME> <WORKFLOW_ID>
Print the details of a workflow. Print the details of a workflow.
solum workflow logs <APP_NAME> <WORKFLOW_ID>
List all the logs of a given workflow.
""" """
def list(self): def list(self):
@@ -1012,6 +1015,42 @@ Available commands:
'source', 'id', 'created_at', 'updated_at', 'status'] 'source', 'id', 'created_at', 'updated_at', 'status']
self._print_dict(wf, fields, wrap=72) 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): class OldAppCommands(cli_utils.CommandsBase):
"""Commands for working with applications. """Commands for working with applications.

View File

@@ -24,6 +24,11 @@ class Workflow(apiclient_base.Resource):
return "<Workflow %s>" % self._info return "<Workflow %s>" % self._info
class UserLog(apiclient_base.Resource):
def __repr__(self):
return "<Log %s>" % self._info
class WorkflowManager(solum_base.CrudManager, solum_base.FindMixin): class WorkflowManager(solum_base.CrudManager, solum_base.FindMixin):
resource_class = Workflow resource_class = Workflow
collection_key = 'workflows' collection_key = 'workflows'
@@ -50,6 +55,22 @@ class WorkflowManager(solum_base.CrudManager, solum_base.FindMixin):
return (super(WorkflowManager, self).get( return (super(WorkflowManager, self).get(
base_url=self.base_url, **kwargs)) 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): def find(self, **kwargs):
if 'workflow_id' in kwargs: if 'workflow_id' in kwargs:
return (super(WorkflowManager, self).get( return (super(WorkflowManager, self).get(