revert changes to consumers

pull/35003/head
Cameron Clough 1 week ago
parent 805ee4d999
commit a29810ec83
  1. 38
      system/athena/registration.py
  2. 57
      system/manager/build.py
  3. 5
      system/manager/manager.py

@ -3,37 +3,23 @@ import time
import json import json
import jwt import jwt
from pathlib import Path from pathlib import Path
import threading
import pyray as rl
from datetime import datetime, timedelta, UTC from datetime import datetime, timedelta, UTC
from openpilot.common.api import api_get from openpilot.common.api import api_get
from openpilot.common.params import Params from openpilot.common.params import Params
from openpilot.common.spinner import Spinner
from openpilot.selfdrive.selfdrived.alertmanager import set_offroad_alert from openpilot.selfdrive.selfdrived.alertmanager import set_offroad_alert
from openpilot.system.hardware import HARDWARE, PC from openpilot.system.hardware import HARDWARE, PC
from openpilot.system.hardware.hw import Paths from openpilot.system.hardware.hw import Paths
from openpilot.common.swaglog import cloudlog from openpilot.common.swaglog import cloudlog
from openpilot.system.ui.spinner import Spinner
from openpilot.system.ui.lib.application import gui_app
UNREGISTERED_DONGLE_ID = "UnregisteredDevice"
spinner: Spinner | None = None UNREGISTERED_DONGLE_ID = "UnregisteredDevice"
def is_registered_device() -> bool: def is_registered_device() -> bool:
dongle = Params().get("DongleId", encoding='utf-8') dongle = Params().get("DongleId", encoding='utf-8')
return dongle not in (None, UNREGISTERED_DONGLE_ID) return dongle not in (None, UNREGISTERED_DONGLE_ID)
def _show_spinner_window(end_evt: threading.Event):
global spinner
gui_app.init_window("registering device")
spinner = Spinner()
while not end_evt.is_set():
rl.begin_drawing()
rl.clear_background(rl.BLACK)
spinner.render()
rl.end_drawing()
gui_app.close()
def register(show_spinner=False) -> str | None: def register(show_spinner=False) -> str | None:
""" """
@ -58,12 +44,9 @@ def register(show_spinner=False) -> str | None:
dongle_id = UNREGISTERED_DONGLE_ID dongle_id = UNREGISTERED_DONGLE_ID
cloudlog.warning(f"missing public key: {pubkey}") cloudlog.warning(f"missing public key: {pubkey}")
elif dongle_id is None: elif dongle_id is None:
global spinner
spinner_thread = None
if show_spinner: if show_spinner:
end_evt = threading.Event() spinner = Spinner()
spinner_thread = threading.Thread(target=_show_spinner_window, args=(end_evt,)) spinner.update("registering device")
spinner_thread.start()
# Create registration token, in the future, this key will make JWTs directly # Create registration token, in the future, this key will make JWTs directly
with open(Paths.persist_root()+"/comma/id_rsa.pub") as f1, open(Paths.persist_root()+"/comma/id_rsa") as f2: with open(Paths.persist_root()+"/comma/id_rsa.pub") as f1, open(Paths.persist_root()+"/comma/id_rsa") as f2:
@ -82,8 +65,8 @@ def register(show_spinner=False) -> str | None:
cloudlog.exception("Error getting imei, trying again...") cloudlog.exception("Error getting imei, trying again...")
time.sleep(1) time.sleep(1)
if time.monotonic() - start_time > 60 and spinner: if time.monotonic() - start_time > 60 and show_spinner:
spinner.set_text(f"registering device - serial: {serial}, IMEI: ({imei1}, {imei2})") spinner.update(f"registering device - serial: {serial}, IMEI: ({imei1}, {imei2})")
backoff = 0 backoff = 0
start_time = time.monotonic() start_time = time.monotonic()
@ -106,12 +89,11 @@ def register(show_spinner=False) -> str | None:
backoff = min(backoff + 1, 15) backoff = min(backoff + 1, 15)
time.sleep(backoff) time.sleep(backoff)
if time.monotonic() - start_time > 60 and spinner: if time.monotonic() - start_time > 60 and show_spinner:
spinner.set_text(f"registering device - serial: {serial}, IMEI: ({imei1}, {imei2})") spinner.update(f"registering device - serial: {serial}, IMEI: ({imei1}, {imei2})")
if spinner_thread: if show_spinner:
end_evt.set() spinner.close()
spinner_thread.join()
if dongle_id: if dongle_id:
params.put("DongleId", dongle_id) params.put("DongleId", dongle_id)

