error pages

This commit is contained in:
Mateusz Gruszczyński
2026-03-02 10:47:28 +01:00
parent 04c14e9f37
commit 6bd4b525b1
4 changed files with 84 additions and 20 deletions

26
app.py
View File

@@ -19,9 +19,24 @@ app = Flask(__name__)
app.config["SECRET_KEY"] = config.FLASK_CONFIG["secret_key"]
app.config["SEND_FILE_MAX_AGE_DEFAULT"] = config.FLASK_CONFIG.get("static_cache_timeout", 60)
# Bez Eventlet tryb wątkowy
socketio = SocketIO(app, cors_allowed_origins="*", async_mode="threading", logger=False)
@app.errorhandler(500)
def server_error(error):
app.logger.error(f'Server error: {str(error)}')
return render_template('error.html',
status=500,
title='Błąd serwera',
message='Spróbuj ponownie za chwilę.',
footer=config.FOOTER), 500
@app.errorhandler(400)
@app.errorhandler(404)
def client_error(error):
return render_template('error.html',
status=error.code,
title=f'Błąd {error.code}',
message='Nieprawidłowe żądanie.',
footer=config.FOOTER), error.code
# --------------------
# Helpers
@@ -155,9 +170,16 @@ def favicon():
@app.route("/")
def index():
safe_phases = {
k: {
'label': v['label'],
'color': v['color']
}
for k, v in config.PHASES.items()
}
return render_template(
"index.html",
phases=config.PHASES,
phases=safe_phases,
time_ranges=config.TIME_RANGES,
default_range=config.DEFAULT_TIME_RANGE,
footer=config.FOOTER,

View File

@@ -37,9 +37,13 @@
<footer class="text-center mt-4 py-3">
<small class="text-muted">
© {{ footer.year }} {{ footer.project }} |
Autor:
<a href="{{ footer.owner.url }}" target="_blank" class="text-decoration-none">{{ footer.owner.name }}</a>
© {% if footer %}{{ footer.year }}{% else %}2026{% endif %}
{% if footer %}{{ footer.project }} |{% endif %}
Autor:
<a href="{% if footer %}{{ footer.owner.url }}{% else %}https://linuxiarz.pl{% endif %}"
target="_blank" class="text-decoration-none">
{% if footer %}{{ footer.owner.name }}{% else %}linuxiarz.pl{% endif %}
</a>
{% if footer.version %}| v{{ footer.version }}{% endif %}
</small>
</footer>

38
templates/error.html Normal file
View File

@@ -0,0 +1,38 @@
<!-- templates/error.html -->
{% extends "base.html" %}
{% block content %}
<div class="row justify-content-center">
<div class="col-lg-6 col-md-8 col-12">
<div class="card border-0 shadow-lg mx-auto" style="max-width: 500px;">
<div class="card-body text-center p-5">
<div class="display-1 fw-bold text-danger mb-4">{{ status }}</div>
<h2 class="h3 fw-bold mb-3">{{ title }}</h2>
<p class="lead text-muted mb-4">{{ message }}</p>
<a href="/" class="btn btn-primary btn-lg px-4">
<i class="fas fa-home me-2"></i>Powrót do monitora
</a>
{% if config.get('DEBUG', False) %}
<details class="mt-4 p-3 bg-light rounded">
<summary class="fw-semibold text-muted cursor-pointer mb-2">Szczegóły techniczne</summary>
<pre class="small text-monospace bg-white p-3 rounded mt-2 overflow-auto" style="max-height: 200px;">
{{ request.url }}
{{ error_description if error_description else 'Brak szczegółów' }}
{{ request.args }}
</pre>
</details>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
{% endblock %}

View File

@@ -197,22 +197,22 @@
{% endblock %}
{% block scripts %}
<script src="{{ static_v('js/gauge.js') }}"></script>
<script src="{{ static_v('js/gauge.js') }}"></script>
<script src="{{ static_v('js/state.js') }}"></script>
<script src="{{ static_v('js/chart.js') }}"></script>
<script src="{{ static_v('js//events.js') }}"></script>
<script src="{{ static_v('js/data.js') }}"></script>
<script src="{{ static_v('js/socket.js') }}"></script>
<script src="{{ static_v('js/index.js') }}"></script>
<script src="{{ static_v('js/state.js') }}"></script>
<script src="{{ static_v('js/chart.js') }}"></script>
<script src="{{ static_v('js//events.js') }}"></script>
<script src="{{ static_v('js/data.js') }}"></script>
<script src="{{ static_v('js/socket.js') }}"></script>
<script src="{{ static_v('js/index.js') }}"></script>
<script src="{{ static_v('js/modal.js') }}"></script>
<script src="{{ static_v('js/apiHelper.js') }}"></script>
<script src="{{ static_v('js/pageInit.js') }}"></script>
<script src="{{ static_v('js/modal.js') }}"></script>
<script src="{{ static_v('js/apiHelper.js') }}"></script>
<script src="{{ static_v('js/pageInit.js') }}"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
initPage({{ phases|tojson }}, '{{ default_range }}');
});
</script>
<script>
document.addEventListener('DOMContentLoaded', () => {
initPage({{ phases|tojson }}, '{{ default_range }}');
});
</script>
{% endblock %}