Beispiel #1
0
def juggle_route(route_name, segment_number, qlog):
    r = Route(route_name)

    logs = r.qlog_paths() if qlog else r.log_paths()
    if segment_number is not None:
        logs = logs[segment_number:segment_number + 1]

    if None in logs:
        fallback_answer = input(
            "At least one of the rlogs in this segment does not exist, would you like to use the qlogs? (y/n) : "
        )
        if fallback_answer == 'y':
            logs = r.qlog_paths()
            if segment_number is not None:
                logs = logs[segment_number:segment_number + 1]
        else:
            print(
                f"Please try a different {'segment' if segment_number is not None else 'route'}"
            )
            return

    all_data = []
    pool = multiprocessing.Pool(24)
    for d in pool.map(load_segment, logs):
        all_data += d

    tempfile = NamedTemporaryFile(suffix='.rlog')
    save_log(tempfile.name, all_data, compress=False)
    del all_data

    juggle_file(tempfile.name)
Beispiel #2
0
def juggle_route(route_or_segment_name, segment_count, qlog, can, layout):
    segment_start = 0
    if 'cabana' in route_or_segment_name:
        query = parse_qs(urlparse(route_or_segment_name).query)
        api = CommaApi(get_token())
        logs = api.get(
            f'v1/route/{query["route"][0]}/log_urls?sig={query["sig"][0]}&exp={query["exp"][0]}'
        )
    elif route_or_segment_name.startswith(
            "http://") or route_or_segment_name.startswith(
                "https://") or os.path.isfile(route_or_segment_name):
        logs = [route_or_segment_name]
    else:
        route_or_segment_name = SegmentName(route_or_segment_name,
                                            allow_route_name=True)
        segment_start = max(route_or_segment_name.segment_num, 0)

        if route_or_segment_name.segment_num != -1 and segment_count is None:
            segment_count = 1

        r = Route(route_or_segment_name.route_name.canonical_name)
        logs = r.qlog_paths() if qlog else r.log_paths()

    segment_end = segment_start + segment_count if segment_count else None
    logs = logs[segment_start:segment_end]

    if None in logs:
        ans = input(
            f"{logs.count(None)}/{len(logs)} of the rlogs in this segment are missing, would you like to fall back to the qlogs? (y/n) "
        )
        if ans == 'y':
            logs = r.qlog_paths()[segment_start:segment_end]
        else:
            print("Please try a different route or segment")
            return

    all_data = []
    with multiprocessing.Pool(24) as pool:
        for d in pool.map(load_segment, logs):
            all_data += d

    if not can:
        all_data = [d for d in all_data if d.which() not in ['can', 'sendcan']]

    # Infer DBC name from logs
    dbc = None
    for cp in [m for m in all_data if m.which() == 'carParams']:
        try:
            DBC = __import__(f"selfdrive.car.{cp.carParams.carName}.values",
                             fromlist=['DBC']).DBC
            dbc = DBC[cp.carParams.carFingerprint]['pt']
        except Exception:
            pass
        break

    with tempfile.NamedTemporaryFile(suffix='.rlog', dir=juggle_dir) as tmp:
        save_log(tmp.name, all_data, compress=False)
        del all_data
        start_juggler(tmp.name, dbc, layout)
Beispiel #3
0
def juggle_route(route_name, segment_number, segment_count, qlog, can, layout):
    if 'cabana' in route_name:
        query = parse_qs(urlparse(route_name).query)
        api = CommaApi(get_token())
        logs = api.get(
            f'v1/route/{query["route"][0]}/log_urls?sig={query["sig"][0]}&exp={query["exp"][0]}'
        )
    elif route_name.startswith("http://") or route_name.startswith(
            "https://") or os.path.isfile(route_name):
        logs = [route_name]
    else:
        r = Route(route_name)
        logs = r.qlog_paths() if qlog else r.log_paths()

    if segment_number is not None:
        logs = logs[segment_number:segment_number + segment_count]

    if None in logs:
        fallback_answer = input(
            "At least one of the rlogs in this segment does not exist, would you like to use the qlogs? (y/n) : "
        )
        if fallback_answer == 'y':
            logs = r.qlog_paths()
            if segment_number is not None:
                logs = logs[segment_number:segment_number + segment_count]
        else:
            print(
                f"Please try a different {'segment' if segment_number is not None else 'route'}"
            )
            return

    all_data = []
    with multiprocessing.Pool(24) as pool:
        for d in pool.map(load_segment, logs):
            all_data += d

    if not can:
        all_data = [d for d in all_data if d.which() not in ['can', 'sendcan']]

    # Infer DBC name from logs
    dbc = None
    for cp in [m for m in all_data if m.which() == 'carParams']:
        try:
            DBC = __import__(f"selfdrive.car.{cp.carParams.carName}.values",
                             fromlist=['DBC']).DBC
            dbc = DBC[cp.carParams.carFingerprint]['pt']
        except (ImportError, KeyError, AttributeError):
            pass
        break

    tempfile = NamedTemporaryFile(suffix='.rlog', dir=juggle_dir)
    save_log(tempfile.name, all_data, compress=False)
    del all_data

    start_juggler(tempfile.name, dbc, layout)
