import os
import os.path
import json
from collections import defaultdict
from datetime import datetime
from flask import current_app
def _check_server(data):
if data['server_status'] == 'Offline':
return 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:
current_app.logger.error('%s is set to %s' % (data['server_name'],
status))
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 _load_single_server(filename):
try:
with open(filename, encoding='utf-8') as f:
server = json.load(f)
except IOError:
return False
server = _check_server(server)
return server
def single_server(name):
filename = ''.join(['data/', name, '.json'])
return _load_single_server(filename)
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):
yield _load_single_server(f)
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