modified: app.py

modified:   templates/logs.html
This commit is contained in:
SimolZimol
2024-09-03 13:09:19 +02:00
parent 764f4832cd
commit 2748b7583e
2 changed files with 48 additions and 22 deletions

31
app.py
View File

@@ -1,12 +1,15 @@
from flask import Flask, render_template, redirect, url_for, request, session from flask import Flask, render_template, redirect, url_for, request, session, jsonify, send_file
import os import os
import subprocess import subprocess
import psutil import psutil
import mysql.connector import mysql.connector
from datetime import datetime
app = Flask(__name__) app = Flask(__name__)
app.secret_key = os.getenv("FLASK_SECRET_KEY", "default_secret_key") app.secret_key = os.getenv("FLASK_SECRET_KEY", "default_secret_key")
LOG_FILE_PATH = os.path.join("logs", f"{datetime.now().strftime('%Y-%m-%d')}.log")
# Verwende Umgebungsvariablen aus Coolify für die Datenbankverbindung # Verwende Umgebungsvariablen aus Coolify für die Datenbankverbindung
DB_HOST = os.getenv("DB_HOST") DB_HOST = os.getenv("DB_HOST")
DB_PORT = os.getenv("DB_PORT") DB_PORT = os.getenv("DB_PORT")
@@ -138,5 +141,31 @@ def users():
return render_template("users.html", users=users) return render_template("users.html", users=users)
return redirect(url_for("login")) return redirect(url_for("login"))
@app.route("/logs")
def view_logs():
"""Zeigt die Logs des Bots im Admin-Panel an."""
if "username" in session:
return render_template("logs.html")
return redirect(url_for("login"))
@app.route("/get_logs")
def get_logs():
"""Liest den Inhalt der Log-Datei und gibt ihn zurück."""
if "username" in session:
try:
with open(LOG_FILE_PATH, 'r', encoding='utf-8') as file:
logs = file.read()
return jsonify({"logs": logs})
except FileNotFoundError:
return jsonify({"logs": "Log file not found."})
return redirect(url_for("login"))
@app.route("/download_logs")
def download_logs():
"""Bietet die Log-Datei zum Download an."""
if "username" in session:
return send_file(LOG_FILE_PATH, as_attachment=True)
return redirect(url_for("login"))
if __name__ == "__main__": if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True) app.run(host="0.0.0.0", port=5000, debug=True)

View File

@@ -5,34 +5,31 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bot Logs</title> <title>Bot Logs</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet"> <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> </head>
<body> <body>
<div class="container mt-5"> <div class="container mt-5">
<h1 class="text-center">Bot Logs</h1> <h1 class="text-center">Bot Logs</h1>
<div class="mt-4"> <div class="card mt-4">
<h3>Live Logs</h3> <div class="card-body">
<pre id="live-logs" class="bg-dark text-light p-3" style="height: 300px; overflow-y: scroll;"></pre> <button class="btn btn-primary mb-3" onclick="refreshLogs()">Refresh Logs</button>
</div> <a href="{{ url_for('download_logs') }}" class="btn btn-secondary mb-3">Download Logs</a>
<div class="mt-4"> <pre id="log-content" style="height: 500px; overflow-y: scroll; background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd;"></pre>
<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> <a href="{{ url_for('index') }}" class="btn btn-secondary btn-block mt-3">Back to Dashboard</a>
</div> </div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/js/bootstrap.bundle.min.js"></script>
<script> <script>
var socket = io(); function refreshLogs() {
socket.on('log', function(msg) { fetch('{{ url_for("get_logs") }}')
var logs = document.getElementById('live-logs'); .then(response => response.json())
logs.innerHTML += msg.data + '\n'; .then(data => {
logs.scrollTop = logs.scrollHeight; document.getElementById("log-content").textContent = data.logs;
}); });
}
window.onload = refreshLogs;
</script> </script>
</body> </body>
</html> </html>