Beispiel #4
0
def juggle_route(route_name, segment_number, qlog, can, layout):

    if route_name.startswith("http://") or route_name.startswith(
            "https://") or os.path.isfile(route_name):
        logs = [route_name]
    else:
        r = Route(route_name)
        logs = r.qlog_paths() if qlog else r.log_paths()

    if segment_number is not None:
        logs = logs[segment_number:segment_number + 1]

    if None in logs:
        fallback_answer = input(
            "At least one of the rlogs in this segment does not exist, would you like to use the qlogs? (y/n) : "
        )
        if fallback_answer == 'y':
            logs = r.qlog_paths()
            if segment_number is not None:
                logs = logs[segment_number:segment_number + 1]
        else:
            print(
                f"Please try a different {'segment' if segment_number is not None else 'route'}"
            )
            return

    all_data = []
    pool = multiprocessing.Pool(24)
    for d in pool.map(load_segment, logs):
        all_data += d

    if not can:
        all_data = [d for d in all_data if d.which() not in ['can', 'sendcan']]

    # Infer DBC name from logs
    dbc = None
    for cp in [m for m in all_data if m.which() == 'carParams']:
        try:
            DBC = __import__(f"selfdrive.car.{cp.carParams.carName}.values",
                             fromlist=['DBC']).DBC
            dbc = DBC[cp.carParams.carFingerprint]['pt']
        except (ImportError, KeyError, AttributeError):
            pass
        break

    tempfile = NamedTemporaryFile(suffix='.rlog', dir=juggle_dir)
    save_log(tempfile.name, all_data, compress=False)
    del all_data

    juggle_file(tempfile.name, dbc, layout)
Beispiel #5
0
#!/usr/bin/env python3
import sys

from common.params import Params
from tools.lib.route import Route
from tools.lib.logreader import LogReader

if __name__ == "__main__":
    r = Route(sys.argv[1])
    cp = [m for m in LogReader(r.qlog_paths()[0]) if m.which() == 'carParams']
    Params().put("CarParams", cp[0].carParams.as_builder().to_bytes())
Beispiel #6
0
#!/usr/bin/env python3
import sys
from collections import Counter
from pprint import pprint
from tqdm import tqdm

from tools.lib.route import Route
from tools.lib.logreader import LogReader

if __name__ == "__main__":
    r = Route(sys.argv[1])

    cnt: Counter = Counter()
    for q in tqdm(r.qlog_paths()):
        lr = LogReader(q)
        car_events = [m for m in lr if m.which() == 'carEvents']
        for car_event in car_events:
            for e in car_event.carEvents:
                cnt[e.name] += 1
    pprint(cnt)
Beispiel #7
0
    wrong_fuzzy = 0
    good_fuzzy = 0

    dongles = []
    for route in tqdm(routes):
        route = route.rstrip()
        dongle_id, time = route.split('|')

        if dongle_id in dongles:
            continue

        if NO_API:
            qlog_path = f"cd:/{dongle_id}/{time}/0/qlog.bz2"
        else:
            route = Route(route)
            qlog_path = route.qlog_paths()[0]

        if qlog_path is None:
            continue

        try:
            lr = LogReader(qlog_path)
            dongles.append(dongle_id)

            for msg in lr:
                if msg.which() == "pandaStates":
                    if msg.pandaStates[0].pandaType not in [
                            'uno', 'blackPanda', 'dos'
                    ]:
                        break
