modified: app.py

modified:   requirements.txt
	new file:   templates/logs.html
This commit is contained in:
SimolZimol
2024-09-03 12:46:00 +02:00
parent e3663ca141
commit f2b9d58af3
3 changed files with 78 additions and 2 deletions

39
app.py
View File

@@ -1,12 +1,20 @@
from flask import Flask, render_template, redirect, url_for, request, session
from flask import Flask, render_template, redirect, url_for, request, session, send_file
from flask_socketio import SocketIO, emit
import os
import subprocess
import psutil
import mysql.connector
import threading
import tailer
app = Flask(__name__)
app.secret_key = os.getenv("FLASK_SECRET_KEY", "default_secret_key")
socketio = SocketIO(app)
# Logs Directory
LOGS_DIR = "logs"
# Verwende Umgebungsvariablen aus Coolify für die Datenbankverbindung
DB_HOST = os.getenv("DB_HOST")
DB_PORT = os.getenv("DB_PORT")
@@ -138,5 +146,34 @@ def users():
return render_template("users.html", users=users)
return redirect(url_for("login"))
@app.route("/logs")
def logs():
if "username" in session:
log_files = sorted(os.listdir(LOGS_DIR), reverse=True)
return render_template("logs.html", log_files=log_files)
return redirect(url_for("login"))
@app.route("/logs/<log_file>")
def view_log(log_file):
if "username" in session:
log_path = os.path.join(LOGS_DIR, log_file)
if os.path.exists(log_path):
return send_file(log_path)
else:
return "Log file not found", 404
return redirect(url_for("login"))
@socketio.on('connect')
def handle_connect():
"""Streamt Echtzeit-Logs an den Client."""
def tail_log():
if bot_status():
log_file = os.path.join(LOGS_DIR, f"{datetime.now().strftime('%Y-%m-%d')}.log")
for line in tailer.follow(open(log_file)):
socketio.emit('log', {'data': line})
thread = threading.Thread(target=tail_log)
thread.start()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)

View File

@@ -12,4 +12,5 @@ beautifulsoup4
pdfplumber
python-dotenv
flask
psutil
psutil
flask-socketio

38
templates/logs.html Normal file
View File

@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bot Logs</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.1.3/socket.io.min.js"></script>
</head>
<body>
<div class="container mt-5">
<h1 class="text-center">Bot Logs</h1>
<div class="mt-4">
<h3>Live Logs</h3>
<pre id="live-logs" class="bg-dark text-light p-3" style="height: 300px; overflow-y: scroll;"></pre>
</div>
<div class="mt-4">
<h3>Log Files</h3>
<ul class="list-group">
{% for log_file in log_files %}
<li class="list-group-item">
<a href="{{ url_for('view_log', log_file=log_file) }}">{{ log_file }}</a>
</li>
{% endfor %}
</ul>
</div>
<a href="{{ url_for('index') }}" class="btn btn-secondary btn-block mt-3">Back to Dashboard</a>
</div>
<script>
var socket = io();
socket.on('log', function(msg) {
var logs = document.getElementById('live-logs');
logs.innerHTML += msg.data + '\n';
logs.scrollTop = logs.scrollHeight;
});
</script>
</body>
</html>