{
  "ok": true,
  "created_at": "2026-08-03T19:36:36",
  "app": "aktienanalyse",
  "system": {
    "app": "aktienanalyse",
    "time": "2026-08-03T19:36:36",
    "uptime_seconds": 456525,
    "schedule_time": "07:00",
    "run_mode": "daemon",
    "symbols": [
      "RHM.DE",
      "LDO.MI",
      "BA",
      "RTX",
      "LMT",
      "NOC",
      "BAESY",
      "NVDA"
    ],
    "compose_symbols": [
      "RHM.DE",
      "LDO.MI",
      "BA",
      "RTX",
      "LMT",
      "NOC",
      "BAESY",
      "NVDA"
    ],
    "latest_report": {
      "path": "/data/reports/latest.html",
      "name": "latest.html",
      "size_bytes": 35543,
      "modified_at": "2026-08-03T07:02:20"
    },
    "latest_json": {
      "path": "/data/reports/json/analyse_20260803_0702.json",
      "name": "analyse_20260803_0702.json",
      "size_bytes": 16677,
      "modified_at": "2026-08-03T07:02:20"
    },
    "report_counts": {
      "html": 100,
      "json": 100,
      "exports": 1,
      "snapshots": 2
    },
    "paths": {
      "reports_dir": "/data/reports",
      "json_dir": "/data/reports/json",
      "exports_dir": "/data/reports/exports",
      "snapshots_dir": "/data/reports/snapshots",
      "log_file": "/data/logs/aktienanalyse.log",
      "compose_file": "/volume1/docker/aktienanalyse/docker-compose.yml"
    },
    "delivery_configured": {
      "email": true,
      "telegram": false,
      "nextcloud": false
    },
    "ai_configured": {
      "claude": true,
      "ollama_url": "http://192.168.178.23:11434",
      "ollama_model": "llama3.1:8b",
      "use_ollama_first": false
    },
    "job": {
      "running": false,
      "last_started_at": "2026-08-03T07:00:35",
      "last_finished_at": "2026-08-03T07:02:22",
      "last_ok": true,
      "last_error": null,
      "last_results": {
        "html_path": "/data/reports/aktienanalyse_20260803_0702.html",
        "email": true,
        "telegram": false,
        "nextcloud": false,
        "json_path": "/data/reports/json/analyse_20260803_0702.json"
      },
      "last_symbols": [
        "RHM.DE",
        "LDO.MI",
        "BA",
        "RTX",
        "LMT",
        "NOC",
        "BAESY",
        "NVDA"
      ],
      "source": "schedule",
      "lock": {
        "source": "schedule",
        "pid": 1,
        "started_at": "2026-08-03T07:00:35",
        "symbols": [
          "RHM.DE",
          "LDO.MI",
          "BA",
          "RTX",
          "LMT",
          "NOC",
          "BAESY",
          "NVDA"
        ]
      }
    },
    "lock": null,
    "log": {
      "exists": true,
      "file": {
        "path": "/data/logs/aktienanalyse.log",
        "name": "aktienanalyse.log",
        "size_bytes": 28905,
        "modified_at": "2026-08-03T07:02:22"
      },
      "tail_lines_checked": 247,
      "recent_errors": [
        "2026-07-19 05:49:16,302 [ERROR] app.reporter - E-Mail-Versand fehlgeschlagen: Connection unexpectedly closed",
        "2026-07-22 12:39:13,538 [ERROR] app.analyzer - Gruppe ['RHM.DE', 'LDO.MI', 'BA', 'RTX'] fehlgeschlagen: 404 Client Error: Not Found for url: http://192.168.178.23:11434/api/generate",
        "2026-07-22 12:39:14,109 [ERROR] app.analyzer - Gruppe ['LMT', 'NOC', 'BAESY', 'NVDA'] fehlgeschlagen: 404 Client Error: Not Found for url: http://192.168.178.23:11434/api/generate",
        "2026-07-22 12:39:14,124 [ERROR] main - Fehler bei Analyse: Keine Aktien konnten analysiert werden!"
      ],
      "recent_warnings": [
        "2026-07-31 07:02:19,881 [WARNING] app.reporter - Telegram: Token/Chat-ID fehlen – übersprungen",
        "2026-07-31 07:02:19,882 [WARNING] app.reporter - Nextcloud: Zugangsdaten fehlen – übersprungen",
        "2026-08-01 07:01:58,207 [WARNING] app.reporter - Telegram: Token/Chat-ID fehlen – übersprungen",
        "2026-08-01 07:01:58,208 [WARNING] app.reporter - Nextcloud: Zugangsdaten fehlen – übersprungen",
        "2026-08-02 07:02:39,071 [WARNING] app.reporter - Telegram: Token/Chat-ID fehlen – übersprungen",
        "2026-08-02 07:02:39,071 [WARNING] app.reporter - Nextcloud: Zugangsdaten fehlen – übersprungen",
        "2026-08-03 07:02:22,123 [WARNING] app.reporter - Telegram: Token/Chat-ID fehlen – übersprungen",
        "2026-08-03 07:02:22,124 [WARNING] app.reporter - Nextcloud: Zugangsdaten fehlen – übersprungen"
      ],
      "last_success": "2026-08-03 07:02:22,149 [INFO] main - Fertig. Ergebnisse: {'html_path': '/data/reports/aktienanalyse_20260803_0702.html', 'email': True, 'telegram': False, 'nextcloud': False, 'json_path': '/data/reports/json/analyse_20260803_0702.json'}"
    },
    "disk": {
      "total_bytes": 2047001751552,
      "used_bytes": 405515616256,
      "free_bytes": 1641486135296,
      "used_pct": 19.8
    }
  },
  "pages": [
    {
      "path": "/data/reports/index.html",
      "name": "index.html",
      "size_bytes": 9415,
      "modified_at": "2026-06-19T05:28:40"
    },
    {
      "path": "/data/reports/admin.html",
      "name": "admin.html",
      "size_bytes": 18251,
      "modified_at": "2026-06-19T05:28:40"
    },
    {
      "path": "/data/reports/cockpit.html",
      "name": "cockpit.html",
      "size_bytes": 8244,
      "modified_at": "2026-06-18T18:08:41"
    },
    {
      "path": "/data/reports/workflow.html",
      "name": "workflow.html",
      "size_bytes": 4122,
      "modified_at": "2026-06-18T18:08:41"
    },
    {
      "path": "/data/reports/abschluss.html",
      "name": "abschluss.html",
      "size_bytes": 6286,
      "modified_at": "2026-06-19T04:00:30"
    },
    {
      "path": "/data/reports/files.html",
      "name": "files.html",
      "size_bytes": 8426,
      "modified_at": "2026-06-19T04:30:18"
    },
    {
      "path": "/data/reports/inventory.html",
      "name": "inventory.html",
      "size_bytes": 5512,
      "modified_at": "2026-06-19T04:35:12"
    },
    {
      "path": "/data/reports/latest.html",
      "name": "latest.html",
      "size_bytes": 35543,
      "modified_at": "2026-08-03T07:02:20"
    }
  ],
  "api_routes": [
    "GET /api/health",
    "GET /api/system",
    "GET /api/inventory",
    "GET /api/latest-json",
    "GET /api/portfolio",
    "POST /api/portfolio",
    "GET /api/reports?kind=html|json|exports",
    "GET /api/logs?lines=120",
    "GET /api/job/status",
    "POST /api/job/clear",
    "POST /api/run",
    "GET|POST /api/export/final",
    "GET|POST /api/snapshot/today",
    "GET /api/snapshots"
  ],
  "source_files": [
    {
      "path": "/app/main.py",
      "name": "main.py",
      "size_bytes": 3338,
      "modified_at": "2026-06-18T17:48:26"
    },
    {
      "path": "/app/app/api.py",
      "name": "api.py",
      "size_bytes": 30049,
      "modified_at": "2026-06-19T05:19:04"
    },
    {
      "path": "/app/app/analyzer.py",
      "name": "analyzer.py",
      "size_bytes": 5389,
      "modified_at": "2026-03-29T11:14:03"
    },
    {
      "path": "/app/app/reporter.py",
      "name": "reporter.py",
      "size_bytes": 9261,
      "modified_at": "2026-03-29T10:40:44"
    },
    {
      "path": "/app/app/runstate.py",
      "name": "runstate.py",
      "size_bytes": 2954,
      "modified_at": "2026-06-18T17:48:26"
    },
    {
      "path": "/app/templates/report.html.j2",
      "name": "report.html.j2",
      "size_bytes": 9971,
      "modified_at": "2026-03-29T10:40:44"
    },
    {
      "path": "/volume1/docker/aktienanalyse/docker-compose.yml",
      "name": "docker-compose.yml",
      "size_bytes": 1558,
      "modified_at": "2026-07-12T18:33:55"
    },
    {
      "path": "/etc/hostname",
      "name": "hostname",
      "size_bytes": 13,
      "modified_at": "2026-07-29T12:47:50"
    }
  ],
  "directories": {
    "reports": {
      "path": "/data/reports",
      "exists": true
    },
    "json": {
      "path": "/data/reports/json",
      "exists": true
    },
    "exports": {
      "path": "/data/reports/exports",
      "exists": true
    },
    "snapshots": {
      "path": "/data/reports/snapshots",
      "exists": true
    },
    "logs": {
      "path": "/data/logs",
      "exists": true
    },
    "state": {
      "path": "/data/state",
      "exists": true
    },
    "portfolio_data": {
      "path": "/data/portfolio",
      "exists": true
    }
  },
  "env": {
    "RUN_MODE": "daemon",
    "SCHEDULE_TIME": "07:00",
    "INITIAL_RUN": "false",
    "STOCK_SYMBOLS": "RHM.DE,LDO.MI,BA,RTX,LMT,NOC,BAESY,NVDA",
    "CLAUDE_MODEL": "claude-opus-4-6",
    "OLLAMA_URL": "http://192.168.178.23:11434",
    "OLLAMA_MODEL": "llama3.1:8b",
    "USE_OLLAMA_FIRST": "false",
    "LOG_LEVEL": "INFO"
  },
  "secrets_configured": {
    "CLAUDE_API_KEY": true,
    "GMAIL_APP_PASSWORD": true,
    "TELEGRAM_BOT_TOKEN": false,
    "TELEGRAM_CHAT_ID": false,
    "NEXTCLOUD_USER": true,
    "NEXTCLOUD_PASS": false
  },
  "checks": [
    {
      "name": "Health",
      "ok": true,
      "detail": "Latest Report und Logdatei vorhanden"
    },
    {
      "name": "Reports",
      "ok": true,
      "detail": "100 HTML-Reports"
    },
    {
      "name": "JSON",
      "ok": true,
      "detail": "100 JSON-Reports"
    },
    {
      "name": "Job-Lock",
      "ok": true,
      "detail": "Kein aktiver Lock"
    },
    {
      "name": "Claude",
      "ok": true,
      "detail": "API-Key gesetzt"
    },
    {
      "name": "E-Mail",
      "ok": true,
      "detail": "Gmail App-Passwort gesetzt"
    },
    {
      "name": "Telegram",
      "ok": false,
      "detail": "Telegram nicht konfiguriert"
    },
    {
      "name": "Nextcloud",
      "ok": false,
      "detail": "Nextcloud nicht konfiguriert"
    }
  ]
}