revert changes to consumers

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

@ -3,37 +3,23 @@ import time
import json
import jwt
from pathlib import Path
import threading
import pyray as rl
from datetime import datetime, timedelta, UTC
from openpilot.common.api import api_get
from openpilot.common.params import Params
from openpilot.common.spinner import Spinner
from openpilot.selfdrive.selfdrived.alertmanager import set_offroad_alert
from openpilot.system.hardware import HARDWARE, PC
from openpilot.system.hardware.hw import Paths
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:
dongle = Params().get("DongleId", encoding='utf-8')
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:
"""
@ -58,12 +44,9 @@ def register(show_spinner=False) -> str | None:
dongle_id = UNREGISTERED_DONGLE_ID
cloudlog.warning(f"missing public key: {pubkey}")
elif dongle_id is None:
global spinner
spinner_thread = None
if show_spinner:
end_evt = threading.Event()
spinner_thread = threading.Thread(target=_show_spinner_window, args=(end_evt,))
spinner_thread.start()
spinner = Spinner()
spinner.update("registering device")
# 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:
@ -82,8 +65,8 @@ def register(show_spinner=False) -> str | None:
cloudlog.exception("Error getting imei, trying again...")
time.sleep(1)
if time.monotonic() - start_time > 60 and spinner:
spinner.set_text(f"registering device - serial: {serial}, IMEI: ({imei1}, {imei2})")
if time.monotonic() - start_time > 60 and show_spinner:
spinner.update(f"registering device - serial: {serial}, IMEI: ({imei1}, {imei2})")
backoff = 0
start_time = time.monotonic()
@ -106,12 +89,11 @@ def register(show_spinner=False) -> str | None:
backoff = min(backoff + 1, 15)
time.sleep(backoff)
if time.monotonic() - start_time > 60 and spinner:
spinner.set_text(f"registering device - serial: {serial}, IMEI: ({imei1}, {imei2})")
if time.monotonic() - start_time > 60 and show_spinner:
spinner.update(f"registering device - serial: {serial}, IMEI: ({imei1}, {imei2})")
if spinner_thread:
end_evt.set()
spinner_thread.join()
if show_spinner:
spinner.close()
if dongle_id:
params.put("DongleId", dongle_id)

@ -1,18 +1,15 @@
#!/usr/bin/env python3
import os
import subprocess
import select
from pathlib import Path
import pyray as rl
# NOTE: Do NOT import anything here that needs be built (e.g. params)
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.common.swaglog import cloudlog, add_file_handler
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
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
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['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 []
CI = os.getenv("CI") is not None
if AGNOS:
HARDWARE.set_power_save(False)
os.sched_setaffinity(0, range(8)) # ensure we can use the isolcpus cores
# building with all cores can result in using too
# much memory, so retry with less parallelism
if not CI:
gui_app.init_window("Spinner")
spinner = Spinner()
compile_output: list[bytes] = []
for n in (nproc, nproc/2, 1):
compile_output.clear()
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
os.set_blocking(scons.stderr.fileno(), False) # Non-blocking reads
# Read progress from stderr and update spinner
if not CI:
spinner.set_text("0")
while scons.poll() is None:
try:
if not CI:
rl.begin_drawing()
rl.clear_background(rl.BLACK)
spinner.render()
rl.end_drawing()
if scons.stderr in select.select([scons.stderr], [], [], 0.02)[0]:
line = scons.stderr.readline()
if not line:
if line is None:
continue
line = line.rstrip()
prefix = b'progress: '
if line.startswith(prefix):
if not CI:
i = int(line[len(prefix):])
spinner.set_text(str(int(MAX_BUILD_PROGRESS * min(1., i / TOTAL_SCONS_NODES))))
spinner.update_progress(MAX_BUILD_PROGRESS * min(1., i / TOTAL_SCONS_NODES), 100.)
elif len(line):
compile_output.append(line)
print(line.decode('utf8', 'replace'))
@ -76,7 +62,7 @@ def build(dirty: bool = False, minimal: bool = False) -> None:
if scons.returncode != 0:
# Read remaining output
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
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)
# Show TextWindow
if not CI:
text_window = TextWindow("openpilot failed to build\n \n" + error_s)
while True:
rl.begin_drawing()
rl.clear_background(rl.BLACK)
text_window.render()
rl.end_drawing()
spinner.close()
if not os.getenv("CI"):
with TextWindow("openpilot failed to build\n \n" + error_s) as t:
t.wait_for_exit()
exit(1)
# enforce max cache size
@ -105,5 +88,7 @@ def build(dirty: bool = False, minimal: bool = False) -> None:
if __name__ == "__main__":
spinner = Spinner()
spinner.update_progress(0, 100)
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 openpilot.system.sentry as sentry
from openpilot.common.params import Params, ParamKeyType
from openpilot.common.text_window import TextWindow
from openpilot.system.hardware import HARDWARE
from openpilot.system.manager.helpers import unblock_stdout, write_onroad_params, save_bootlog
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.system.version import get_build_metadata, terms_version, training_version
from openpilot.system.hardware.hw import Paths
from openpilot.system.ui.text import show_text_in_window
def manager_init() -> None:
@ -221,7 +221,8 @@ if __name__ == "__main__":
# Show last 3 lines of traceback
error = traceback.format_exc(-3)
error = "Manager failed to start\n\n" + error
show_text_in_window(error)
with TextWindow(error) as t:
t.wait_for_exit()
raise

Loading…
Cancel
Save