@ -1,18 +1,15 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os import os
import subprocess import subprocess
import select
from pathlib import Path from pathlib import Path
import pyray as rl
# NOTE: Do NOT import anything here that needs be built (e.g. params) # NOTE: Do NOT import anything here that needs be built (e.g. params)
from openpilot.common.basedir import BASEDIR from openpilot.common.basedir import BASEDIR
from openpilot.common.spinner import Spinner
from openpilot.common.text_window import TextWindow
from openpilot.system.hardware import HARDWARE, AGNOS from openpilot.system.hardware import HARDWARE, AGNOS
from openpilot.common.swaglog import cloudlog, add_file_handler from openpilot.common.swaglog import cloudlog, add_file_handler
from openpilot.system.version import get_build_metadata from openpilot.system.version import get_build_metadata
from openpilot.system.ui.lib.application import gui_app
from openpilot.system.ui.spinner import Spinner
from openpilot.system.ui.text import TextWindow
MAX_CACHE_SIZE = 4e9 if "CI" in os.environ else 2e9 MAX_CACHE_SIZE = 4e9 if "CI" in os.environ else 2e9
CACHE_DIR = Path("/data/scons_cache" if AGNOS else "/tmp/scons_cache") CACHE_DIR = Path("/data/scons_cache" if AGNOS else "/tmp/scons_cache")
@ -20,50 +17,39 @@ CACHE_DIR = Path("/data/scons_cache" if AGNOS else "/tmp/scons_cache")
TOTAL_SCONS_NODES = 3130 TOTAL_SCONS_NODES = 3130
MAX_BUILD_PROGRESS = 100 MAX_BUILD_PROGRESS = 100
def build(dirty: bool = False, minimal: bool = False) -> None: def build(spinner: Spinner, dirty: bool = False, minimal: bool = False) -> None:
env = os.environ.copy() env = os.environ.copy()
env['SCONS_PROGRESS'] = "1" env['SCONS_PROGRESS'] = "1"
nproc = os.cpu_count() or 2 nproc = os.cpu_count()
if nproc is None:
nproc = 2
extra_args = ["--minimal"] if minimal else [] extra_args = ["--minimal"] if minimal else []
CI = os.getenv("CI") is not None
if AGNOS: if AGNOS:
HARDWARE.set_power_save(False) HARDWARE.set_power_save(False)
os.sched_setaffinity(0, range(8)) # ensure we can use the isolcpus cores os.sched_setaffinity(0, range(8)) # ensure we can use the isolcpus cores
# building with all cores can result in using too # building with all cores can result in using too
# much memory, so retry with less parallelism # much memory, so retry with less parallelism
if not CI:
gui_app.init_window("Spinner")
spinner = Spinner()
compile_output: list[bytes] = [] compile_output: list[bytes] = []
for n in (nproc, nproc/2, 1): for n in (nproc, nproc/2, 1):
compile_output.clear() compile_output.clear()
scons: subprocess.Popen = subprocess.Popen(["scons", f"-j{int(n)}", "--cache-populate", *extra_args], cwd=BASEDIR, env=env, stderr=subprocess.PIPE) scons: subprocess.Popen = subprocess.Popen(["scons", f"-j{int(n)}", "--cache-populate", *extra_args], cwd=BASEDIR, env=env, stderr=subprocess.PIPE)
assert scons.stderr is not None assert scons.stderr is not None
os.set_blocking(scons.stderr.fileno(), False) # Non-blocking reads
# Read progress from stderr and update spinner # Read progress from stderr and update spinner
if not CI:
spinner.set_text("0")
while scons.poll() is None: while scons.poll() is None:
try: try:
if not CI: line = scons.stderr.readline()
rl.begin_drawing() if line is None:
rl.clear_background(rl.BLACK) continue
spinner.render()
rl.end_drawing()
if scons.stderr in select.select([scons.stderr], [], [], 0.02)[0]:
line = scons.stderr.readline()
if not line:
continue
line = line.rstrip() line = line.rstrip()
prefix = b'progress: ' prefix = b'progress: '
if line.startswith(prefix): if line.startswith(prefix):
if not CI: i = int(line[len(prefix):])
i = int(line[len(prefix):]) spinner.update_progress(MAX_BUILD_PROGRESS * min(1., i / TOTAL_SCONS_NODES), 100.)
spinner.set_text(str(int(MAX_BUILD_PROGRESS * min(1., i / TOTAL_SCONS_NODES))))
elif len(line): elif len(line):
compile_output.append(line) compile_output.append(line)
print(line.decode('utf8', 'replace')) print(line.decode('utf8', 'replace'))
@ -76,7 +62,7 @@ def build(dirty: bool = False, minimal: bool = False) -> None:
if scons.returncode != 0: if scons.returncode != 0:
# Read remaining output # Read remaining output
if scons.stderr is not None: if scons.stderr is not None:
compile_output += [line for line in scons.stderr.read().split(b'\n') if not line.startswith(b'progress')] compile_output += scons.stderr.read().split(b'\n')
# Build failed log errors # Build failed log errors
error_s = b"\n".join(compile_output).decode('utf8', 'replace') error_s = b"\n".join(compile_output).decode('utf8', 'replace')
@ -84,13 +70,10 @@ def build(dirty: bool = False, minimal: bool = False) -> None:
cloudlog.error("scons build failed\n" + error_s) cloudlog.error("scons build failed\n" + error_s)
# Show TextWindow # Show TextWindow
if not CI: spinner.close()
text_window = TextWindow("openpilot failed to build\n \n" + error_s) if not os.getenv("CI"):
while True: with TextWindow("openpilot failed to build\n \n" + error_s) as t:
rl.begin_drawing() t.wait_for_exit()
rl.clear_background(rl.BLACK)
text_window.render()
rl.end_drawing()
exit(1) exit(1)
# enforce max cache size # enforce max cache size
@ -105,5 +88,7 @@ def build(dirty: bool = False, minimal: bool = False) -> None:
if __name__ == "__main__": if __name__ == "__main__":
spinner = Spinner()
spinner.update_progress(0, 100)
build_metadata = get_build_metadata() build_metadata = get_build_metadata()
build(build_metadata.openpilot.is_dirty, minimal = AGNOS) build(spinner, build_metadata.openpilot.is_dirty, minimal = AGNOS)

