ambianic / ambianic-edge

The core runtime engine for Ambianic Edge devices.
https://ambianic.ai
Apache License 2.0
108 stars 45 forks source link

[CRITICAL BUG] event serialization error in store.py #330

Closed ivelin closed 3 years ago

ivelin commented 3 years ago

Describe the bug After merging PR #314 , there is an exception in store.py when it tries to save a detection event.

ambianic-edge    | 2021-02-18 19:29:44 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/fall_detect.py.convert_inference_result(482): label: FALL , confidence: 1, leaning_angle: 79,                          keypoint_corr: {'left shoulder': [102.0, 86.0], 'left hip': [110.0, 95.0], 'right shoulder': [89.0, 94.0], 'right hip': [102.0, 97.0]}
ambianic-edge    | 2021-02-18 19:29:44 ERROR /opt/ambianic-edge/src/ambianic/pipeline/store.py.process_sample(159): Error TypeError('Object of type float32 is not JSON serializable') while saving sample {'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1280x720 at 0xADAA06F0>, 'thumbnail': <PIL.Image.Image image mode=RGB size=257x145 at 0xADA74E30>, 'inference_result': [{'label': 'FALL', 'confidence': 0.5335016838548498, 'leaning_angle': 79.3426890672073, 'keypoint_corr': {'left shoulder': [102.0, 86.0], 'left hip': [110.0, 95.0], 'right shoulder': [89.0, 94.0], 'right hip': [102.0, 97.0]}}], 'inference_meta': {'display': 'Fall Detection'}}
ambianic-edge    | Traceback (most recent call last):
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/pipeline/store.py", line 143, in process_sample
ambianic-edge    |     inference_meta=inference_meta)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/pipeline/store.py", line 110, in _save_sample
--
ambianic-edge    |   File "/usr/lib/python3.7/json/encoder.py", line 179, in default
ambianic-edge    |     raise TypeError(f'Object of type {o.__class__.__name__} '
ambianic-edge    | TypeError: Object of type float32 is not JSON serializable
ambianic-edge    | 2021-02-18 19:29:44 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 0.02 ms, 6.72 fps in pipeline area_watch
ambianic-edge    | 2021-02-18 19:29:45 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 0.05 ms, 1.96 fps in pipeline area_watch
ambianic-edge    | 2021-02-18 19:29:45 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/fall_detect.py.find_keypoints(216): A pose detected with
ambianic-edge    |                     spinal_vector_score=0.8486021256290823 >= 0.15
ambianic-edge    |                     confidence threshold.
ambianic-edge    |                     Pose keypoints: {'left shoulder': [137.0, 73.0], 'left hip': [140.0, 96.0], 'right shoulder': [113.0, 74.0], 'right hip': [124.0, 100.0]}"
ambianic-edge    |                 
ambianic-edge    | 2021-02-18 19:29:45 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 298.01 ms, 1.24 fps in pipeline area_watch
ambianic-edge    | 2021-02-18 19:29:46 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 0.05 ms, 5.58 fps in pipeline area_watch
ambianic-edge    | 2021-02-18 19:29:46 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.join_peer_room(83): myRoom members {'clientsIds': ['01a20dc8-6a8a-4a75-aa5d-013a97612909', '80f6b9fa-bb8d-47dd-ac8b-daea9fe68c5f']}

To Reproduce Run edge with fall detection and observe log.

ivelin commented 3 years ago

@bhavikapanara looks like the numpy.float32 doesn't have a default string representation. Here is more on this. Should be a simple fix.

ivelin commented 3 years ago

Please test thoroughly end to end with UI rendering falls and object detections in the timeline.

ivelin commented 3 years ago

@bhavikapanara there is a new critical serialization issue after the #332 merge. Worse yet, the new merge was pushed to production and effectively stopped all edge devices from functioning.

Now we not only have to promptly resolve the root cause, but also include a recovery script in the next merge that cleans up corrupted timeline event files and allows edge devices to resume function without user intervention. Not an ideal situation, but this is the price we pay for incomplete end to end testing.

Looking at the exception in the edge log, the format store.py serializes post #332 merge is some sort of weird proprietary stuff that cannot be deserialized by the regular json library used in the flasker web API.

Please review carefully and make sure to test end to end, including UI before submitting the next PR. Also add more tests for to REST API to be sure it can function with the event serialization format.

Here is the new exception in the web API when it tries to respond to a UI request:

ambianic-edge    | 2021-02-26 03:05:49 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(281): Request failed
ambianic-edge    | 2021-02-26 03:05:49 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(282): found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | Traceback (most recent call last):
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1950, in full_dispatch_request
ambianic-edge    |     rv = self.dispatch_request()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1936, in dispatch_request
ambianic-edge    |     return self.view_functions[rule.endpoint](**req.view_args)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/flaskr.py", line 169, in get_timeline
ambianic-edge    |     resp = samples.get_timeline(page=req_page, data_dir=data_dir)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/server/samples.py", line 178, in get_timeline
ambianic-edge    |     timeline_events = yaml.safe_load(pf)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 162, in safe_load
ambianic-edge    |     return load(stream, SafeLoader)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 114, in load
ambianic-edge    |     return loader.get_single_data()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/constructor.py", line 49, in get_single_data
ambianic-edge    |     node = self.get_single_node()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 36, in get_single_node
ambianic-edge    |     document = self.compose_document()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 55, in compose_document
ambianic-edge    |     node = self.compose_node(None, None)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 77, in compose_node
ambianic-edge    |     "second occurrence", event.start_mark)
ambianic-edge    | yaml.composer.ComposerError: found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | 2021-02-26 03:05:49 INFO /usr/local/lib/python3.7/dist-packages/werkzeug/_internal.py._log(113): 127.0.0.1 - - [26/Feb/2021 03:05:49] "GET /api/timeline.json?page=1 HTTP/1.1" 500 -
ambianic-edge    | 2021-02-26 03:05:49 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(271): Proxy fetched response with headers: 
ambianic-edge    | <CIMultiDictProxy('Content-Type': 'application/json', 'Content-Length': '48', 'Access-Control-Allow-Origin': '*', 'Server': 'Werkzeug/1.0.1 Python/3.7.3', 'Date': 'Fri, 26 Feb 2021 03:05:49 GMT')>
ambianic-edge    | 2021-02-26 03:05:49 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(274): Answering request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'} response header: 
ambianic-edge    |  {'status': 500, 'content-type': 'application/json', 'content-length': 48}
ambianic-edge    | 2021-02-26 03:05:50 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 1305.32 ms, 0.76 fps in pipeline area_watch
ambianic-edge    | 2021-02-26 03:05:50 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.join_peer_room(83): myRoom members {'clientsIds': ['01a20dc8-6a8a-4a75-aa5d-013a97612909']}
ambianic-edge    | 2021-02-26 03:05:50 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(241): webrtc peer: http proxy request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'}
ambianic-edge    | 2021-02-26 03:05:50 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:51 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 1118.57 ms, 0.89 fps in pipeline area_watch
ambianic-edge    | 2021-02-26 03:05:51 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:51 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(281): Request failed
ambianic-edge    | 2021-02-26 03:05:51 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(282): found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | Traceback (most recent call last):
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1950, in full_dispatch_request
ambianic-edge    |     rv = self.dispatch_request()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1936, in dispatch_request
ambianic-edge    |     return self.view_functions[rule.endpoint](**req.view_args)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/flaskr.py", line 169, in get_timeline
ambianic-edge    |     resp = samples.get_timeline(page=req_page, data_dir=data_dir)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/server/samples.py", line 178, in get_timeline
ambianic-edge    |     timeline_events = yaml.safe_load(pf)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 162, in safe_load
ambianic-edge    |     return load(stream, SafeLoader)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 114, in load
ambianic-edge    |     return loader.get_single_data()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/constructor.py", line 49, in get_single_data
ambianic-edge    |     node = self.get_single_node()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 36, in get_single_node
ambianic-edge    |     document = self.compose_document()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 55, in compose_document
ambianic-edge    |     node = self.compose_node(None, None)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 77, in compose_node
ambianic-edge    |     "second occurrence", event.start_mark)
ambianic-edge    | yaml.composer.ComposerError: found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | 2021-02-26 03:05:51 INFO /usr/local/lib/python3.7/dist-packages/werkzeug/_internal.py._log(113): 127.0.0.1 - - [26/Feb/2021 03:05:51] "GET /api/timeline.json?page=1 HTTP/1.1" 500 -
ambianic-edge    | 2021-02-26 03:05:51 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(271): Proxy fetched response with headers: 
ambianic-edge    | <CIMultiDictProxy('Content-Type': 'application/json', 'Content-Length': '48', 'Access-Control-Allow-Origin': '*', 'Server': 'Werkzeug/1.0.1 Python/3.7.3', 'Date': 'Fri, 26 Feb 2021 03:05:51 GMT')>
ambianic-edge    | 2021-02-26 03:05:51 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(274): Answering request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'} response header: 
ambianic-edge    |  {'status': 500, 'content-type': 'application/json', 'content-length': 48}
ambianic-edge    | 2021-02-26 03:05:52 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 1157.59 ms, 0.86 fps in pipeline area_watch
ambianic-edge    | 2021-02-26 03:05:52 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(241): webrtc peer: http proxy request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'}
ambianic-edge    | 2021-02-26 03:05:52 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:53 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.join_peer_room(83): myRoom members {'clientsIds': ['01a20dc8-6a8a-4a75-aa5d-013a97612909']}
ambianic-edge    | 2021-02-26 03:05:53 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:53 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(281): Request failed
ambianic-edge    | 2021-02-26 03:05:53 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(282): found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | Traceback (most recent call last):
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1950, in full_dispatch_request
ambianic-edge    |     rv = self.dispatch_request()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1936, in dispatch_request
ambianic-edge    |     return self.view_functions[rule.endpoint](**req.view_args)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/flaskr.py", line 169, in get_timeline
ambianic-edge    |     resp = samples.get_timeline(page=req_page, data_dir=data_dir)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/server/samples.py", line 178, in get_timeline
ambianic-edge    |     timeline_events = yaml.safe_load(pf)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 162, in safe_load
ambianic-edge    |     return load(stream, SafeLoader)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 114, in load
ambianic-edge    |     return loader.get_single_data()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/constructor.py", line 49, in get_single_data
ambianic-edge    |     node = self.get_single_node()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 36, in get_single_node
ambianic-edge    |     document = self.compose_document()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 55, in compose_document
ambianic-edge    |     node = self.compose_node(None, None)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 77, in compose_node
ambianic-edge    |     "second occurrence", event.start_mark)
ambianic-edge    | yaml.composer.ComposerError: found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | 2021-02-26 03:05:53 INFO /usr/local/lib/python3.7/dist-packages/werkzeug/_internal.py._log(113): 127.0.0.1 - - [26/Feb/2021 03:05:53] "GET /api/timeline.json?page=1 HTTP/1.1" 500 -
ambianic-edge    | 2021-02-26 03:05:53 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(271): Proxy fetched response with headers: 
ambianic-edge    | <CIMultiDictProxy('Content-Type': 'application/json', 'Content-Length': '48', 'Access-Control-Allow-Origin': '*', 'Server': 'Werkzeug/1.0.1 Python/3.7.3', 'Date': 'Fri, 26 Feb 2021 03:05:53 GMT')>
ambianic-edge    | 2021-02-26 03:05:53 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(274): Answering request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'} response header: 
ambianic-edge    |  {'status': 500, 'content-type': 'application/json', 'content-length': 48}
ambianic-edge    | 2021-02-26 03:05:53 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 1402.12 ms, 0.71 fps in pipeline area_watch
ambianic-edge    | 2021-02-26 03:05:54 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(241): webrtc peer: http proxy request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'}
ambianic-edge    | 2021-02-26 03:05:54 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:54 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 1030.88 ms, 0.97 fps in pipeline area_watch
ambianic-edge    | 2021-02-26 03:05:55 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:55 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(281): Request failed
ambianic-edge    | 2021-02-26 03:05:55 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(282): found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | Traceback (most recent call last):
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1950, in full_dispatch_request
ambianic-edge    |     rv = self.dispatch_request()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1936, in dispatch_request
ambianic-edge    |     return self.view_functions[rule.endpoint](**req.view_args)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/flaskr.py", line 169, in get_timeline
ambianic-edge    |     resp = samples.get_timeline(page=req_page, data_dir=data_dir)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/server/samples.py", line 178, in get_timeline
ambianic-edge    |     timeline_events = yaml.safe_load(pf)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 162, in safe_load
ambianic-edge    |     return load(stream, SafeLoader)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 114, in load
ambianic-edge    |     return loader.get_single_data()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/constructor.py", line 49, in get_single_data
ambianic-edge    |     node = self.get_single_node()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 36, in get_single_node
ambianic-edge    |     document = self.compose_document()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 55, in compose_document
ambianic-edge    |     node = self.compose_node(None, None)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 77, in compose_node
ambianic-edge    |     "second occurrence", event.start_mark)
ambianic-edge    | yaml.composer.ComposerError: found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | 2021-02-26 03:05:55 INFO /usr/local/lib/python3.7/dist-packages/werkzeug/_internal.py._log(113): 127.0.0.1 - - [26/Feb/2021 03:05:55] "GET /api/timeline.json?page=1 HTTP/1.1" 500 -
ambianic-edge    | 2021-02-26 03:05:55 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(271): Proxy fetched response with headers: 
ambianic-edge    | <CIMultiDictProxy('Content-Type': 'application/json', 'Content-Length': '48', 'Access-Control-Allow-Origin': '*', 'Server': 'Werkzeug/1.0.1 Python/3.7.3', 'Date': 'Fri, 26 Feb 2021 03:05:55 GMT')>
ambianic-edge    | 2021-02-26 03:05:55 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(274): Answering request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'} response header: 
ambianic-edge    |  {'status': 500, 'content-type': 'application/json', 'content-length': 48}
ambianic-edge    | 2021-02-26 03:05:56 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 1214.68 ms, 0.82 fps in pipeline area_watch
ambianic-edge    | 2021-02-26 03:05:56 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(241): webrtc peer: http proxy request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'}
ambianic-edge    | 2021-02-26 03:05:56 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:56 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.join_peer_room(83): myRoom members {'clientsIds': ['01a20dc8-6a8a-4a75-aa5d-013a97612909']}
ambianic-edge    | 2021-02-26 03:05:57 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 1172.95 ms, 0.85 fps in pipeline area_watch
ambianic-edge    | 2021-02-26 03:05:57 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:57 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(281): Request failed
ambianic-edge    | 2021-02-26 03:05:57 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(282): found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | Traceback (most recent call last):
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1950, in full_dispatch_request
ambianic-edge    |     rv = self.dispatch_request()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1936, in dispatch_request
ambianic-edge    |     return self.view_functions[rule.endpoint](**req.view_args)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/flaskr.py", line 169, in get_timeline
ambianic-edge    |     resp = samples.get_timeline(page=req_page, data_dir=data_dir)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/server/samples.py", line 178, in get_timeline
ambianic-edge    |     timeline_events = yaml.safe_load(pf)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 162, in safe_load
ambianic-edge    |     return load(stream, SafeLoader)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 114, in load
ambianic-edge    |     return loader.get_single_data()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/constructor.py", line 49, in get_single_data
ambianic-edge    |     node = self.get_single_node()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 36, in get_single_node
ambianic-edge    |     document = self.compose_document()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 55, in compose_document
ambianic-edge    |     node = self.compose_node(None, None)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 77, in compose_node
ambianic-edge    |     "second occurrence", event.start_mark)
ambianic-edge    | yaml.composer.ComposerError: found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | 2021-02-26 03:05:57 INFO /usr/local/lib/python3.7/dist-packages/werkzeug/_internal.py._log(113): 127.0.0.1 - - [26/Feb/2021 03:05:57] "GET /api/timeline.json?page=1 HTTP/1.1" 500 -
ambianic-edge    | 2021-02-26 03:05:57 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(271): Proxy fetched response with headers: 
ambianic-edge    | <CIMultiDictProxy('Content-Type': 'application/json', 'Content-Length': '48', 'Access-Control-Allow-Origin': '*', 'Server': 'Werkzeug/1.0.1 Python/3.7.3', 'Date': 'Fri, 26 Feb 2021 03:05:57 GMT')>
ambianic-edge    | 2021-02-26 03:05:57 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(274): Answering request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'} response header: 
ambianic-edge    |  {'status': 500, 'content-type': 'application/json', 'content-length': 48}
ambianic-edge    | 2021-02-26 03:05:58 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 1111.52 ms, 0.89 fps in pipeline area_watch
ambianic-edge    | 2021-02-26 03:05:58 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(241): webrtc peer: http proxy request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'}
ambianic-edge    | 2021-02-26 03:05:58 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:59 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py._ping(220): webrtc peer: http proxy response ping. Keeping datachannel alive.
ambianic-edge    | 2021-02-26 03:05:59 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.join_peer_room(83): myRoom members {'clientsIds': ['01a20dc8-6a8a-4a75-aa5d-013a97612909']}
ambianic-edge    | 2021-02-26 03:05:59 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(281): Request failed
ambianic-edge    | 2021-02-26 03:05:59 ERROR /opt/ambianic-edge/src/ambianic/webapp/flaskr.py.handle_exception(282): found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | Traceback (most recent call last):
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1950, in full_dispatch_request
ambianic-edge    |     rv = self.dispatch_request()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1936, in dispatch_request
ambianic-edge    |     return self.view_functions[rule.endpoint](**req.view_args)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/flaskr.py", line 169, in get_timeline
ambianic-edge    |     resp = samples.get_timeline(page=req_page, data_dir=data_dir)
ambianic-edge    |   File "/opt/ambianic-edge/src/ambianic/webapp/server/samples.py", line 178, in get_timeline
ambianic-edge    |     timeline_events = yaml.safe_load(pf)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 162, in safe_load
ambianic-edge    |     return load(stream, SafeLoader)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/__init__.py", line 114, in load
ambianic-edge    |     return loader.get_single_data()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/constructor.py", line 49, in get_single_data
ambianic-edge    |     node = self.get_single_node()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 36, in get_single_node
ambianic-edge    |     document = self.compose_document()
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 55, in compose_document
ambianic-edge    |     node = self.compose_node(None, None)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 84, in compose_node
ambianic-edge    |     node = self.compose_mapping_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
ambianic-edge    |     item_value = self.compose_node(node, item_key)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 82, in compose_node
ambianic-edge    |     node = self.compose_sequence_node(anchor)
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 111, in compose_sequence_node
ambianic-edge    |     node.value.append(self.compose_node(node, index))
ambianic-edge    |   File "/usr/local/lib/python3.7/dist-packages/yaml/composer.py", line 77, in compose_node
ambianic-edge    |     "second occurrence", event.start_mark)
ambianic-edge    | yaml.composer.ComposerError: found duplicate anchor 'id001'; first occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2030, column 13
ambianic-edge    | second occurrence
ambianic-edge    |   in "data/timeline-event-log.yaml", line 2118, column 13
ambianic-edge    | 2021-02-26 03:05:59 INFO /usr/local/lib/python3.7/dist-packages/werkzeug/_internal.py._log(113): 127.0.0.1 - - [26/Feb/2021 03:05:59] "GET /api/timeline.json?page=1 HTTP/1.1" 500 -
ambianic-edge    | 2021-02-26 03:05:59 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(271): Proxy fetched response with headers: 
ambianic-edge    | <CIMultiDictProxy('Content-Type': 'application/json', 'Content-Length': '48', 'Access-Control-Allow-Origin': '*', 'Server': 'Werkzeug/1.0.1 Python/3.7.3', 'Date': 'Fri, 26 Feb 2021 03:05:59 GMT')>
ambianic-edge    | 2021-02-26 03:05:59 INFO /usr/local/lib/python3.7/dist-packages/peerjs/ext/http_proxy.py.pc_data(274): Answering request: 
ambianic-edge    | {'url': 'http://localhost:8778/api/timeline.json?page=1', 'method': 'GET'} response header: 
ambianic-edge    |  {'status': 500, 'content-type': 'application/json', 'content-length': 48}
ambianic-edge    | 2021-02-26 03:05:59 INFO /opt/ambianic-edge/src/ambianic/pipeline/ai/tf_detect.py.log_stats(178): FallDetector inference time 1394.22 ms, 0.72 fps in pipeline area_watch

