Skip to content

Commit b0b0f03

Browse files
committed
Add JSON encoders, string and JSON representation for trace/experiment
Use JSON representation to print trace and experiment related models as JSON string. This will increase the readability of the command-line results. Signed-off-by: Bernd Hufmann <[email protected]>
1 parent 0492e1f commit b0b0f03

File tree

5 files changed

+62
-51
lines changed

5 files changed

+62
-51
lines changed

tsp/experiment.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,20 @@ def __repr__(self):
102102
self.name, self.UUID, self.start, self.end, self.number_of_events, self.traces, self.indexing_status
103103
)
104104

105+
def to_json(self):
106+
return json.dumps(self, cls=ExperimentEncoder, indent=4)
107+
108+
105109
class ExperimentEncoder(json.JSONEncoder):
106110
def default(self, obj):
107111
if isinstance(obj, Experiment):
108112
return {
109-
'name': obj.name,
110-
'UUID': obj.UUID,
111-
'start': obj.start,
112-
'end': obj.end,
113-
'nbEvents': obj.number_of_events,
114-
'indexing': obj.indexing_status.name,
115-
'traces': TraceSetEncoder().default(obj.traces)
113+
NAME_KEY: obj.name,
114+
UUID_KEY: obj.UUID,
115+
START_TIME_KEY: obj.start,
116+
END_TIME_KEY: obj.end,
117+
NB_EVENT_KEY: obj.number_of_events,
118+
INDEXING_STATUS_KEY: obj.indexing_status.name,
119+
TRACES_TIME_KEY: TraceSetEncoder().default(obj.traces)
116120
}
117121
return super().default(obj)

tsp/experiment_set.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ def __init__(self, params):
3939
for obj in params:
4040
self.experiments.append(Experiment(obj))
4141

42+
def __repr__(self) -> str:
43+
return 'ExperimentSet({})'.format(', '.join(str(trace) for trace in self.traces))
44+
45+
def to_json(self):
46+
return json.dumps(self, cls=ExperimentSetEncoder, indent=4)
47+
4248
class ExperimentSetEncoder(json.JSONEncoder):
4349
def default(self, obj):
4450
if isinstance(obj, ExperimentSet):

tsp/trace.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -108,20 +108,25 @@ def __init__(self, params):
108108
self.indexing_status = 0
109109

