mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-07-16 06:32:16 +08:00
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:
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user