5
0
mirror of https://github.com/cwinfo/yggdrasil-map synced 2024-12-29 02:55:40 +00:00

Merge pull request #5 from Arceliar/nodelist

Nodelist
This commit is contained in:
Arceliar 2018-12-12 19:00:37 -06:00 committed by GitHub
commit d087a3de67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 7 deletions

View File

@ -3,6 +3,7 @@ import time
import json
import networkx as nx
from networkx.algorithms import centrality
import urllib
def position_nodes(nodes, edges):
G = pgv.AGraph(strict=True, directed=False, size='10!')
@ -35,8 +36,11 @@ def canonalize_ip(ip):
return ':'.join( i.rjust(4, '0') for i in ip.split(':') )
def load_db():
with open('nodedb/nodes') as f:
return dict([ (canonalize_ip(v[0]), v[1]) for v in [ l.split(None)[:2] for l in f.readlines() ] if len(v) > 1 ])
#with open('nodedb/nodes') as f:
# return dict([ (canonalize_ip(v[0]), v[1]) for v in [ l.split(None)[:2] for l in f.readlines() ] if len(v) > 1 ])
url = "https://raw.githubusercontent.com/yakamok/yggdrasil-nodelist/master/nodelist"
f = urllib.urlopen(url)
return dict([ (canonalize_ip(v[0]), v[1]) for v in [ l.split(None)[:2] for l in f.readlines() ] if len(v) > 1 ])
def get_graph_json(G):
max_neighbors = 1
@ -53,14 +57,14 @@ def get_graph_json(G):
}
centralities = compute_betweenness(G)
#db = load_db()
db = load_db()
for n in G.iternodes():
neighbor_ratio = len(G.neighbors(n)) / float(max_neighbors)
pos = n.attr['pos'].split(',', 1)
centrality = centralities.get(n.name, 0)
size = 5*(1 + 1*centrality)
name = None#db.get(n.name)
name = db.get(canonalize_ip(n.name))
out_data['nodes'].append({
'id': n.name,

View File

@ -8,7 +8,7 @@
<br>
<h3>Network map</h3>
<p>The network page has a map of Yggdrasil's spanning tree as it is now. The map is not complete since it is hard/impossible to get a full picture of the network, and it only includes the minimum subset of links needed to construct the spanning tree. The known nodes and tree coordinates are taken from <a href="http://y.yakamo.org:3000/">Yakamo's API</a>.</p>
<p>The network page has a map of Yggdrasil's spanning tree as it is now. The map is not complete since it is hard/impossible to get a full picture of the network, and it only includes the minimum subset of links needed to construct the spanning tree. The known nodes and tree coordinates are taken from <a href="http://y.yakamo.org:3000/">Yakamo's API</a>. Node names are taken from <a href="https://github.com/yakamok/yggdrasil-nodelist">Yakamo's node list</a>.</p>
<!--
<h3>Node names</h3>
<p>For now, node names are assigned manually. You can submit Pull Request to <a href="https://github.com/zielmicha/nodedb">nodedb</a> if you want to have your node named.

View File

@ -4,13 +4,13 @@ from database import NodeDB
import graphPlotter
import urllib, json
url = "current" #alternatively "http://y.yakamo.org:3000/current"
url = "http://y.yakamo.org:3000/current"
# nodes indexed by coords
class NodeInfo:
def __init__(self, ip, coords):
self.ip = str(ip)
self.label = str(ip) # TODO readable labels
self.label = str(ip).split(":")[-1]
self.coords = str(coords)
self.version = "unknown"
def getCoordList(self):