tools: add bootlog helpers (#23504)
* tools: add bootlog helpers
* this is nice
* types
old-commit-hash: 7d7c0ff35f
commatwo_master
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