Beispiel #1
0
def manager_thread():
  # now loop
  thermal_sock = messaging.sub_sock('thermal')

  cloudlog.info("manager start")
  cloudlog.info({"environ": os.environ})

  # save boot log
  subprocess.call(["./loggerd", "--bootlog"], cwd=os.path.join(BASEDIR, "selfdrive/loggerd"))

  params = Params()

  # start daemon processes
  for p in daemon_processes:
    start_daemon_process(p, params)

  # start persistent processes
  for p in persistent_processes:
    start_managed_process(p)

  # start frame
  pm_apply_packages('enable')
  system("LD_LIBRARY_PATH= appops set ai.comma.plus.offroad SU allow")
  system("am start -n ai.comma.plus.frame/.MainActivity")

  if os.getenv("NOBOARD") is None:
    start_managed_process("pandad")

  logger_dead = False

  # Tinkla interface
  last_tinklad_send_attempt_time = 0
  tinklaClient = TinklaClient()
  sendUserInfoToTinkla(params=params, tinklaClient=tinklaClient)

  while 1:
    msg = messaging.recv_sock(thermal_sock, wait=True)

    # uploader is gated based on the phone temperature
    if msg.thermal.thermalStatus >= ThermalStatus.yellow:
      kill_managed_process("uploader")
    else:
      start_managed_process("uploader")

    # Attempt to send pending messages if there's any that queued while offline
    # Seems this loop runs every second or so, throttle to once every 30s
    now = time.time()
    if now - last_tinklad_send_attempt_time >= 30:
      tinklaClient.attemptToSendPendingMessages()
      last_tinklad_send_attempt_time = now

    if msg.thermal.freeSpace < 0.05:
      logger_dead = True

    if msg.thermal.started:
      for p in car_started_processes:
        if p == "loggerd" and logger_dead:
          kill_managed_process(p)
        else:
          start_managed_process(p)
    else:
      logger_dead = False
      # print "msg.thermal.started is False"
      for p in car_started_processes:
        kill_managed_process(p)

    # check the status of all processes, did any of them die?
    running_list = ["   running %s %s" % (p, running[p]) for p in running]
    #cloudlog.debug('\n'.join(running_list))

    # Exit main loop when uninstall is needed
    if params.get("DoUninstall", encoding='utf8') == "1":
      break
Beispiel #2
0
def manager_thread():
    # now loop
    thermal_sock = messaging.sub_sock(service_list['thermal'].port)

    cloudlog.info("manager start")
    cloudlog.info({"environ": os.environ})

    # save boot log
    subprocess.call(["./loggerd", "--bootlog"],
                    cwd=os.path.join(BASEDIR, "selfdrive/loggerd"))

    params = Params()

    # start daemon processes
    for p in daemon_processes:
        start_daemon_process(p, params)

    # start persistent processes
    for p in persistent_processes:
        start_managed_process(p)

    # start frame
    pm_apply_packages('enable')
    system("am start -n ai.comma.plus.frame/.MainActivity")

    if os.getenv("NOBOARD") is None:
        start_managed_process("pandad")

    logger_dead = False

    # Tinkla interface
    global tinklaClient
    tinklaClient = TinklaClient()
    sendUserInfoToTinkla(params)

    while 1:
        msg = messaging.recv_sock(thermal_sock, wait=True)

        # uploader is gated based on the phone temperature
        if msg.thermal.thermalStatus >= ThermalStatus.yellow:
            kill_managed_process("uploader")
        else:
            start_managed_process("uploader")

        # Attempt to send pending messages if there's any that queued while offline
        tinklaClient.attemptToSendPendingMessages()

        if msg.thermal.freeSpace < 0.05:
            logger_dead = True

        if msg.thermal.started:
            for p in car_started_processes:
                if p == "loggerd" and logger_dead:
                    kill_managed_process(p)
                else:
                    start_managed_process(p)
        else:
            logger_dead = False
            # print "msg.thermal.started is False"
            for p in car_started_processes:
                kill_managed_process(p)

        # check the status of all processes, did any of them die?
        running_list = ["   running %s %s" % (p, running[p]) for p in running]
        #cloudlog.debug('\n'.join(running_list))

        # is this still needed?
        if params.get("DoUninstall") == "1":
            break
Beispiel #3
0
def manager_thread():
    # now loop
    thermal_sock = messaging.sub_sock('thermal')

    if os.getenv("GET_CPU_USAGE"):
        proc_sock = messaging.sub_sock('procLog', conflate=True)

    cloudlog.info("manager start")
    cloudlog.info({"environ": os.environ})

    # save boot log
    subprocess.call(["./loggerd", "--bootlog"],
                    cwd=os.path.join(BASEDIR, "selfdrive/loggerd"))

    params = Params()

    # start daemon processes
    for p in daemon_processes:
        start_daemon_process(p)

    # start persistent processes
    for p in persistent_processes:
        start_managed_process(p)

    # start offroad
    if ANDROID:
        pm_apply_packages('enable')
        start_offroad()

    if os.getenv("NOBOARD") is None:
        start_managed_process("pandad")

    if os.getenv("BLOCK") is not None:
        for k in os.getenv("BLOCK").split(","):
            del managed_processes[k]

    logger_dead = False

    # Tinkla interface
    last_tinklad_send_attempt_time = 0
    tinklaClient = TinklaClient()
    sendUserInfoToTinkla(params=params, tinklaClient=tinklaClient)
    start_t = time.time()
    first_proc = None

    while 1:
        msg = messaging.recv_sock(thermal_sock, wait=True)

        # heavyweight batch processes are gated on favorable thermal conditions
        if msg.thermal.thermalStatus >= ThermalStatus.yellow:
            for p in green_temp_processes:
                if p in persistent_processes:
                    kill_managed_process(p)
        else:
            for p in green_temp_processes:
                if p in persistent_processes:
                    start_managed_process(p)

        # Attempt to send pending messages if there's any that queued while offline
        # Seems this loop runs every second or so, throttle to once every 30s
        now = time.time()
        if now - last_tinklad_send_attempt_time >= 30:
            tinklaClient.attemptToSendPendingMessages()
            last_tinklad_send_attempt_time = now

        if msg.thermal.freeSpace < 0.05:
            logger_dead = True

        if msg.thermal.started:
            for p in car_started_processes:
                if p == "loggerd" and logger_dead:
                    kill_managed_process(p)
                else:
                    start_managed_process(p)
        else:
            logger_dead = False
            for p in reversed(car_started_processes):
                kill_managed_process(p)

        # check the status of all processes, did any of them die?
        running_list = [
            "%s%s\u001b[0m" %
            ("\u001b[32m" if running[p].is_alive() else "\u001b[31m", p)
            for p in running
        ]
        cloudlog.debug(' '.join(running_list))

        # Exit main loop when uninstall is needed
        if params.get("DoUninstall", encoding='utf8') == "1":
            break

        if os.getenv("GET_CPU_USAGE"):
            dt = time.time() - start_t

            # Get first sample
            if dt > 30 and first_proc is None:
                first_proc = messaging.recv_sock(proc_sock)

            # Get last sample and exit
            if dt > 90:
                first_proc = first_proc
                last_proc = messaging.recv_sock(proc_sock, wait=True)

                cleanup_all_processes(None, None)
                sys.exit(print_cpu_usage(first_proc, last_proc))