55
66import os
77import requests
8- import datetime
8+ from datetime import datetime , timezone , timedelta
99import time
1010from utils .flash_tools import flash_device , reset_device
1111from utils .logger import get_logger
2121url = "https://api.memfault.com/api/v0"
2222auth = ("" , MEMFAULT_ORG_TOKEN )
2323
24- def get_event_log ():
25- response = requests .get (f"{ url } /organizations/{ MEMFAULT_ORG } /projects/{ MEMFAULT_PROJ } /event-log" , auth = auth )
26- response .raise_for_status ()
27- return response .json ()
24+ def get_chronicler_events (
25+ device_serial = None ,
26+ device_id = None ,
27+ event_types = ("ReceivedDataRebootEvent" , "ReceivedDataHeartbeatEvent" , "ReceivedDataTraceEvent" ),
28+ levels = ("INFO" , "ERROR" ),
29+ start = None , end = None
30+ ):
31+ if not start :
32+ start = datetime .now (timezone .utc ) - timedelta (hours = 1 )
33+ if not end :
34+ end = datetime .now (timezone .utc )
2835
29- def get_latest_events (event_type , device_id ):
30- data = get_event_log ()
31- latest_events = [
32- x
33- for x in data ["data" ]
34- if x ["device_serial" ] == str (device_id ) and x ["type" ] == event_type
35- ]
36- return latest_events
36+ params = {
37+ "device_id" : device_id ,
38+ "device_serial" : device_serial ,
39+ "event_types" : event_types ,
40+ "levels" : levels ,
41+ "start" : datetime .isoformat (start ),
42+ "end" : datetime .isoformat (end )
43+ }
44+
45+ r = requests .get (
46+ f"{ url } /organizations/{ MEMFAULT_ORG } /projects/{ MEMFAULT_PROJ } /chronicler-logs" ,
47+ auth = auth ,
48+ params = params ,
49+ timeout = 10
50+ )
51+ r .raise_for_status ()
52+ return r .json ()["data" ]
53+
54+ def get_latest_heartbeat_events (device_serial ):
55+ return get_chronicler_events (
56+ device_serial = device_serial ,
57+ event_types = ["ReceivedDataHeartbeatEvent" ]
58+ )
3759
3860def timestamp (event ):
39- return datetime .datetime .strptime (
40- event ["captured_date" ], "%Y-%m-%dT%H:%M:%S.%f%z"
41- )
61+ return datetime .fromisoformat (event ["event_data" ]["received_event" ]["captured_date" ])
4262
4363def wait_for_heartbeat (timestamp_old_heartbeat_evt ):
4464 new_heartbeat_found = False
4565 start = time .time ()
4666 while time .time () - start < MEMFAULT_TIMEOUT :
4767 logger .debug ("Looking for latest heartbeat events" )
4868 time .sleep (5 )
49- new_heartbeat_events = get_latest_events ( "HEARTBEAT" , IMEI )
69+ new_heartbeat_events = get_latest_heartbeat_events ( IMEI )
5070 if not new_heartbeat_events :
5171 continue
5272 try :
53- unexpected_reboot_count = new_heartbeat_events [0 ]["summary " ]["event_info" ]["metrics" ]["MemfaultSdkMetric_UnexpectedRebootCount" ]
73+ unexpected_reboot_count = new_heartbeat_events [0 ]["event_data" ][ "received_event " ]["event_info" ]["metrics" ]["MemfaultSdkMetric_UnexpectedRebootCount" ]
5474 except (KeyError , ValueError ):
5575 continue
5676 if unexpected_reboot_count < 1 :
@@ -75,7 +95,7 @@ def test_memfault(t91x_board, hex_file):
7595 ]
7696
7797 # Save timestamp of latest heartbeat event
78- heartbeat_events = get_latest_events ( "HEARTBEAT" , IMEI )
98+ heartbeat_events = get_latest_heartbeat_events ( IMEI )
7999 timestamp_old_heartbeat_evt = timestamp (heartbeat_events [0 ]) if heartbeat_events else None
80100
81101 t91x_board .uart .flush ()
0 commit comments