import os
import os.path
import json
from collections import defaultdict
from datetime import datetime
def _load_single_server(name):
filename = ''.join(['data/', name, '.json'])
try:
with open(filename) as f:
return ''.join(f.readlines())
except IOError:
return False
def _check_server(data):
date = datetime.strptime(data['last_updated'], '%d-%m-%Y %H:%M:%S')
now = datetime.utcnow()
delta = now - date
if delta.seconds >= 3600:
status = 'Offline'
elif delta.seconds >= 1200:
status = 'Unknown'
else:
status = None
if status is not None:
for key in ('server_status', 'tor_status'):
data[key] = status
filename = os.path.join('data', data['server_name'].lower()+'.json')
with open(filename, mode='w', encoding='utf-8') as file_object:
json.dump(data, file_object)
return data
def single_server(name):
server = _load_single_server(name)
if server:
try:
server = json.loads(server)
server = _check_server(server)
return server
except ValueError:
return False
else:
return False
def _get_json_files(root, files):
for f in files:
if f.endswith('.json'):
yield os.path.join(root, f)
def all_servers():
for root, _, files in os.walk('data'):
for f in _get_json_files(root, files):
with open(f) as fb:
try:
server = json.load(fb)
except ValueError:
fb.close()
continue
server = _check_server(server)
yield server
def all_servers_by_type(type):
for server in all_servers():
if server['server_type'] == type:
yield server
def split_all_servers_to_types():
servers = defaultdict(list)
for server in all_servers():
servers[server['server_type']].append(server)
return servers