error pages
This commit is contained in:
26
app.py
26
app.py
@@ -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,
|
||||
|
||||
@@ -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
38
templates/error.html
Normal 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 %}
|
||||
@@ -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 %}
|
||||
Reference in New Issue
Block a user