Tmux error viewer: catch more exceptions (#117)

* Tmux error viewer: new file name convention and cleanup

* log in local_osm_install

* show on ui

* add this

* not needed

* just need these

* unused

* log custom_dep

* rename

* cleaner
This commit is contained in:
Jason Wen
2023-06-09 15:11:31 -04:00
committed by GitHub
parent 1a87f92097
commit dde5309015
4 changed files with 82 additions and 56 deletions
+36 -23
View File
@@ -5,7 +5,10 @@ import errno
import shutil
import tarfile
import time
import traceback
from common.basedir import BASEDIR
from common.text_window import TextWindow
import selfdrive.sentry as sentry
from urllib.request import urlopen
from glob import glob
import subprocess
@@ -90,26 +93,36 @@ def install_dep(spinner):
if __name__ == "__main__" and (OPSPLINE_SPEC is None or OVERPY_SPEC is None):
spinner = Spinner()
preload_fault = False
if os.path.exists(PRELOADED_DEP_FILE):
spinner.update("Loading preloaded dependencies")
try:
with tarfile.open(PRELOADED_DEP_FILE, "r:xz") as tar:
for member in tar.getmembers():
split_components = member.name.split('/')
if len(split_components) > 1:
member.name = '/'.join(split_components[1:])
tar.extract(member, path=THIRD_PARTY_DIR)
print(f"SP_LOG: Preloaded dependencies extracted to {THIRD_PARTY_DIR}")
except Exception as e:
preload_fault = True
print(f"SP_LOG: An error occurred while extracting preloaded dependencies: {e}")
if not os.path.exists(PRELOADED_DEP_FILE) or preload_fault:
if os.path.exists(THIRD_PARTY_DIR_SP):
spinner.update("Loading dependencies")
command = f'rm -rf {THIRD_PARTY_DIR}; cp -rf {THIRD_PARTY_DIR_SP} {THIRD_PARTY_DIR}'
process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
print(f"SP_LOG: Removed directory {THIRD_PARTY_DIR}")
print(f"SP_LOG: Copied {THIRD_PARTY_DIR_SP} to {THIRD_PARTY_DIR}")
else:
spinner.update("Waiting for internet")
install_dep(spinner)
try:
if os.path.exists(PRELOADED_DEP_FILE):
spinner.update("Loading preloaded dependencies")
try:
with tarfile.open(PRELOADED_DEP_FILE, "r:xz") as tar:
for member in tar.getmembers():
split_components = member.name.split('/')
if len(split_components) > 1:
member.name = '/'.join(split_components[1:])
tar.extract(member, path=THIRD_PARTY_DIR)
print(f"SP_LOG: Preloaded dependencies extracted to {THIRD_PARTY_DIR}")
except Exception as e:
preload_fault = True
print(f"SP_LOG: An error occurred while extracting preloaded dependencies: {e}")
if not os.path.exists(PRELOADED_DEP_FILE) or preload_fault:
if os.path.exists(THIRD_PARTY_DIR_SP):
spinner.update("Loading dependencies")
command = f'rm -rf {THIRD_PARTY_DIR}; cp -rf {THIRD_PARTY_DIR_SP} {THIRD_PARTY_DIR}'
process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
print(f"SP_LOG: Removed directory {THIRD_PARTY_DIR}")
print(f"SP_LOG: Copied {THIRD_PARTY_DIR_SP} to {THIRD_PARTY_DIR}")
else:
spinner.update("Waiting for internet")
install_dep(spinner)
except Exception:
sentry.init(sentry.SentryProject.SELFDRIVE)
traceback.print_exc()
sentry.capture_exception()
error = traceback.format_exc(-3)
error = "Dependency Manager failed to start\n\n" + error
with TextWindow(error) as t:
t.wait_for_exit()
+33 -20
View File
@@ -2,13 +2,16 @@
import os
import subprocess
import sys
import time
import traceback
# NOTE: Do NOT import anything here that needs be built (e.g. params)
from common.basedir import BASEDIR
from common.params import Params
from common.spinner import Spinner
from common.text_window import TextWindow
import selfdrive.sentry as sentry
from selfdrive.manager.custom_dep import wait_for_internet_connection
import time
def install_local_osm(_spinner):
@@ -36,24 +39,34 @@ def _install(_spinner, script, title):
if __name__ == "__main__":
from selfdrive.mapd.lib.helpers import is_local_osm_installed, timestamp_local_osm_db, is_osm_db_up_to_date, OSM_LOCAL_PATH
sys.path.append(os.path.join(BASEDIR, "third_party/mapd"))
params = Params()
update_osm_db_check = params.get_bool("OsmDbUpdatesCheck")
if not (os.path.exists(f"{OSM_LOCAL_PATH}/db") or
os.path.exists(f"{OSM_LOCAL_PATH}/v0.7.57")) or update_osm_db_check:
spinner = Spinner()
spinner.update("Waiting for internet connection...")
if wait_for_internet_connection(return_on_failure=True):
is_osm_installed = is_local_osm_installed(params)
is_db_updated = is_osm_db_up_to_date()
print(f'Local OSM Installer:\nOSM currently installed: {is_osm_installed}\nDB up to date: {is_db_updated}')
try:
from selfdrive.mapd.lib.helpers import is_local_osm_installed, timestamp_local_osm_db, is_osm_db_up_to_date, OSM_LOCAL_PATH
sys.path.append(os.path.join(BASEDIR, "third_party/mapd"))
params = Params()
update_osm_db_check = params.get_bool("OsmDbUpdatesCheck")
if not (os.path.exists(f"{OSM_LOCAL_PATH}/db") or
os.path.exists(f"{OSM_LOCAL_PATH}/v0.7.57")) or update_osm_db_check:
spinner = Spinner()
spinner.update("Waiting for internet connection...")
if wait_for_internet_connection(return_on_failure=True):
is_osm_installed = is_local_osm_installed(params)
is_db_updated = is_osm_db_up_to_date()
print(f'Local OSM Installer:\nOSM currently installed: {is_osm_installed}\nDB up to date: {is_db_updated}')
if not is_osm_installed:
install_local_osm(spinner)
if not is_db_updated:
install_osm_db(spinner)
timestamp_local_osm_db()
spinner.close()
if not is_osm_installed:
install_local_osm(spinner)
if not is_db_updated:
install_osm_db(spinner)
timestamp_local_osm_db()
spinner.close()
params.put_bool("OsmDbUpdatesCheck", False)
params.put_bool("OsmDbUpdatesCheck", False)
except Exception:
sentry.init(sentry.SentryProject.SELFDRIVE)
traceback.print_exc()
sentry.capture_exception()
error = traceback.format_exc(-3)
error = "OSM Offline Database Manager failed to start\n\n" + error
with TextWindow(error) as t:
t.wait_for_exit()
+2 -3
View File
@@ -17,7 +17,6 @@ from system.hardware import HARDWARE, PC
from selfdrive.manager.helpers import unblock_stdout, write_onroad_params
from selfdrive.manager.process import ensure_running
from selfdrive.manager.process_config import managed_processes
from selfdrive.sentry import CRASHES_DIR
from selfdrive.athena.registration import register, UNREGISTERED_DONGLE_ID
from system.swaglog import cloudlog, add_file_handler
from system.version import is_dirty, get_commit, get_version, get_origin, get_short_branch, \
@@ -164,8 +163,8 @@ def manager_init() -> None:
dirty=is_dirty(),
device=HARDWARE.get_device_type())
if os.path.isfile(f'{CRASHES_DIR}/error.txt'):
os.remove(f'{CRASHES_DIR}/error.txt')
if os.path.isfile(os.path.join(sentry.CRASHES_DIR, 'error.txt')):
os.remove(os.path.join(sentry.CRASHES_DIR, 'error.txt'))
def manager_prepare() -> None:
+11 -10
View File
@@ -23,7 +23,7 @@ class SentryProject(Enum):
SELFDRIVE_NATIVE = "https://7e3be9bfcfe04c9abe58bd25fe290d1a@o1138119.ingest.sentry.io/6191481"
CRASHES_DIR = os.path.join('/data/community/crashes')
CRASHES_DIR = '/data/community/crashes/'
ret = car.CarParams.new_message()
candidate = ret.carFingerprint
params = Params()
@@ -73,15 +73,16 @@ def save_exception(exc_text):
if not os.path.exists(CRASHES_DIR):
os.makedirs(CRASHES_DIR)
log_file = '{}/{}'.format(CRASHES_DIR, datetime.now().strftime('%m-%d-%Y--%I:%M.%S-%p.log'))
log_file_2 = f'{CRASHES_DIR}/error.txt'
with open(log_file, 'w') as f:
f.write(exc_text)
f.close()
with open(log_file_2, 'w') as f2:
f2.write(exc_text)
f2.close()
print('Logged current crash to {}'.format(log_file))
files = [
os.path.join(CRASHES_DIR, datetime.now().strftime('%Y-%m-%d--%H-%M-%S.log')),
os.path.join(CRASHES_DIR, 'error.txt')
]
for file in files:
with open(file, 'w') as f:
f.write(exc_text)
print('Logged current crash to {}'.format(files))
def bind_user(**kwargs) -> None: