Bit.ASICmon-p/webserver.py

108 lines
2.5 KiB
Python

from flask import Flask, send_file, request
from time import sleep
from werkzeug.serving import make_server
from threading import Thread
from mysql.connector import connect, Error
from macros import *
import os, json, config, requests, logging
class WSThread(Thread):
app = Flask(__name__)
conn = None
def __init__(self, event):
super(WSThread, self).__init__()
self.event = event
log = logging.getLogger('werkzeug')
log.disabled = True
@app.route('/')
@app.route('/index')
def index():
return '<meta charset="UTF-8"><script defer src="/index.js"></script>'
@app.route('/index.js')
def indexjs():
return send_file('index.js')
@app.route('/curstatus.json')
def curstatus():
j = {}
j['info'] = {}
j['info']['asics'] = {}
return json.dumps(j), 200, {'ContentType':'application/json'}
def dbinit(self):
with self.conn.cursor() as c:
c.execute("""
CREATE TABLE IF NOT EXISTS `ips` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`ip` VARCHAR(64) NOT NULL,
`location` VARCHAR(64) NOT NULL
)
""")
c.execute("""
CREATE TABLE IF NOT EXISTS `laststate` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`ip` VARCHAR(64) NOT NULL,
`mac` VARCHAR(32) NOT NULL,
`type` INT(11) NOT NULL,
`location` VARCHAR(64) NOT NULL,
`status` VARCHAR(32) NOT NULL,
`time` INT(11) NOT NULL
)
""")
c.execute("""
CREATE TABLE IF NOT EXISTS `asiclogs` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`ip` VARCHAR(64) NOT NULL,
`mac` VARCHAR(64) NOT NULL,
`type` VARCHAR(64) NOT NULL,
`time` INT(11) NOT NULL,
`log` TEXT NOT NULL
)
""")
self.conn.commit()
def runweb(self):
self.server = make_server('0.0.0.0', CONF.get('port'), self.app)
self.server.serve_forever()
def run(self):
try:
with connect(host=CONF.get('db', 'host'), user=CONF.get('db', 'user'), password=CONF.get('db', 'password')) as conn:
with conn.cursor() as c:
c.execute(f"CREATE DATABASE IF NOT EXISTS {CONF.get('db', 'name')}")
self.conn = connect(
host=CONF.get('db', 'host'),
user=CONF.get('db', 'user'),
password=CONF.get('db', 'password'),
database=CONF.get('db', 'name'))
self.dbinit()
web = Thread(target=self.runweb)
web.daemon = True
web.start()
SUCC(f"Web interface started at port {CONF.get('port')}!")
while not self.event.is_set():
sleep(1)
SUCC(f"Web server stopped!")
self.server.shutdown()
except Exception as e:
CRIT(str(e))
os._exit(1)