Beispiel #8
0
if __name__ == "__main__":

    parser = argparse.ArgumentParser()
    parser.add_argument('--level', default='DEBUG')
    parser.add_argument('--addr', default='127.0.0.1')
    parser.add_argument("route",
                        type=str,
                        nargs='*',
                        help="route name + segment number for offline usage")
    args = parser.parse_args()

    logs = None
    if len(args.route):
        r = Route(args.route[0])
        logs = r.qlog_paths()

    if len(args.route) == 2 and logs:
        n = int(args.route[1])
        logs = [logs[n]]

    min_level = LEVELS[args.level]

    if logs:
        for log in logs:
            if log:
                lr = LogReader(log)
                for m in lr:
                    if m.which() == 'logMessage':
                        print_logmessage(m.logMonoTime, m.logMessage,
                                         min_level)
Beispiel #9
0
#!/usr/bin/env python3

import os

from tqdm import tqdm

from common.file_helpers import mkdirs_exists_ok
from tools.lib.logreader import LogReader
from tools.lib.route import Route

import argparse

if __name__ == "__main__":
  parser = argparse.ArgumentParser()
  parser.add_argument("route", help="The route name")
  parser.add_argument("segment", type=int,  help="The index of the segment")
  args = parser.parse_args()

  out_path = os.path.join("jpegs", f"{args.route.replace('|', '_')}_{args.segment}")
  mkdirs_exists_ok(out_path)

  r = Route(args.route)
  lr = list(LogReader(r.qlog_paths()[args.segment]))

  for msg in tqdm(lr):
      if msg.which() == 'thumbnail':
          with open(os.path.join(out_path, f"{msg.thumbnail.frameId}.jpg"), 'wb') as f:
              f.write(msg.thumbnail.thumbnail)
  print(f"[{t / 1e9:.6f}] {source} {msg.pid} {msg.tag} - {m}")


if __name__ == "__main__":

  parser = argparse.ArgumentParser()
  parser.add_argument('--level', default='DEBUG')
  parser.add_argument('--addr', default='127.0.0.1')
  parser.add_argument("route", type=str, nargs='*', help="route name + segment number for offline usage")
  args = parser.parse_args()

  logs = None
  if len(args.route):
    r = Route(args.route[0])
    logs = [q if r is None else r for (q, r) in zip(r.qlog_paths(), r.log_paths())]

  if len(args.route) == 2 and logs:
    n = int(args.route[1])
    logs = [logs[n]]

  min_level = LEVELS[args.level]

  if logs:
    for log in logs:
      if log:
        lr = LogReader(log)
        for m in lr:
          if m.which() == 'logMessage':
            print_logmessage(m.logMonoTime, m.logMessage, min_level)
          elif m.which() == 'androidLog':
Beispiel #11
0
from tools.lib.logreader import LogReader
from tools.lib.route import Route

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("route", help="The route name")
    parser.add_argument("segment", type=int, help="The index of the segment")
    args = parser.parse_args()

    out_path = os.path.join("jpegs",
                            f"{args.route.replace('|', '_')}_{args.segment}")
    mkdirs_exists_ok(out_path)

    r = Route(args.route)
    path = r.log_paths()[args.segment] or r.qlog_paths()[args.segment]
    lr = list(LogReader(path))

    for msg in tqdm(lr):
        if msg.which() == 'thumbnail':
            with open(os.path.join(out_path, f"{msg.thumbnail.frameId}.jpg"),
                      'wb') as f:
                f.write(msg.thumbnail.thumbnail)
        elif msg.which() == 'navThumbnail':
            with open(
                    os.path.join(out_path,
                                 f"nav_{msg.navThumbnail.frameId}.jpg"),
                    'wb') as f:
                f.write(msg.navThumbnail.thumbnail)
    parser = argparse.ArgumentParser()
    parser.add_argument('--level', default='DEBUG')
    parser.add_argument('--addr', default='127.0.0.1')
    parser.add_argument("route",
                        type=str,
                        nargs='*',
                        help="route name + segment number for offline usage")
    args = parser.parse_args()

    logs = None
    if len(args.route):
        r = Route(args.route[0])
        logs = [
            q_log if r_log is None else r_log
            for (q_log, r_log) in zip(r.qlog_paths(), r.log_paths())
        ]

    if len(args.route) == 2 and logs:
        n = int(args.route[1])
        logs = [logs[n]]

    min_level = LEVELS[args.level]

    if logs:
        for log in logs:
            if log:
                lr = LogReader(log)
                for m in lr:
                    if m.which() == 'logMessage':
                        print_logmessage(m.logMonoTime, m.logMessage,