86 lines
2.3 KiB
Python
86 lines
2.3 KiB
Python
import json
|
|
import logging
|
|
import typing
|
|
import uuid
|
|
|
|
import time
|
|
|
|
from clients.webclients import Client, CLIENTS
|
|
|
|
from flask import Flask, render_template, request, redirect, session
|
|
|
|
from tasks import tasks
|
|
from selector.temp_config import CONFIGS
|
|
|
|
BIOGAMES_HOST = "http://biogames.potato.kinf.wiai.uni-bamberg.de"
|
|
|
|
app = Flask(__name__)
|
|
clients: typing.Dict[str, Client] = {}
|
|
log: logging.Logger = logging.getLogger(__name__)
|
|
|
|
|
|
@app.route("/")
|
|
def index():
|
|
return render_template("index.html", clients=CLIENTS)
|
|
|
|
|
|
@app.route("/login", methods=["POST"])
|
|
def login():
|
|
game = request.form["game"]
|
|
if not game in CLIENTS:
|
|
return redirect("/")
|
|
client = CLIENTS[game](host=BIOGAMES_HOST, username=request.form['username'], password=request.form['password'])
|
|
if client.login():
|
|
session['logged_in'] = True
|
|
session['uid'] = str(uuid.uuid4())
|
|
session['username'] = request.form['username']
|
|
session['cookies'] = client.cookies
|
|
session['game'] = game
|
|
session['host'] = BIOGAMES_HOST
|
|
clients[session['uid']] = client
|
|
return redirect("/games")
|
|
return redirect("/")
|
|
|
|
|
|
@app.route("/games")
|
|
def games():
|
|
if not session['logged_in']:
|
|
return redirect("/")
|
|
if session['logged_in'] and not session['uid'] in clients:
|
|
clients[session['uid']] = CLIENTS[session['game']](host=session['host'], **session['cookies'])
|
|
job_status = json.loads(tasks.redis.get(session['username']))
|
|
return render_template("games.html", logs=clients[session['uid']].list(), configs=CONFIGS, jobs=job_status)
|
|
|
|
|
|
@app.route("/start", methods=['POST'])
|
|
def start():
|
|
print(str(request.form['logs']))
|
|
status = {
|
|
"status": "PENDING",
|
|
"submit": time.strftime("%c"),
|
|
"log_ids": request.form.getlist('logs'),
|
|
"config": request.form['config'],
|
|
}
|
|
params = {
|
|
"log_ids": request.form.getlist('logs'),
|
|
"config": CONFIGS[request.form['config']],
|
|
"username": session['username'],
|
|
"cookies": session['cookies'],
|
|
"host": session['host'],
|
|
"clientName": session['game'],
|
|
"name": request.form['name'],
|
|
}
|
|
tasks.status_update(session['username'], request.form['name'], status)
|
|
tasks.analyze.delay(**params)
|
|
return redirect("/games")
|
|
|
|
|
|
@app.route("/status")
|
|
def status():
|
|
return json.dumps(json.loads(tasks.redis.get(session['username'])), indent=2)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.config.update({"SECRET_KEY": "59765798-2784-11e8-8d05-db4d6f6606c9"})
|
|
app.run(host="0.0.0.0", debug=True)
|