From 7513d0e9e324b20a80081fe98e6752b9b0b69905 Mon Sep 17 00:00:00 2001 From: lza_menace Date: Mon, 2 Oct 2023 10:54:24 -0700 Subject: [PATCH] include nodes in the map view --- xmrnodes/helpers.py | 9 +++++--- xmrnodes/routes/meta.py | 8 ++++++- xmrnodes/templates/map.html | 42 +++++++++++++++++++++++++++++++++---- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/xmrnodes/helpers.py b/xmrnodes/helpers.py index ec3f214..10fc6d4 100644 --- a/xmrnodes/helpers.py +++ b/xmrnodes/helpers.py @@ -92,9 +92,12 @@ def rw_cache(key_name, data=None): f.write(pickle.dumps(data)) return data else: - with open(pickle_file, "rb") as f: - pickled_data = pickle.load(f) - return pickled_data + try: + with open(pickle_file, "rb") as f: + pickled_data = pickle.load(f) + return pickled_data + except: + return {} def retrieve_peers(host, port): diff --git a/xmrnodes/routes/meta.py b/xmrnodes/routes/meta.py index 22ac136..75e5f48 100644 --- a/xmrnodes/routes/meta.py +++ b/xmrnodes/routes/meta.py @@ -65,10 +65,16 @@ def index(): def map(): try: peers = rw_cache("map_peers") + nodes = Node.select().where(Node.datetime_checked) except: flash("Couldn't load the map. Try again later.") return redirect("/") - return render_template("map.html", peers=peers, source_node=config.NODE_HOST) + return render_template( + "map.html", + peers=peers, + nodes=nodes, + source_node=config.NODE_HOST + ) @bp.route("/about") diff --git a/xmrnodes/templates/map.html b/xmrnodes/templates/map.html index 9ee7d72..abb8f90 100644 --- a/xmrnodes/templates/map.html +++ b/xmrnodes/templates/map.html @@ -56,14 +56,14 @@ {% endwith %}
-

Peers seen ~24 hours: {{ peers | length }}

+

Peers seen ~2 weeks: {{ peers | length }}

Source Node: {{ source_node }}

This is not a full representation of the entire Monero network, just a look into the peers being recursively crawled from the source node ({{ source_node }}). - New peers are searched for once per day. + New peers are searched for once per week on average. Older peers are shown as more transparent and will be removed - if not seen again after {{ config.PEER_LIFETIME }} hours. + if not seen again after some time.


Go home @@ -95,8 +95,42 @@ }) }); - {% for peer in peers %} + {% for peer in nodes %} + {% if peer.datetime_checked | hours_elapsed > 24 %} + {% set fill_color = 'rgba(1,1,45,.2)' %} + {% elif peer.datetime_checked | hours_elapsed > 16 %} + {% set fill_color = 'rgba(1,1,45,.4)' %} + {% elif peer.datetime_checked | hours_elapsed > 8 %} + {% set fill_color = 'rgba(1,1,45,.6)' %} + {% elif peer.datetime_checked | hours_elapsed > 4 %} + {% set fill_color = 'rgba(1,1,45,.8)' %} + {% else %} + {% set fill_color = 'rgba(1,1,45,1)' %} + {% endif %} + var feature = new ol.Feature( + new ol.geom.Point(ol.proj.transform(['{{ peer.lon }}', '{{ peer.lat }}'], 'EPSG:4326', 'EPSG:3857')) + ); + feature.description = [ + 'Node {{ peer.url }}', + 'Last seen {{ peer.datetime_checked | humanize }}' + ]; + feature.setStyle(new ol.style.Style({ + image: new ol.style.Circle({ + radius: 6, + fill: new ol.style.Fill({ + color: '{{ fill_color }}', + }), + stroke: new ol.style.Stroke({ + color: '#fff', + width: 1 + }) + }) + }) + ); + markerLayer.getSource().addFeature(feature); + {% endfor %} + {% for peer in peers %} {% if peer.datetime | hours_elapsed > 24 %} {% set fill_color = 'rgba(238,111,45,.2)' %} {% elif peer.datetime | hours_elapsed > 16 %}