And here is what I see in the events log. See how It moved from a previously simple and clean serialization format to a new post merge format that looks weird cannot be deserialized easily:

- args:
    datetime: '2021-02-22T23:42:31.128045'
    id: 0da18f16665541b3bdcf6982d0e78d7d
    image_file_name: 20210222-234231.128045-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - box:
        xmax: 1.0
        xmin: 0.0
        ymax: 1.0
        ymin: 0.0
      confidence: 0.48517078150132414
      label: FALL
    json_file_name: 20210222-234231.128045-inference.json
    rel_dir: detections/20210219-070626.740747
    thumbnail_file_name: 20210222-234231.128045-thumbnail.jpg
  created: 1614037351.1647851
  id: 055e50f9e70b434aae4c7ee0e5808ff1
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 129
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-23T00:10:57.634838'
    id: a56092fe7bd84c27ab9299c1e7afb5d7
    image_file_name: 20210223-001057.634838-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - box:
        xmax: 1.0
        xmin: 0.0
        ymax: 1.0
        ymin: 0.0
      confidence: 0.20621569629182934
      label: FALL
    json_file_name: 20210223-001057.634838-inference.json
    rel_dir: detections/20210219-070626.740747
    thumbnail_file_name: 20210223-001057.634838-thumbnail.jpg
  created: 1614039057.6609294
  id: 4f63f2f845fc4b62b1e960e07ec702e4
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 129
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-23T23:44:29.093104'
    id: 3b86f5d1859e4beabed19a4f569df5f2
    image_file_name: 20210223-234429.093104-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - box:
        xmax: 1.0
        xmin: 0.0
        ymax: 1.0
        ymin: 0.0
      confidence: 0.4280285843033219
      label: FALL
    json_file_name: 20210223-234429.093104-inference.json
    rel_dir: detections/20210223-070620.649938
    thumbnail_file_name: 20210223-234429.093104-thumbnail.jpg
  created: 1614123869.1176443
  id: ad8634dde02b45bd963b834676b8127c
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 129
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-24T23:38:55.804576'
    id: feb8d4a7c14d495e8802f3f2fa86404b
    image_file_name: 20210224-233855.804576-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - box:
        xmax: 1.0
        xmin: 0.0
        ymax: 1.0
        ymin: 0.0
      confidence: 0.5720082229529512
      label: FALL
    json_file_name: 20210224-233855.804576-inference.json
    rel_dir: detections/20210223-070620.649938
    thumbnail_file_name: 20210224-233855.804576-thumbnail.jpg
  created: 1614209935.8287358
  id: b1af22824f8b407aa02a4e57f0d147bd
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 129
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-24T23:40:48.483577'
    id: 6341010f2c8c4055814d4b10ec01b77d
    image_file_name: 20210224-234048.483577-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - box:
        xmax: 1.0
        xmin: 0.0
        ymax: 1.0
        ymin: 0.0
      confidence: 0.9455373799010511
      label: FALL
    json_file_name: 20210224-234048.483577-inference.json
    rel_dir: detections/20210223-070620.649938
    thumbnail_file_name: 20210224-234048.483577-thumbnail.jpg
  created: 1614210048.508217
  id: 50b261e8724342f4bfbaa1aa4e06074f
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 129
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-24T23:41:08.892942'
    id: f3244ba9671441e58f15ba4e5a6b5aff
    image_file_name: 20210224-234108.892942-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - box:
        xmax: 1.0
        xmin: 0.0
        ymax: 1.0
        ymin: 0.0
      confidence: 0.9089497362743941
      label: FALL
    json_file_name: 20210224-234108.892942-inference.json
    rel_dir: detections/20210223-070620.649938
    thumbnail_file_name: 20210224-234108.892942-thumbnail.jpg
  created: 1614210068.9171371
  id: 9ed87b4bb5f44f60b4546f1a7afb8e79
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 129
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-24T23:41:20.333795'
    id: 449dcf021b384ff984e4d184532ee6e8
    image_file_name: 20210224-234120.333795-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - box:
        xmax: 1.0
        xmin: 0.0
        ymax: 1.0
        ymin: 0.0
      confidence: 0.7568398849136351
      label: FALL
    json_file_name: 20210224-234120.333795-inference.json
    rel_dir: detections/20210223-070620.649938
    thumbnail_file_name: 20210224-234120.333795-thumbnail.jpg
  created: 1614210080.35794
  id: 40b46c01be7c4d28b357fc7c464ee3fe
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 129
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-25T16:58:38.878406'
    id: 849de191df8945df8ef99938c5d941cd
    image_file_name: 20210225-165838.878406-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - confidence: !!python/object/apply:numpy.core.multiarray.scalar
      - !!python/object/apply:numpy.dtype
        args:
        - f8
        - 0
        - 1
        state: !!python/tuple
        - 3
        - <
        - null
        - null
        - null
        - -1
        - -1
        - 0
      - !!binary |
        1pW1ST6I7j8=
      keypoint_corr:
        left hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - &id001 !!python/object/apply:numpy.dtype
            args:
            - f4
            - 0
            - 1
            state: !!python/tuple
            - 3
            - <
            - null
            - null
            - null
            - -1
            - -1
            - 0
          - !!binary |
            AAAiQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAwQg==
        left shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAeQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAAAA==
        right hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAA3Qw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAA0Qg==
        right shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABAQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AACAvw==
      label: FALL
      leaning_angle: 79.90647863847745
    json_file_name: 20210225-165838.878406-inference.json
    rel_dir: detections/20210225-070613.653252
    thumbnail_file_name: 20210225-165838.878406-thumbnail.jpg
  created: 1614272318.9029865
  id: 80bad7917e50482594233d0630213bd3
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 111
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-25T16:58:50.752860'
    id: 2c70b331a8674d40bf489ccf000ca4f7
    image_file_name: 20210225-165850.752860-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - confidence: !!python/object/apply:numpy.core.multiarray.scalar
      - !!python/object/apply:numpy.dtype
        args:
        - f8
        - 0
        - 1
        state: !!python/tuple
        - 3
        - <
        - null
        - null
        - null
        - -1
        - -1
        - 0
      - !!binary |
        MtGk0P9W7D8=
      keypoint_corr:
        left hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - &id001 !!python/object/apply:numpy.dtype
            args:
            - f4
            - 0
            - 1
            state: !!python/tuple
            - 3
            - <
            - null
            - null
            - null
            - -1
            - -1
            - 0
          - !!binary |
            AAAoQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAoQg==
        left shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAACQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAMQg==
        right hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAjQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAsQg==
        right shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAD6Qg==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAAQg==
      label: FALL
      leaning_angle: 64.6933141739948
    json_file_name: 20210225-165850.752860-inference.json
    rel_dir: detections/20210225-070613.653252
    thumbnail_file_name: 20210225-165850.752860-thumbnail.jpg
  created: 1614272330.7778678
  id: de1e85a8d37043dca8e89d837f208309
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 111
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-25T17:00:32.284116'
    id: a98bfb13edd746d6b9f0da82377dcda4
    image_file_name: 20210225-170032.284116-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - confidence: !!python/object/apply:numpy.core.multiarray.scalar
      - !!python/object/apply:numpy.dtype
        args:
        - f8
        - 0
        - 1
        state: !!python/tuple
        - 3
        - <
        - null
        - null
        - null
        - -1
        - -1
        - 0
      - !!binary |
        0FgwDa1V7j8=
      keypoint_corr:
        left hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - &id001 !!python/object/apply:numpy.dtype
            args:
            - f4
            - 0
            - 1
            state: !!python/tuple
            - 3
            - <
            - null
            - null
            - null
            - -1
            - -1
            - 0
          - !!binary |
            AAAzQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAA8Qg==
        left shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AACiQg==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAMQg==
        right hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABOQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABAQg==
        right shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABTQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AACAPw==
      label: FALL
      leaning_angle: 87.9886833212805
    json_file_name: 20210225-170032.284116-inference.json
    rel_dir: detections/20210225-070613.653252
    thumbnail_file_name: 20210225-170032.284116-thumbnail.jpg
  created: 1614272432.308417
  id: dff82c2f0a0f40a381eacad72ed11d48
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 111
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-25T17:00:45.564962'
    id: d21001f4ac7c4867968cc4803dc94a58
    image_file_name: 20210225-170045.564962-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - confidence: !!python/object/apply:numpy.core.multiarray.scalar
      - !!python/object/apply:numpy.dtype
        args:
        - f8
        - 0
        - 1
        state: !!python/tuple
        - 3
        - <
        - null
        - null
        - null
        - -1
        - -1
        - 0
      - !!binary |
        +p/tJVHg6z8=
      keypoint_corr:
        left hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - &id001 !!python/object/apply:numpy.dtype
            args:
            - f4
            - 0
            - 1
            state: !!python/tuple
            - 3
            - <
            - null
            - null
            - null
            - -1
            - -1
            - 0
          - !!binary |
            AAA1Qw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABAQg==
        left shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABwQg==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AACQQg==
        right hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABOQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABEQg==
        right shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABRQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AACAvw==
      label: FALL
      leaning_angle: 262.51255471789165
    json_file_name: 20210225-170045.564962-inference.json
    rel_dir: detections/20210225-070613.653252
    thumbnail_file_name: 20210225-170045.564962-thumbnail.jpg
  created: 1614272445.5896482
  id: d1a38fa90d224691a5a9ad50501f4405
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 111
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-25T21:38:11.363193'
    id: eb2bf00124c64d88958ca9d74e4dda08
    image_file_name: 20210225-213811.363193-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - confidence: !!python/object/apply:numpy.core.multiarray.scalar
      - !!python/object/apply:numpy.dtype
        args:
        - f8
        - 0
        - 1
        state: !!python/tuple
        - 3
        - <
        - null
        - null
        - null
        - -1
        - -1
        - 0
      - !!binary |
        Po3SMUEI0D8=
      keypoint_corr:
        left hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - &id001 !!python/object/apply:numpy.dtype
            args:
            - f4
            - 0
            - 1
            state: !!python/tuple
            - 3
            - <
            - null
            - null
            - null
            - -1
            - -1
            - 0
          - !!binary |
            AABqQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAQQg==
        left shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AACCQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABAwA==
        right hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABdQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAQQg==
        right shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAA/Qw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AADAwA==
      label: FALL
      leaning_angle: 64.48867299944118
    json_file_name: 20210225-213811.363193-inference.json
    rel_dir: detections/20210225-070613.653252
    thumbnail_file_name: 20210225-213811.363193-thumbnail.jpg
  created: 1614289091.386901
  id: 7a1263a7e6114ea9b6d602cd18adb241
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 111
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py

