Compare commits
2 Commits
d9010d10c5
...
1fe443d53d
Author | SHA1 | Date | |
---|---|---|---|
1fe443d53d | |||
ab04fb52b9 |
25
README.md
25
README.md
@@ -105,6 +105,31 @@ Elpatrons Datumsrechner ist als PWA installierbar (z.B. auf Android/iOS-Homescre
|
||||
- App-Icon und Theme-Color für Homescreen
|
||||
- Installation über Browser-Menü ("Zum Startbildschirm hinzufügen")
|
||||
|
||||
## Monitoring & Healthcheck
|
||||
|
||||
Die App bietet einen Monitoring-Endpunkt unter `/monitor`, der Statusinformationen als JSON zurückgibt (z.B. für Uptime-Robot, Docker Healthcheck oder eigene Tools):
|
||||
|
||||
- Status (ok)
|
||||
- Aktuelle Serverzeit
|
||||
- Uptime (Sekunden seit Start)
|
||||
- Pageviews der letzten 7 Tage
|
||||
|
||||
Beispiel-Aufruf:
|
||||
```
|
||||
GET https://date.elpatron.me/monitor
|
||||
```
|
||||
|
||||
Antwort:
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"message": "App running",
|
||||
"time": "2025-07-24T13:37:00.123456",
|
||||
"uptime_seconds": 12345,
|
||||
"pageviews_last_7_days": 42
|
||||
}
|
||||
```
|
||||
|
||||
## Entwicklung & Hinweise
|
||||
|
||||
- Die HTML-Templates liegen im Ordner `templates/` (Trennung von Logik und Darstellung)
|
||||
|
24
app.py
24
app.py
@@ -1,8 +1,11 @@
|
||||
from flask import Flask, render_template, request, redirect, url_for, session, abort
|
||||
from flask import Flask, render_template, request, redirect, url_for, session, abort, jsonify
|
||||
from datetime import datetime, timedelta
|
||||
import numpy as np
|
||||
from dateutil.relativedelta import relativedelta
|
||||
import os
|
||||
import time
|
||||
|
||||
app_start_time = time.time()
|
||||
|
||||
app = Flask(__name__)
|
||||
app.secret_key = os.environ.get('SECRET_KEY', 'dev-key')
|
||||
@@ -183,5 +186,24 @@ def stats():
|
||||
return render_template('stats_dashboard.html', pageviews=pageviews, func_counts=func_counts, impressions_per_day=impressions_per_day)
|
||||
|
||||
|
||||
@app.route('/monitor')
|
||||
def monitor():
|
||||
log_path = os.path.join('log', 'pageviews.log')
|
||||
pageviews = 0
|
||||
if os.path.exists(log_path):
|
||||
with open(log_path, encoding='utf-8') as f:
|
||||
for line in f:
|
||||
if 'PAGEVIEW' in line:
|
||||
pageviews += 1
|
||||
uptime = int(time.time() - app_start_time)
|
||||
return jsonify({
|
||||
"status": "ok",
|
||||
"message": "App running",
|
||||
"time": datetime.now().isoformat(),
|
||||
"uptime_seconds": uptime,
|
||||
"pageviews_last_7_days": pageviews
|
||||
})
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True, host="0.0.0.0")
|
Reference in New Issue
Block a user