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
|
- App-Icon und Theme-Color für Homescreen
|
||||||
- Installation über Browser-Menü ("Zum Startbildschirm hinzufügen")
|
- 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
|
## Entwicklung & Hinweise
|
||||||
|
|
||||||
- Die HTML-Templates liegen im Ordner `templates/` (Trennung von Logik und Darstellung)
|
- 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
|
from datetime import datetime, timedelta
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
import os
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
|
app_start_time = time.time()
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.secret_key = os.environ.get('SECRET_KEY', 'dev-key')
|
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)
|
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__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True, host="0.0.0.0")
|
app.run(debug=True, host="0.0.0.0")
|
Reference in New Issue
Block a user