- args:
    datetime: '2021-02-25T22:59:46.635374'
    id: 3aab6565e5f64fbfac30db693767030b
    image_file_name: 20210225-225946.635374-image.jpg
    inference_meta:
      display: Fall Detection
    inference_result:
    - confidence: !!python/object/apply:numpy.core.multiarray.scalar
      - !!python/object/apply:numpy.dtype
        args:
        - f8
        - 0
        - 1
        state: !!python/tuple
        - 3
        - <
        - null
        - null
        - null
        - -1
        - -1
        - 0
      - !!binary |
        lphWQoca5z8=
      keypoint_corr:
        left hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - &id001 !!python/object/apply:numpy.dtype
            args:
            - f4
            - 0
            - 1
            state: !!python/tuple
            - 3
            - <
            - null
            - null
            - null
            - -1
            - -1
            - 0
          - !!binary |
            AABYQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AACwQQ==
        left shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAQQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AACAQQ==
        right hip:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AABHQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AADQQQ==
        right shoulder:
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAAJQw==
        - !!python/object/apply:numpy.core.multiarray.scalar
          - *id001
          - !!binary |
            AAC4QQ==
      label: FALL
      leaning_angle: 77.64171494068236
    json_file_name: 20210225-225946.635374-inference.json
    rel_dir: detections/20210225-070613.653252
    thumbnail_file_name: 20210225-225946.635374-thumbnail.jpg
  created: 1614293986.659398
  id: c2a4335055ea47339507682eb426768c
  message: Detection Event
  priority: INFO
  source_code:
    funcName: _save_sample
    lineno: 111
    pathname: /opt/ambianic-edge/src/ambianic/pipeline/store.py
