def parse_line()

in scripts/qlog_parser.py [0:0]


def parse_line(line):
    event = {}
    event_scid = ""
    pattern = r'\[(.*?)\]'
    matches = re.findall(pattern, line)
    matches = [segment.strip() for segment in matches]
    if(len(matches) != 2):
        return None, event_scid
    time_str = matches[0]
    dt_object = datetime.datetime.strptime(time_str, "%Y/%m/%d %H:%M:%S %f")

    event["time"] = dt_object.timestamp() * 1000
    event["name"] = matches[1]

    if event["name"] in connectivity_event_list_:
        event["name"] = "connectivity:" + event["name"] 
    elif event["name"] in quic_event_list_:
        event["name"] = "quic:" + event["name"] 
    elif event["name"] in security_event_list_:
        event["name"] = "security:" + event["name"]
    elif event["name"] in recovery_event_list_:
        if event["name"] == "rec_parameters_set"  or  event["name"] == "rec_metrics_updated":
            event["name"] = event["name"][4:]
        event["name"] = "recovery:" + event["name"]
    elif event["name"] in http_event_list_:
        if event["name"] == "push_resolved":
            event["name"]  = "h3:push_resolved"
        else:
            event["name"] = "h3:" + event["name"][5:]
    else:
        return None, event_scid
    
    if matches[1] in ["packet_sent", "packet_received", "mtu_updated", "datagrams_sent", "datagrams_received", "packets_acked"]:
        event["path"] = get_path_id(line)
    
    if matches[1] == "packet_sent" or matches[1] == "packet_received":
        event["data"], event_scid = parse_packet_sent_and_recv(line)
        return event, event_scid
    
    if matches[1] == "datagrams_sent" or matches[1] == "datagrams_received":
        event["data"], event_scid = parse_datagrams_sent_or_recv(line)
        return event, event_scid
    
    if matches[1] in  ["server_listening", "connection_started", "connection_close", "connection_state_updated",
                        "path_assigned", "mtu_updated", "alpn_information","parameters_set", "packet_buffered", "packets_acked", "stream_state_updated",
                        "frames_processed", "stream_data_moved", "rec_parameters_set", "rec_metrics_updated", "congestion_state_updated", 
                        "packet_lost", "http_parameters_set", "http_frame_created", "http_frame_parse"]:
        function_name = "parse_" + matches[1]
        func = globals()[function_name]
        (event["data"], event_scid) = func(line)
        return event, event_scid
    else:
        return None, None