- show config and logs in webserver
This commit is contained in:
mcinj 2022-05-13 16:55:52 -04:00
parent 4f4709776b
commit f60220f302
6 changed files with 172 additions and 14 deletions

View file

@ -3,4 +3,5 @@ beautifulsoup4==4.11.1
urllib3==1.26.9
sqlalchemy==1.4.36
sqlalchemy_utils==0.38.2
python-dateutil==2.8.2
python-dateutil==2.8.2
Flask==2.1.2

View file

@ -25,8 +25,8 @@ def choose_user_agent():
]
return user_agents[randrange(0, len(user_agents))]
class ConfigReader(ConfigParser):
class ConfigReader(ConfigParser):
required_values = {
'DEFAULT': {
@ -44,6 +44,10 @@ class ConfigReader(ConfigParser):
},
'NOTIFICATIONS': {
'pushover.enabled': ('true', 'false'),
},
'WEB': {
'web.enabled': ('true', 'false'),
'web.port': '%s' % (value_range(1, 65535))
}
}
default_values = {
@ -68,7 +72,10 @@ class ConfigReader(ConfigParser):
'pushover.enabled': 'false',
'pushover.token': '',
'pushover.user_key': '',
},
'WEB': {
'web.enabled': 'false',
'web.port': '9647'
}
}
deprecated_values = {

View file

@ -2,6 +2,8 @@ import threading
from random import randint
from time import sleep
from pygtail import Pygtail
import log
from ConfigReader import ConfigReader, ConfigException
from SteamGifts import SteamGifts, SteamGiftsException
@ -15,21 +17,32 @@ logger = log.get_logger(__name__)
class WebServerThread(threading.Thread):
def run_webserver(self):
import http.server
import socketserver
from flask import Flask
from flask import render_template
PORT = 8000
app = Flask(__name__)
class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
self.path = 'index.html'
return http.server.SimpleHTTPRequestHandler.do_GET(self)
@app.route("/")
def config():
with open('../config/config.ini', 'r') as f:
content = f.read()
return render_template('configuration.html', config=content)
Handler = MyHttpRequestHandler
@app.route("/log")
def logs():
return render_template('log.html')
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("Http Server Serving at port", PORT)
httpd.serve_forever()
@app.route("/stream")
def stream():
def generate():
with open('../config/debug.log') as f:
while True:
yield f.read()
sleep(10)
return app.response_class(generate(), mimetype='text/plain')
app.run(port=9647)
def run(self):
# Variable that stores the exception, if raised by someFunction
@ -138,6 +151,7 @@ def run():
w = WebServerThread()
w.setName("WebServer")
# if the giveaway thread dies then this daemon thread will die by definition
w.setDaemon(True)
w.start()

76
src/static/css/main.css Normal file
View file

@ -0,0 +1,76 @@
body {
margin: 0;
padding: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #444;
}
/*
* Formatting the header area
*/
header {
background-color: #DFB887;
height: 35px;
width: 100%;
opacity: .9;
margin-bottom: 10px;
}
header h1.logo {
margin: 0;
font-size: 1.7em;
color: #fff;
text-transform: uppercase;
float: left;
}
header h1.logo:hover {
color: #fff;
text-decoration: none;
}
/*
* Centering the body content
*/
.container {
width: 1200px;
margin: 0 auto;
}
div.home {
padding: 10px 0 30px 0;
background-color: #E6E6FA;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
div.about {
padding: 10px 0 30px 0;
background-color: #E6E6FA;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
h2 {
font-size: 3em;
margin-top: 40px;
text-align: center;
letter-spacing: -2px;
}
h3 {
font-size: 1.7em;
font-weight: 100;
margin-top: 30px;
text-align: center;
letter-spacing: -1px;
color: #999;
}
.menu {
float: right;
margin-top: 8px;
}
.menu li {
display: inline;
}
.menu li + li {
margin-left: 35px;
}
.menu li a {
color: #444;
text-decoration: none;
}

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<title>Flask app</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
</head>
<body>
<header>
<div class="container">
<h1 class="logo">Steamgifts Bot</h1>
<strong><nav>
<ul class="menu">
<li><a href="{{ url_for('config') }}">Config</a></li>
<li><a href="{{ url_for('logs') }}">Logs</a></li>
</ul>
</nav></strong>
</div>
</header>
<div class="container">
<pre>{{config}}</pre>
{% block content %}
{% endblock %}
</div>
</body>
</html>

35
src/templates/log.html Normal file
View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<title>Flask app</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
</head>
<body>
<header>
<div class="container">
<h1 class="logo">Steamgifts Bot</h1>
<strong><nav>
<ul class="menu">
<li><a href="{{ url_for('config') }}">Config</a></li>
<li><a href="{{ url_for('logs') }}">Logs</a></li>
</ul>
</nav></strong>
</div>
</header>
<div class="container">
<pre id="output"></pre>
<script>
var output = document.getElementById('output');
var xhr = new XMLHttpRequest();
xhr.open('GET', '{{ url_for('stream') }}');
xhr.send();
output.textContent = xhr.responseText;
setInterval(function() {
output.textContent = xhr.responseText;
}, 10000);
</script>
</div>
</body>
</html>