110110
def __repr__(self):
111-
return 'Trace({}: UUID={}, start={}, end={}, nevent={}, path={}, indexing={})'.format(
112-
self.name, self.UUID, self.start, self.end, self.number_of_events, self.path, self.indexing_status
111+
return 'Trace({}: UUID={}, start={}, end={}, nevent={}, path={}, properties={} indexing={})'.format(
112+
self.name, self.UUID, self.start, self.end, self.number_of_events, self.path, self.properties, self.indexing_status
113113
)
114+
115+
def to_json(self):
116+
return json.dumps(self, cls=TraceEncoder, indent=4)
117+
114118

115119
class TraceEncoder(json.JSONEncoder):
116120
def default(self, obj):
117121
if isinstance(obj, Trace):
118122
return {
119-
'name': obj.name,
120-
'UUID': obj.UUID,
121-
'start': obj.start,
122-
'end': obj.end,
123-
'nbEvents': obj.number_of_events,
124-
'path': obj.path,
125-
'indexing': obj.indexing_status.name
123+
NAME_KEY: obj.name,
124+
UUID_KEY: obj.UUID,
125+
START_TIME_KEY: obj.start,
126+
END_TIME_KEY: obj.end,
127+
NB_EVENT_KEY: obj.number_of_events,
128+
PATH_KEY: obj.path,
129+
PROPERTIES_KEY: obj.properties,
130+
INDEXING_STATUS_KEY: obj.indexing_status.name
126131
}
127-
return super().default(obj)
132+
return super().default(obj)

tsp/trace_set.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import json
2626
from tsp.trace import Trace, TraceEncoder
2727

28-
# pylint: disable=too-few-public-methods
28+
2929
class TraceSet:
3030
'''
3131
classdocs
@@ -42,6 +42,9 @@ def __init__(self, params):
4242
def __repr__(self) -> str:
4343
return 'TraceSet({})'.format(', '.join(str(trace) for trace in self.traces))
4444

45+
def to_json(self):
46+
return json.dumps(self, cls=TraceSetEncoder, indent=4)
47+
4548
class TraceSetEncoder(json.JSONEncoder):
4649
def default(self, obj):
4750
if isinstance(obj, TraceSet):

tsp_cli_client

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -47,27 +47,6 @@ TRACE_MISSING = "Trace UUID is missing"
4747
def __print_uuid(elem):
4848
return colored(elem.UUID, 'yellow')
4949

50-
51-
def __print_experiment(elem):
52-
print('Experiment:')
53-
print('----------')
54-
print(' {0}: ({1}) start={2} end={3} nbEvents={4} indexing={5}'.format(
55-
elem.name, __print_uuid(elem), elem.start, elem.end,
56-
elem.number_of_events, elem.indexing_status))
57-
print('Trace(s):')
58-
print('------')
59-
for elem_trace in elem.traces.traces:
60-
__print_trace(elem_trace)
61-
62-
print('')
63-
64-
65-
def __print_trace(elem):
66-
print(' {0}: {1} ({2}) start={3} end={4} nbEvents={5} properties={6} indexing={7}'.format(
67-
elem.name, elem.path, __print_uuid(elem), elem.start, elem.end,
68-
elem.number_of_events, elem.properties, elem.indexing_status))
69-
70-
7150
def __print_output(output):
7251
print(' {0}: {1} {2} ({3})'.format(output.name,
7352
output.description, output.type, output.id))
@@ -256,7 +235,9 @@ if __name__ == "__main__":
256235
response = tsp_client.open_trace(options.name, options.trace)
257236
if response.status_code == 200:
258237
res = response.model
259-
__print_trace(res)
238+
print('Successfully opened trace')
239+
print('-------------------------')
240+
res.print()
260241
sys.exit(0)
261242
else:
262243
sys.exit(1)
@@ -268,7 +249,9 @@ if __name__ == "__main__":
268249
response = tsp_client.fetch_trace(options.list_trace)
269250
if response.status_code == 200:
270251
res = response.model
271-
__print_trace(res)
252+
print('Successfully listed trace')
253+
print('-------------------------')
254+
res.print()
272255
sys.exit(0)
273256
else:
274257
sys.exit(1)
@@ -278,16 +261,20 @@ if __name__ == "__main__":
278261
if response.status_code == 200:
279262
if not response.model.traces:
280263
print("No traces open on the server")
281-
for t in response.model.traces:
282-
__print_trace(t)
264+
else:
265+
print('Successfully listed traces')
266+
print('--------------------------')
267+
print(response.model.to_json())
283268
sys.exit(0)
284269
else:
285270
sys.exit(1)
286271

287272
if options.delete_trace:
288273
response = tsp_client.delete_trace(options.delete_trace, False)
289274
if response.status_code == 200:
290-
print("Successfully deleted trace")
275+
print('Successfully deleted trace')
276+
print('--------------------------')
277+
print(response.model.to_json())
291278
sys.exit(0)
292279
else:
293280
sys.exit(1)
@@ -312,17 +299,19 @@ if __name__ == "__main__":
312299
response = tsp_client.open_experiment(
313300
options.experiment, trace_uuids)
314301
if response.status_code == 200:
315-
res = response.model
316-
__print_experiment(res)
302+
print('Successfully opened experiment')
303+
print('------------------------------')
304+
print(response.model.to_json())
317305
sys.exit(0)
318306
else:
319307
sys.exit(1)
320308

321309
if options.list_experiment:
322310
response = tsp_client.fetch_experiment(options.list_experiment)
323311
if response.status_code == 200:
324-
res = response.model
325-
__print_experiment(res)
312+
print('Successfully listed experiment')
313+
print('------------------------------')
314+
print(response.model.to_json())
326315
sys.exit(0)
327316
else:
328317
sys.exit(1)
@@ -332,16 +321,20 @@ if __name__ == "__main__":
332321
if response.status_code == 200:
333322
if not response.model.experiments:
334323
print("No experiments open on the server")
335-
for exp in response.model.experiments:
336-
__print_experiment(exp)
324+
else:
325+
print('Successfully listed experiments')
326+
print('-------------------------------')
327+
print(response.model.to_json())
337328
sys.exit(0)
338329
else:
339330
sys.exit(1)
340331

341332
if options.delete_experiment:
342333
response = tsp_client.delete_experiment(options.delete_experiment)
343334
if response.status_code == 200:
344-
print("Successfully deleted experiment")
335+
print('Successfully deleted experiment')
336+
print('-------------------------------')
337+
print(response.model.to_json())
345338
if options.do_delete_traces:
346339
for trace in response.model.traces.traces:
347340
del_response = tsp_client.delete_trace(

0 commit comments

Comments
 (0)