From af3cacae5345e1a0f5eb3ad1a78b6f422937da38 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 17 Jun 2024 12:33:20 -0500 Subject: [PATCH] wip --- selfdrive/manager/manager.py | 6 +++++- selfdrive/manager/process.py | 26 ++++++++++++++++++++------ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index b1901dc..8244ef4 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -366,6 +366,10 @@ def manager_thread(frogpilot_functions) -> None: cloudlog.info("manager start") cloudlog.info({"environ": os.environ}) + timestamp = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + log_dir = f"/data/log2/{timestamp}" + os.makedirs(log_dir, exist_ok=True) + params = Params() params_memory = Params("/dev/shm/params") @@ -380,7 +384,7 @@ def manager_thread(frogpilot_functions) -> None: pm = messaging.PubMaster(['managerState']) write_onroad_params(False, params) - ensure_running(managed_processes.values(), False, params=params, CP=sm['carParams'], not_run=ignore) + ensure_running(managed_processes.values(), False, params=params, CP=sm['carParams'], not_run=ignore, log_dir=log_dir) started_prev = False diff --git a/selfdrive/manager/process.py b/selfdrive/manager/process.py index 607d3d0..93ffc98 100755 --- a/selfdrive/manager/process.py +++ b/selfdrive/manager/process.py @@ -20,8 +20,9 @@ from openpilot.common.swaglog import cloudlog WATCHDOG_FN = "/dev/shm/wd_" ENABLE_WATCHDOG = os.getenv("NO_WATCHDOG") is None +_log_dir = None -def launcher(proc: str, name: str) -> None: +def launcher(proc: str, name: str, log_path: str) -> None: try: # import the process mod = importlib.import_module(proc) @@ -40,9 +41,10 @@ def launcher(proc: str, name: str) -> None: mod.main() except KeyboardInterrupt: cloudlog.warning(f"child {proc} got SIGINT") - except Exception: + except Exception as e: # can't install the crash handler because sys.excepthook doesn't play nice # with threads, so catch it here. + with open(log_path, 'a') as file: file.write(e+"\n") sentry.capture_exception() raise @@ -189,6 +191,9 @@ class NativeProcess(ManagerProcess): if self.proc is not None: return + + global _log_dir + log_path = _log_dir+"/"+self.name+".log" cwd = os.path.join(BASEDIR, self.cwd) cloudlog.info(f"starting process {self.name}") @@ -221,8 +226,10 @@ class PythonProcess(ManagerProcess): if self.proc is not None: return + global _log_dir + log_path = _log_dir+"/"+self.name+".log" cloudlog.info(f"starting python {self.module}") - self.proc = Process(name=self.name, target=self.launcher, args=(self.module, self.name)) + self.proc = Process(name=self.name, target=self.launcher, args=(self.module, self.name, log_path)) self.proc.start() self.watchdog_seen = False self.shutting_down = False @@ -238,6 +245,7 @@ class DaemonProcess(ManagerProcess): self.enabled = enabled self.params = None + @staticmethod def should_run(started, params, CP): return True @@ -249,6 +257,9 @@ class DaemonProcess(ManagerProcess): if self.params is None: self.params = Params() + global _log_dir + log_path = _log_dir+"/"+self.name+".log" + pid = self.params.get(self.param_name, encoding='utf-8') if pid is not None: try: @@ -264,8 +275,8 @@ class DaemonProcess(ManagerProcess): cloudlog.info(f"starting daemon {self.name}") proc = subprocess.Popen(['python', '-m', self.module], stdin=open('/dev/null'), - stdout=open('/dev/null', 'w'), - stderr=open('/dev/null', 'w'), + stdout=open(log_path, 'a'), + stderr=subprocess.STDOUT, preexec_fn=os.setpgrp) self.params.put(self.param_name, str(proc.pid)) @@ -275,7 +286,10 @@ class DaemonProcess(ManagerProcess): def ensure_running(procs: ValuesView[ManagerProcess], started: bool, params=None, CP: car.CarParams=None, - not_run: list[str] | None=None) -> list[ManagerProcess]: + not_run: list[str] | None=None, log_dir: str = None) -> list[ManagerProcess]: + global _log_dir + _log_dir = log_dir + if not_run is None: not_run = []