Advertisement
Guest User

Untitled

a guest
Jul 21st, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.44 KB | None | 0 0
  1. import psycopg2
  2. import time
  3. import os
  4. from neorpc.Settings import SettingsHolder
  5. from Client import RPCClient, RPCEndpoint
  6. import socket
  7. import eventlet
  8. eventlet.monkey_patch()
  9.  
  10. host = str(os.environ['PGHOST'])
  11. databasename = str(os.environ['PGDATABASE'])
  12. user = str(os.environ['PGUSER'])
  13. password = str(os.environ['PGPASSWORD'])
  14.  
  15. connection_str = "dbname='{}' user='{}' host='{}' password='{}'".format(
  16. databasename, user, host, password)
  17.  
  18. connect_str = connection_str
  19.  
  20. print(connect_str)
  21.  
  22. conn = psycopg2.connect(connect_str)
  23.  
  24. cursor = conn.cursor()
  25. cursor.execute("""select id, hostname, ip from nodes""")
  26.  
  27. rows = cursor.fetchall()
  28.  
  29. client = RPCClient()
  30.  
  31.  
  32. class NodeObject:
  33. def __init__(self, node_id, url, ip):
  34. self.node_id = node_id
  35. self.url = url
  36. self.ip = ip
  37.  
  38. self.endpointHttp10331 = RPCEndpoint(client, "http://" + url + ":10331")
  39. self.endpointHttps10331 = RPCEndpoint(client, "https://" + url + ":10331")
  40.  
  41. self.endpointHttp10332 = RPCEndpoint(client, "http://" + url + ":10332")
  42. self.endpointHttps10332 = RPCEndpoint(client, "https://" + url + ":10332")
  43.  
  44. self.hasEndpointHttp10331 = False
  45. self.hasEndpointHttps10331 = False
  46. self.hasEndpointHttp10332 = False
  47. self.hasEndpointHttps10332 = False
  48.  
  49.  
  50. list_of_nodes = []
  51.  
  52. for node_id, node_url, node_ip in rows:
  53. n = NodeObject(node_id, node_url, node_ip)
  54. list_of_nodes.append(n)
  55.  
  56.  
  57. def bfs(list_of_nodes):
  58. explored = []
  59. queue = list_of_nodes
  60.  
  61. while queue:
  62. node = queue.pop(0)
  63. if nodeNotExplored(node, explored):
  64. explored.append(node)
  65. print("explored.append(node)")
  66.  
  67. try:
  68. print("neighbours = client.get_peers(endpoint=node.endpointHttp10331)['connected']")
  69. neighbours = client.get_peers(endpoint=node.endpointHttp10331)['connected']
  70. node.hasEndpointHttp10331=True
  71. except:
  72. try:
  73. print("neighbours = client.get_peers(endpoint=node.endpointHttps10331)['connected']")
  74. neighbours = client.get_peers(endpoint=node.endpointHttps10331)['connected']
  75. node.hasEndpointHttps10331=True
  76. except:
  77. try:
  78. print("neighbours = client.get_peers(endpoint=node.endpointHttp10332)['connected']")
  79. neighbours = client.get_peers(endpoint=node.endpointHttp10332)['connected']
  80. node.hasEndpointHttp10332=True
  81. except:
  82. try:
  83. print("neighbours = client.get_peers(endpoint=node.endpointHttps10332)['connected']")
  84. neighbours = client.get_peers(endpoint=node.endpointHttps10332)['connected']
  85. node.hasEndpointHttps10332=True
  86. except:
  87. print("failed to get any peers")
  88. print("len(queue)"+ str(len(queue)))
  89. print("len(explored)"+ str(len(explored)))
  90. continue
  91.  
  92. print("neighbours = client.get_peers(endpoint=node.endpoint)['connected']")
  93. remoteNodes = getRemoteNodes(neighbours)
  94. for n in remoteNodes:
  95. queue.append(n)
  96.  
  97. # to be removed
  98. if len(explored)==50:
  99. return explored
  100. return explored
  101.  
  102.  
  103. def isOpen(ip, port):
  104. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  105. s.settimeout(2)
  106. try:
  107. s.connect((ip, int(port)))
  108. s.shutdown(2)
  109. return True
  110. except:
  111. return False
  112.  
  113.  
  114. def nodeNotExplored(node, explored):
  115. for explored_node in explored:
  116. if explored_node.ip == node.ip:
  117. return False
  118. return True
  119.  
  120.  
  121. def getRemoteNodes(neighbours):
  122. remote_nodes = []
  123. for neighbour in neighbours:
  124. # conert from ipv6 to ipv4
  125. ip = neighbour['address'].split("::ffff:")[-1]
  126. remote_nodes.append(NodeObject(None, ip, ip))
  127.  
  128. return remote_nodes
  129.  
  130.  
  131. explored_nodes = bfs(list_of_nodes)
  132.  
  133. for explored in explored_nodes:
  134. cursor.execute("""select *
  135. from nodes n
  136. where n.ip=%s""", [explored.ip])
  137. rows = cursor.fetchall()
  138. if len(rows) == 0:
  139. # IP doesnt exist in database
  140. print(explored.ip)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement