Browse Source

added contribs page

develop
yakamok 6 years ago committed by GitHub
parent
commit
0f04b35d53
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 83
      yggapi.py

83
yggapi.py

@ -1,14 +1,16 @@ @@ -1,14 +1,16 @@
from flask import Flask, request
from flask import Flask, request, render_template
from flask_restful import Resource, Api
from sqlalchemy import create_engine
from json import dumps
#rate limiting support
from flask.ext.jsonpify import jsonify
#adding rate limiting support
from flask import jsonify
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
import time
import sys
import os
import time
import requests
#check if a database exists or not
db_path = "vservdb/yggindex.db"
@ -26,6 +28,27 @@ limiter = Limiter( @@ -26,6 +28,27 @@ limiter = Limiter(
default_limits=["500/day", "60/hour"]
)
def get_nodelist():
data = requests.get("https://raw.githubusercontent.com/yakamok/yggdrasil-nodelist/master/nodelist")
nodes = [x.split() for x in data.text.split('\n') if x]
index_table = {}
for x in nodes:
index_table[x[0]] = x[1]
return index_table
def check_nodelist(nodetable, key):
if nodetable:
if nodetable.get(key):
return nodetable.get(key)
else:
return key
else:
return key
#quickly figure out which is old or new
def age_calc(ustamp):
if (time.time() - ustamp) <= 14400 :
@ -39,43 +62,59 @@ class nodes_current(Resource): @@ -39,43 +62,59 @@ class nodes_current(Resource):
conn = db_connect.connect()
query = conn.execute("select * from yggindex")
nodes = {}
for i in query.cursor.fetchall():
if age_calc(i[2]):
nodes[i[0]] = [i[1],i[2]]
nodelist = {}
nodelist['yggnodes'] = nodes
return nodelist
#nodes that may not be active anymore or have been offline for a while such as laptops
#could be used as last seen
class nodes_old(Resource):
def get(self):
@app.route("/")
def fpage():
conn = db_connect.connect()
query = conn.execute("select * from yggindex")
nodes = {}
for i in query.cursor.fetchall():
if not age_calc(i[2]):
if age_calc(i[2]):
nodes[i[0]] = [i[1],i[2]]
nodelist = {}
nodelist['yggnodes'] = nodes
return nodelist
#return entire database of nodes regardless of age
class nodes_all(Resource):
def get(self):
return render_template('index.html', nodes = str(len(nodes)))
@app.route("/contrib")
def cpage():
try:
NODELIST = get_nodelist()
print "list exists"
except:
print "failed"
NODELIST = None
conn = db_connect.connect()
query = conn.execute("select * from yggindex")
nodes = {}
query = conn.execute("select * from contrib")
nodes = []
for i in query.cursor.fetchall():
nodes[i[0]] = [i[1],i[2]]
nodelist = {}
nodelist['yggnodes'] = nodes
return nodelist
if age_calc(i[1]):
nodes.append(i[0])
dnodes = []
for x in nodes:
dnodes.append(check_nodelist(NODELIST, x))
dnodes.sort(reverse=True)
return render_template('contrib.html', contribnodes = dnodes)
#sort out the api request here for the url
api.add_resource(nodes_current, '/current')
api.add_resource(nodes_old, '/old')
api.add_resource(nodes_all, '/all')
# api.add_resource(nodes_contrib, '/contrib')
if __name__ == '__main__':
app.run(host='::', port=3000)

Loading…
Cancel
Save