Skip to content

Commit 1d5f128

Browse files
committed
Add JSON encoders, string and JSON representation for output descriptors
Use JSON representation to output descriptor related models as JSON string. This will increase the readability of the command-line results. Note: Don't print extra parameters that are not defined in the TSP. Signed-off-by: Bernd Hufmann <[email protected]>
1 parent 98e5087 commit 1d5f128

File tree

3 files changed

+39
-38
lines changed

3 files changed

+39
-38
lines changed

tsp/output_descriptor.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"""OutputDescriptor class file."""
2424

2525
import json
26+
from tsp.configuration import Configuration, ConfigurationEncoder
2627

2728
NA = "N/A"
2829
UNKOWN = "UNKNOWN"
@@ -117,20 +118,24 @@ def __init__(self, params):
117118
self.compatible_providers = []
118119

119120
def __repr__(self):
120-
return 'OutputDescriptor(id={}, name={}, description={})'.format(self.id, self.name, self.description)
121+
return 'OutputDescriptor(id={}, name={}, description={}, type={})'.format(self.id, self.name, self.description, obj.type)
122+
123+
def to_json(self):
124+
return json.dumps(self, cls=OutputDescriptorEncoder, indent=4)
121125

122126
class OutputDescriptorEncoder(json.JSONEncoder):
123127
def default(self, obj):
124128
if isinstance(obj, OutputDescriptor):
125129
return {
126-
'id': obj.id,
127-
'name': obj.name,
128-
'description': obj.description,
129-
'type': obj.type,
130-
'query_parameters': obj.query_parameters,
131-
'start': obj.start,
132-
'end': obj.end,
133-
'final': obj.final,
134-
'compatible_providers': obj.compatible_providers
130+
ID_KEY: obj.id,
131+
NAME_KEY: obj.name,
132+
DESCRIPTION_KEY: obj.description,
133+
TYPE_KEY: obj.type,
134+
# Hide non-TSP fields
135+
# QUERY_PARAMETERS_KEY: obj.query_parameters,
136+
# START_TIME_KEY: obj.start,
137+
# END_TIME_KEY: obj.end,
138+
# IS_FINAL_KEY: obj.final,
139+
# COMPATIBLE_PROVIDERS_KEY: obj.compatible_providers
135140
}
136141
return super().default(obj)

tsp/output_descriptor_set.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222

2323
"""OutputDescriptorSet class file."""
2424

25-
from tsp.output_descriptor import OutputDescriptor
25+
import json
26+
from tsp.output_descriptor import OutputDescriptor, OutputDescriptorEncoder
2627

2728

2829
# pylint: disable=too-few-public-methods
@@ -40,4 +41,16 @@ def __init__(self, params):
4041
self.descriptors.append(OutputDescriptor(obj))
4142

4243
def __repr__(self):
43-
return ', '.join([str(descriptor) for descriptor in self.descriptors])
44+
return 'OutputDescriptorSet({})'.format(', '.join(str(descriptor) for descriptor in self.descriptors))
45+
46+
def to_json(self):
47+
return json.dumps(self, cls=OutputDescriptorSetEncoder, indent=4)
48+
49+
50+
class OutputDescriptorSetEncoder(json.JSONEncoder):
51+
def default(self, obj):
52+
if isinstance(obj, OutputDescriptorSet):
53+
return [
54+
OutputDescriptorEncoder().default(descriptor) for descriptor in obj.descriptors
55+
]
56+
return super().default(obj)

tsp_cli_client

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,30 +41,6 @@ from tsp.tsp_client import TspClient
4141

4242
TRACE_MISSING = "Trace UUID is missing"
4343

44-
# pylint: disable=consider-using-f-string
45-
46-
47-
def __print_uuid(elem):
48-
return colored(elem.UUID, 'yellow')
49-
50-
def __print_output(output):
51-
print(' {0}: {1} {2} ({3})'.format(output.name,
52-
output.description, output.type, output.id))
53-
54-
55-
# pylint: disable=fixme,line-too-long,undefined-loop-variable
56-
def __print_outputs(descriptors):
57-
if not descriptors:
58-
print('No output descriptors for trace {0} ({1}))'.format(
59-
t.name, __print_uuid(t)))
60-
for descriptor in output_descriptors.descriptors:
61-
__print_output(descriptor)
62-
# TODO remove when available
63-
# if o.id == "org.eclipse.tracecompass.internal.analysis.profiling.callstack.provider.CallStackDataProvider"):
64-
# print(' {0}: {1} ({2})'.format("Function Duration Statistics", "Function Duration Statistics",
65-
# "org.eclipse.tracecompass.internal.analysis.profiling.core.callgraph.callgraphanalysis.statistics"))
66-
67-
6844
def __get_descriptor(uuid, output_id):
6945
resp = tsp_client.fetch_experiment_output(uuid, output_id)
7046
if resp.status_code == 200:
@@ -352,7 +328,12 @@ if __name__ == "__main__":
352328
options.list_outputs)
353329
if response.status_code == 200:
354330
output_descriptors = response.model
355-
__print_outputs(output_descriptors.descriptors)
331+
if not output_descriptors:
332+
print('No output descriptors for this trace')
333+
else:
334+
print('Successfully listed outputs')
335+
print('---------------------------')
336+
print(output_descriptors.to_json())
356337
sys.exit(0)
357338
else:
358339
print("List outputs failed")
@@ -363,7 +344,9 @@ if __name__ == "__main__":
363344
output_descriptor = __get_descriptor(
364345
options.uuid, options.list_output)
365346
if output_descriptor is not None:
366-
print(output_descriptor)
347+
print('Successfully listed output')
348+
print('--------------------------')
349+
print(output_descriptor.to_json())
367350
else:
368351
print(TRACE_MISSING)
369352
sys.exit(1)

0 commit comments

Comments
 (0)