@ -9,6 +9,7 @@ from cereal import log
import cereal.messaging as messaging import cereal.messaging as messaging
import openpilot.system.sentry as sentry import openpilot.system.sentry as sentry
from openpilot.common.params import Params, ParamKeyType from openpilot.common.params import Params, ParamKeyType
from openpilot.common.text_window import TextWindow
from openpilot.system.hardware import HARDWARE from openpilot.system.hardware import HARDWARE
from openpilot.system.manager.helpers import unblock_stdout, write_onroad_params, save_bootlog from openpilot.system.manager.helpers import unblock_stdout, write_onroad_params, save_bootlog
from openpilot.system.manager.process import ensure_running from openpilot.system.manager.process import ensure_running
@ -17,7 +18,6 @@ from openpilot.system.athena.registration import register, UNREGISTERED_DONGLE_I
from openpilot.common.swaglog import cloudlog, add_file_handler from openpilot.common.swaglog import cloudlog, add_file_handler
from openpilot.system.version import get_build_metadata, terms_version, training_version from openpilot.system.version import get_build_metadata, terms_version, training_version
from openpilot.system.hardware.hw import Paths from openpilot.system.hardware.hw import Paths
from openpilot.system.ui.text import show_text_in_window
def manager_init() -> None: def manager_init() -> None:
@ -221,7 +221,8 @@ if __name__ == "__main__":
# Show last 3 lines of traceback # Show last 3 lines of traceback
error = traceback.format_exc(-3) error = traceback.format_exc(-3)
error = "Manager failed to start\n\n" + error error = "Manager failed to start\n\n" + error
show_text_in_window(error) with TextWindow(error) as t:
t.wait_for_exit()
raise raise

Loading…
Cancel
Save