aboutsummaryrefslogtreecommitdiff
path: root/tools/recover.py
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2022-12-14 12:42:56 -0800
committerAnton Tananaev <anton@traccar.org>2022-12-14 12:42:56 -0800
commit11f90f5b779e9af3a22907766254f3400ef8bc50 (patch)
tree43ba259062928ed296be3b846ac9193020925901 /tools/recover.py
parent64391161c1fb03bd9ff5ea30749b4e00230fa8aa (diff)
downloadtrackermap-server-11f90f5b779e9af3a22907766254f3400ef8bc50.tar.gz
trackermap-server-11f90f5b779e9af3a22907766254f3400ef8bc50.tar.bz2
trackermap-server-11f90f5b779e9af3a22907766254f3400ef8bc50.zip
Fix recovery script
Diffstat (limited to 'tools/recover.py')
-rwxr-xr-xtools/recover.py49
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()