diff options
author | Anton Tananaev <anton@traccar.org> | 2022-12-14 12:42:56 -0800 |
---|---|---|
committer | Anton Tananaev <anton@traccar.org> | 2022-12-14 12:42:56 -0800 |
commit | 11f90f5b779e9af3a22907766254f3400ef8bc50 (patch) | |
tree | 43ba259062928ed296be3b846ac9193020925901 /tools/recover.py | |
parent | 64391161c1fb03bd9ff5ea30749b4e00230fa8aa (diff) | |
download | trackermap-server-11f90f5b779e9af3a22907766254f3400ef8bc50.tar.gz trackermap-server-11f90f5b779e9af3a22907766254f3400ef8bc50.tar.bz2 trackermap-server-11f90f5b779e9af3a22907766254f3400ef8bc50.zip |
Fix recovery script
Diffstat (limited to 'tools/recover.py')
-rwxr-xr-x | tools/recover.py | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/tools/recover.py b/tools/recover.py index 01e01f92e..dfa94c978 100755 --- a/tools/recover.py +++ b/tools/recover.py @@ -1,35 +1,52 @@ -#!/usr/bin/python +#!/usr/bin/env python3 import sys import re +import os +import xml.etree.ElementTree import socket import binascii +import time if len(sys.argv) < 2: sys.exit("log file is not provided") path = sys.argv[1] -p = re.compile(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} DEBUG: \[([0-9a-fA-F]{8}): (\d+) < [\d.]+] HEX: ([0-9a-fA-F]+)") +p = re.compile(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} INFO: \[([TU][0-9a-fA-F]{8}): (\S+) < [\d.]+] ([0-9a-fA-F]+)") -ports = {} +def load_ports(): + ports = {} + dir = os.path.dirname(os.path.abspath(__file__)) + root = xml.etree.ElementTree.parse(dir + '/../setup/default.xml').getroot() + for entry in root.findall('entry'): + key = entry.attrib['key'] + if key.endswith('.port'): + ports[key[:-5]] = int(entry.text) + return ports + +ports = load_ports() +protocols = {} messages = {} for line in open(path): - if "HEX:" in line: - m = p.match(line) - if m: - session = m.group(1) - port = m.group(2) - message = m.group(3) - ports[session] = port - if session not in messages: - messages[session] = [] - messages[session].append(message) - -for session in ports: - port = ports[session] + print(line) + m = p.match(line) + if m: + session = m.group(1) + protocol = m.group(2) + message = m.group(3) + protocols[session] = protocol + if session not in messages: + messages[session] = [] + messages[session].append(message) + +print('Total: %d' % len(messages)) + +for session in protocols: + port = ports[protocols[session]] s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("localhost", int(port))) for message in messages[session]: s.send(binascii.unhexlify(message)) + time.sleep(0.5) s.close() |