ivelin commented 3 years ago

@bhavikapanara here is a possible solution to the graceful recovery from corrupted event timeline files.

Starting here:

           try:
                timeline_events = yaml.safe_load(pf)
                timeline_events += events_queue
            except (
                yaml.reader.ReaderError, 
                yaml.scanner.ScannerError,
            ):
                log.exception("Detected unreadable timeline, removing %s" % file_path)
                remove_timeline(file_path)
                continue

add handler for the new exception we are seeing : yaml.composer.ComposerError: found duplicate anchor 'id001'; first occurrence

as follows

           try:
                timeline_events = yaml.safe_load(pf)
                timeline_events += events_queue
            except (
                yaml.reader.ReaderError, 
                yaml.scanner.ScannerError,
                yaml.composer.ComposerError
            ) as e:
                log.exception(f"Detected unreadable timeline, removing {file_path}", e)
                remove_timeline(file_path)
                continue

This will unfortunately wipe out all events in the file that has corrupted data, including good ones, which is not ideal, but hopefully we will not get into this same type of issues anytime soon.

bhavikapanara commented 3 years ago

@ivelin Instead of removing the timeline, can we ignore the only corrupt event data to render on UI?

ivelin commented 3 years ago

@ivelin Instead of removing the timeline, can we ignore the only corrupt event data to render on UI?

That would be better. How do you suggest we do that?

ivelin commented 3 years ago

Users are starting to complain that their edge is not responsive. We need to push a fix sooner than later.

bhavikapanara commented 3 years ago

Yes...will do that as soon as possible

github-actions[bot] commented 3 years ago

:tada: This issue has been resolved in version 1.14.5 :tada:

The release is available on GitHub release

Your semantic-release bot :package::rocket: