#!/usr/bin/env python3 import subprocess import json import time import threading from datetime import datetime from pathlib import Path from flask import Flask, jsonify, render_template_string DB_DATA = Path("page_counts.json") INTERVAL = 15 * 60 # 15 Minuten app = Flask(__name__) HTML = """ JonasSearch – Pages

JonasSearch

Indexed Pages
– Pages
""" def load_data(): if not DB_DATA.exists(): return [] try: with DB_DATA.open("r", encoding="utf-8") as f: return json.load(f) except Exception: return [] def save_data(data): tmp = DB_DATA.with_suffix(".tmp") with tmp.open("w", encoding="utf-8") as f: json.dump(data, f, indent=2) tmp.replace(DB_DATA) def get_page_count(): command = [ "sudo", "-u", "postgres", "psql", "-p", "25432", "-d", "jonassearch", "-t", "-A", "-c", "SELECT COUNT(*) FROM pages;" ] result = subprocess.run( command, capture_output=True, text=True, check=True ) return int(result.stdout.strip()) def collect(): while True: try: count = get_page_count() entry = { "timestamp": datetime.now().isoformat(), "count": count } data = load_data() data.append(entry) save_data(data) print( f"[{entry['timestamp']}] " f"Pages: {count}" ) except Exception as e: print(f"Fehler beim Abrufen der Seitenzahl: {e}") time.sleep(INTERVAL) @app.route("/") def index(): return render_template_string(HTML) @app.route("/api/data") def api_data(): return jsonify({ "values": load_data() }) if __name__ == "__main__": # Collector im Hintergrund starten thread = threading.Thread(target=collect, daemon=True) thread.start() # Webserver app.run( host="0.0.0.0", port=8081, threaded=True )