web
- show config and logs in webserver
This commit is contained in:
parent
4f4709776b
commit
f60220f302
6 changed files with 172 additions and 14 deletions
|
@ -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
|
|
@ -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 = {
|
||||
|
|
36
src/run.py
36
src/run.py
|
@ -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
76
src/static/css/main.css
Normal 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;
|
||||
}
|
25
src/templates/configuration.html
Normal file
25
src/templates/configuration.html
Normal 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
35
src/templates/log.html
Normal 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>
|
Loading…
Reference in a new issue