Skip to content

Instantly share code, notes, and snippets.

@kobigurk
Last active January 15, 2021 14:50
Show Gist options
  • Save kobigurk/c3959575f02d815c2b4d4a452da51f41 to your computer and use it in GitHub Desktop.
Save kobigurk/c3959575f02d815c2b4d4a452da51f41 to your computer and use it in GitHub Desktop.
add_peers
import sys
import subprocess
import re
import time
peers_file = 'peers.txt'
def extract_ip(peer):
return peer.split('/')[1]
while True:
new_peers = list(map(lambda x: x.strip().decode('utf8'), subprocess.Popen(["docker", "exec", "mina", "coda", "advanced", "get-peers"], stdout=subprocess.PIPE).stdout.readlines()))
new_peers_ips = list(map(extract_ip, new_peers))
peers_from_file = open(peers_file).readlines()
peers_from_file.insert(0, "/ipv4/89.145.161.180/tcp/8302/p2p/12D3KooWB2bFw7v7wBXZHm854Tm1X7Yh56MtPEuN3Mn2uewixUc3")
for peer in peers_from_file:
peer = peer.strip()
peer_ip = extract_ip(peer)
result = subprocess.Popen(["docker", "exec", "mina", "coda", "advanced", "add-peers", peer], stderr=subprocess.PIPE)
stdout = result.stdout.read().decode('utf8') if result.stdout is not None else None
stderr = result.stderr.read().decode('utf8') if result.stderr is not None else None
x = re.search('peer id mismatch: expected (.*), but remote key matches (.*)" \(in', stderr)
if x is not None:
print('updating peer: %s' % (peer, ))
print(x.groups(1)[0], x.groups(1)[1])
peer = peer.replace(x.groups(1)[0], x.groups(1)[1])
print('updated peer: %s' % (peer, ))
result = subprocess.Popen(["docker", "exec", "mina", "coda", "advanced", "add-peers", peer], stderr=subprocess.PIPE).stderr.read()
if result is None and peer_ip not in new_peers_ips:
new_peers.append(peer)
elif stderr is None or len(stderr) == 0 and peer_ip not in new_peers_ips:
new_peers.append(peer)
else:
print(stdout, stderr)
open(peers_file, 'w').write('\n'.join(new_peers))
time.sleep(120)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment