|
|
@ -26,7 +26,7 @@ def do_extract_segment(*segment_paths, prototypes_path="./prototypes"):
|
|
|
|
prototypes = load_prototypes(prototypes_path)
|
|
|
|
prototypes = load_prototypes(prototypes_path)
|
|
|
|
for segment_path in segment_paths:
|
|
|
|
for segment_path in segment_paths:
|
|
|
|
segment_info = parse_segment_path(segment_path)
|
|
|
|
segment_info = parse_segment_path(segment_path)
|
|
|
|
odometer, clock, tod = extract_segment(prototypes, segment_info)
|
|
|
|
odometer, clock, tod = extract_segment(prototypes, segment_info, segment_info.start)
|
|
|
|
print(f"{segment_path} {odometer} {clock} {tod}")
|
|
|
|
print(f"{segment_path} {odometer} {clock} {tod}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -76,7 +76,7 @@ def compare_segments(dbconnect, base_dir='.', prototypes_path="./prototypes", si
|
|
|
|
for old_odometer, (segment, old_clock, old_tod) in selected:
|
|
|
|
for old_odometer, (segment, old_clock, old_tod) in selected:
|
|
|
|
path = os.path.join(base_dir, segment)
|
|
|
|
path = os.path.join(base_dir, segment)
|
|
|
|
segment_info = parse_segment_path(path)
|
|
|
|
segment_info = parse_segment_path(path)
|
|
|
|
odometer, clock, tod = extract_segment(prototypes, segment_info)
|
|
|
|
odometer, clock, tod = extract_segment(prototypes, segment_info, segment_info.start)
|
|
|
|
results.append((segment, {
|
|
|
|
results.append((segment, {
|
|
|
|
"odo": (old_odometer, odometer),
|
|
|
|
"odo": (old_odometer, odometer),
|
|
|
|
"clock": (old_clock, clock),
|
|
|
|
"clock": (old_clock, clock),
|
|
|
@ -118,8 +118,13 @@ def analyze_segment(db_manager, prototypes, segment_path, check_segment_name=Non
|
|
|
|
if check_segment_name is not None:
|
|
|
|
if check_segment_name is not None:
|
|
|
|
assert segment_name == check_segment_name
|
|
|
|
assert segment_name == check_segment_name
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# A timestamp fully at the end doesn't get us a valid frame.
|
|
|
|
|
|
|
|
# But we want to be as late as possible to minimize latency.
|
|
|
|
|
|
|
|
# We attempt to do a fixed time before the end, or use the start if too short.
|
|
|
|
|
|
|
|
timestamp = max(segment_info.start, segment_info.end - datetime.timedelta(seconds=0.1))
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
odometer, clock, tod = extract_segment(prototypes, segment_info)
|
|
|
|
odometer, clock, tod = extract_segment(prototypes, segment_info, timestamp)
|
|
|
|
except Exception:
|
|
|
|
except Exception:
|
|
|
|
logging.warning(f"Failed to extract segment {segment_path!r}", exc_info=True)
|
|
|
|
logging.warning(f"Failed to extract segment {segment_path!r}", exc_info=True)
|
|
|
|
odometer = None
|
|
|
|
odometer = None
|
|
|
@ -143,7 +148,7 @@ def analyze_segment(db_manager, prototypes, segment_path, check_segment_name=Non
|
|
|
|
timeofday = %(timeofday)s
|
|
|
|
timeofday = %(timeofday)s
|
|
|
|
""",
|
|
|
|
""",
|
|
|
|
channel=segment_info.channel,
|
|
|
|
channel=segment_info.channel,
|
|
|
|
timestamp=segment_info.start,
|
|
|
|
timestamp=timestamp,
|
|
|
|
segment=segment_name,
|
|
|
|
segment=segment_name,
|
|
|
|
error=error,
|
|
|
|
error=error,
|
|
|
|
odometer=odometer,
|
|
|
|
odometer=odometer,
|
|
|
@ -200,7 +205,7 @@ def main(
|
|
|
|
prototypes_path="./prototypes",
|
|
|
|
prototypes_path="./prototypes",
|
|
|
|
concurrency=10,
|
|
|
|
concurrency=10,
|
|
|
|
):
|
|
|
|
):
|
|
|
|
CHECK_INTERVAL = 2
|
|
|
|
CHECK_INTERVAL = 0.5
|
|
|
|
|
|
|
|
|
|
|
|
stopping = gevent.event.Event()
|
|
|
|
stopping = gevent.event.Event()
|
|
|
|
|
|
|
|
|
|
|
|