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:
@@ -980,6 +980,9 @@ Available commands:
|
||||
|
||||
solum workflow show <APP_NAME> <WORKFLOW_ID>
|
||||
Print the details of a workflow.
|
||||
|
||||
solum workflow logs <APP_NAME> <WORKFLOW_ID>
|
||||
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.
|
||||
|
@@ -24,6 +24,11 @@ class Workflow(apiclient_base.Resource):
|
||||
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):
|
||||
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(
|
||||
|
Reference in New Issue
Block a user