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