-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathstatus.py
79 lines (55 loc) · 1.74 KB
/
status.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import traceback
from aiohttp import web
import ssl
import os
from lib.config import config
from lib.machine import Machine
from lib.cache import Cache
machine = Machine()
cache = Cache()
working_dir = os.path.dirname(os.path.realpath(__file__))
async def get_status():
if cache.should_update():
info = await machine.get_full_info()
cache.update(info)
return cache.get()
routes = web.RouteTableDef()
@routes.get("/")
async def index(request):
return web.FileResponse("html/index.html")
@routes.get("/api/status")
async def api(request):
try:
return web.json_response(await get_status())
except:
report = traceback.format_exc().replace(f"{working_dir}/", "")
return web.Response(text=report, status=500)
@web.middleware
async def redirector(request, handler):
try:
resp = await handler(request)
if config.get("server", "enable_cors"):
resp.headers["Access-Control-Allow-Origin"] = "*"
return resp
except (web.HTTPInternalServerError, web.HTTPForbidden, web.HTTPNotFound):
raise web.HTTPFound(location="/")
routes.static("/", "html")
app = web.Application(middlewares=[redirector])
app.logger.manager.disable = 100 * config.get("misc", "debug")
app.add_routes(routes)
ssl_context = None
if config.get("server", "domain"):
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_dir = f"/etc/letsencrypt/live/{config.get('server', 'domain')}"
pubkey = config.get("server", "tls_cert_path")
if not pubkey:
pubkey = f"{ssl_dir}/fullchain.pem"
privkey = config.get("server", "tls_key_path")
if not privkey:
privkey = f"{ssl_dir}/privkey.pem"
ssl_context.load_cert_chain(pubkey, privkey)
web.run_app(app,
host=config.get("server", "address"),
port=int(config.get("server", "port")),
ssl_context=ssl_context
)