tools: add bootlog helpers (#23504)
	
		
	
				
					
				
			* tools: add bootlog helpers
* this is nice
* types
old-commit-hash: 7d7c0ff35f
			
			
				vw-mqb-aeb
			
			
		
							parent
							
								
									e4c2c2cf2e
								
							
						
					
					
						commit
						8f9a6b06df
					
				
				 3 changed files with 71 additions and 7 deletions
			
			
		| @ -0,0 +1,48 @@ | ||||
| import datetime | ||||
| import functools | ||||
| import re | ||||
| 
 | ||||
| from tools.lib.auth_config import get_token | ||||
| from tools.lib.api import CommaApi | ||||
| from tools.lib.helpers import RE, timestamp_to_datetime | ||||
| 
 | ||||
| 
 | ||||
| @functools.total_ordering | ||||
| class Bootlog: | ||||
|   def __init__(self, url: str): | ||||
|     self._url = url | ||||
| 
 | ||||
|     r = re.search(RE.BOOTLOG_NAME, url) | ||||
|     if not r: | ||||
|       raise Exception(f"Unable to parse: {url}") | ||||
| 
 | ||||
|     self._dongle_id = r.group('dongle_id') | ||||
|     self._timestamp = r.group('timestamp') | ||||
| 
 | ||||
|   @property | ||||
|   def url(self) -> str: | ||||
|     return self._url | ||||
| 
 | ||||
|   @property | ||||
|   def dongle_id(self) -> str: | ||||
|     return self._dongle_id | ||||
| 
 | ||||
|   @property | ||||
|   def timestamp(self) -> str: | ||||
|     return self._timestamp | ||||
| 
 | ||||
|   @property | ||||
|   def datetime(self) -> datetime.datetime: | ||||
|     return timestamp_to_datetime(self._timestamp) | ||||
| 
 | ||||
|   def __eq__(self, b) -> bool: | ||||
|     return self.datetime == b.datetime | ||||
| 
 | ||||
|   def __lt__(self, b) -> bool: | ||||
|     return self.datetime < b.datetime | ||||
| 
 | ||||
| 
 | ||||
| def get_bootlogs(dongle_id: str): | ||||
|   api = CommaApi(get_token()) | ||||
|   r = api.get(f'v1/devices/{dongle_id}/bootlogs') | ||||
|   return [Bootlog(b) for b in r] | ||||
| @ -0,0 +1,20 @@ | ||||
| import datetime | ||||
| 
 | ||||
| TIME_FMT = "%Y-%m-%d--%H-%M-%S" | ||||
| 
 | ||||
| # regex patterns | ||||
| class RE: | ||||
|   DONGLE_ID =  r'(?P<dongle_id>[a-z0-9]{16})' | ||||
|   TIMESTAMP = r'(?P<timestamp>[0-9]{4}-[0-9]{2}-[0-9]{2}--[0-9]{2}-[0-9]{2}-[0-9]{2})' | ||||
|   ROUTE_NAME = r'{}[|_/]{}'.format(DONGLE_ID, TIMESTAMP) | ||||
|   SEGMENT_NAME = r'{}(?:--|/)(?P<segment_num>[0-9]+)'.format(ROUTE_NAME) | ||||
|   BOOTLOG_NAME = ROUTE_NAME | ||||
| 
 | ||||
|   EXPLORER_FILE = r'^(?P<segment_name>{})--(?P<file_name>[a-z]+\.[a-z0-9]+)$'.format(SEGMENT_NAME) | ||||
|   OP_SEGMENT_DIR = r'^(?P<segment_name>{})$'.format(SEGMENT_NAME) | ||||
| 
 | ||||
| def timestamp_to_datetime(t: str) -> datetime.datetime: | ||||
|   """ | ||||
|     Convert an openpilot route timestamp to a python datetime | ||||
|   """ | ||||
|   return datetime.datetime.strptime(t, TIME_FMT) | ||||
					Loading…
					
					
				
		Reference in new issue