mirror of https://github.com/r4sas/Niflheim-api
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.8 KiB
64 lines
1.8 KiB
#!/usr/bin/env python |
|
|
|
import psycopg2, json, traceback |
|
from config import DB_PASS, DB_USER, DB_NAME, DB_HOST, saveDefaultNodeInfo, removableFileds |
|
from pk2addr import keyTo128BitAddress |
|
|
|
##### |
|
|
|
with open('api/result.json', 'r') as f: |
|
data = json.load(f) |
|
|
|
# connect to database |
|
dbconn = psycopg2.connect(host=DB_HOST, database=DB_NAME, user=DB_USER, password=DB_PASS) |
|
cur = dbconn.cursor() |
|
|
|
# start importing |
|
for key, node in data['yggnodes'].items(): |
|
nodename = "" |
|
nodeinfo = {} |
|
|
|
if "address" in node: |
|
ipv6 = keyTo128BitAddress(node['address']) if len(node['address']) == 64 else node['address'] |
|
else: |
|
ipv6 = keyTo128BitAddress(key) |
|
|
|
if "coords" in node: |
|
coords = node['coords'] |
|
else: |
|
continue |
|
|
|
timestamp = node['time'] |
|
|
|
if "nodeinfo" in node: |
|
nodeinfo = node['nodeinfo'] |
|
|
|
if not saveDefaultNodeInfo: |
|
# remove default Node info fields |
|
for field in removableFileds: |
|
tmprm = nodeinfo.pop(field, None) |
|
|
|
if "name" in nodeinfo: |
|
nodename = nodeinfo['name'] |
|
else: |
|
nodename = '? %s' % coords |
|
|
|
nodeinfo = json.dumps(nodeinfo) |
|
|
|
try: |
|
cur.execute( |
|
"INSERT INTO yggindex (ipv6, coords, unixtstamp, name) VALUES(%s, %s, %s, %s) ON CONFLICT (ipv6) DO UPDATE SET unixtstamp=%s, coords=%s, name=%s;", |
|
(ipv6, coords, timestamp, nodename, timestamp, coords, nodename) |
|
) |
|
cur.execute( |
|
"INSERT INTO yggnodeinfo (ipv6, nodeinfo, timestamp) VALUES(%s, %s, %s) ON CONFLICT (ipv6) DO UPDATE SET nodeinfo=%s, timestamp=%s;", |
|
(ipv6, nodeinfo, timestamp, nodeinfo, timestamp) |
|
) |
|
|
|
except Exception as e: |
|
print("database error inserting") |
|
traceback.print_exc() |
|
|
|
dbconn.commit() |
|
cur.close() |
|
dbconn.close()
|
|
|