95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
|
|
"""Gerichte database check: dashboard data + Neo4j"""
|
||
|
|
import os, sys, json
|
||
|
|
os.environ["PG_HOST"] = "192.168.1.211"
|
||
|
|
os.environ["PG_PORT"] = "5433"
|
||
|
|
os.environ["PG_USER"] = "mo"
|
||
|
|
os.environ["PG_PASSWORD"] = "WaQTUw2t"
|
||
|
|
os.environ["PG_DATABASE"] = "homelab"
|
||
|
|
os.environ["NEO4J_URI"] = "neo4j://192.168.1.211:49153"
|
||
|
|
os.environ["NEO4J_USER"] = "neo4j"
|
||
|
|
os.environ["NEO4J_PASSWORD"] = "WaQTUw2t"
|
||
|
|
|
||
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||
|
|
|
||
|
|
# Fix encoding
|
||
|
|
sys.stdout.reconfigure(encoding='utf-8')
|
||
|
|
|
||
|
|
print("=" * 70)
|
||
|
|
print("DASHBOARD DATA (PostgreSQL)")
|
||
|
|
print("=" * 70)
|
||
|
|
|
||
|
|
from src.pg_client import query
|
||
|
|
|
||
|
|
# Favorites
|
||
|
|
print("\n--- FAVORITES (20 rows) ---")
|
||
|
|
rows = query("SELECT id, title, url, icon, category, sort_order, is_pinned FROM dashboard.favorites ORDER BY is_pinned DESC, sort_order")
|
||
|
|
for r in rows:
|
||
|
|
pinned = "📌" if r['is_pinned'] else " "
|
||
|
|
print(f" {pinned} [{r['id']}] {r['title']:<30} | {r['url']:<45} | {r['category']}")
|
||
|
|
|
||
|
|
# Settings
|
||
|
|
print("\n--- SETTINGS (5 rows) ---")
|
||
|
|
rows = query("SELECT * FROM dashboard.settings ORDER BY key")
|
||
|
|
for r in rows:
|
||
|
|
print(f" {r['key']:<25} = {r['value']}")
|
||
|
|
|
||
|
|
# Passwords
|
||
|
|
print("\n--- PASSWORDS ---")
|
||
|
|
rows = query("SELECT count(*) as c FROM dashboard.passwords", fetch="one")
|
||
|
|
print(f" Count: {rows['c']}")
|
||
|
|
|
||
|
|
# Calendar
|
||
|
|
print("\n--- CALENDAR ---")
|
||
|
|
rows = query("SELECT count(*) as c FROM dashboard.calendar_events", fetch="one")
|
||
|
|
print(f" Count: {rows['c']}")
|
||
|
|
|
||
|
|
# Files
|
||
|
|
print("\n--- FILE INDEX ---")
|
||
|
|
rows = query("SELECT count(*) as c FROM dashboard.file_index", fetch="one")
|
||
|
|
print(f" Count: {rows['c']}")
|
||
|
|
|
||
|
|
# Photos
|
||
|
|
print("\n--- PHOTOS ---")
|
||
|
|
rows = query("SELECT count(*) as c FROM dashboard.photos", fetch="one")
|
||
|
|
print(f" Count: {rows['c']}")
|
||
|
|
|
||
|
|
# Widgets
|
||
|
|
print("\n--- WIDGETS ---")
|
||
|
|
rows = query("SELECT count(*) as c FROM dashboard.dashboard_widgets", fetch="one")
|
||
|
|
print(f" Count: {rows['c']}")
|
||
|
|
|
||
|
|
# ── NEO4J ──────────────────────────────────────────────────────
|
||
|
|
print("\n" + "=" * 70)
|
||
|
|
print("NEO4J NETWERK DATA")
|
||
|
|
print("=" * 70)
|
||
|
|
|
||
|
|
from src.neo4j_client import get_driver, get_all_devices, get_scan_history, get_network_summary, close
|
||
|
|
|
||
|
|
try:
|
||
|
|
devices = get_all_devices()
|
||
|
|
print(f"\nDevices: {len(devices)}")
|
||
|
|
for d in devices:
|
||
|
|
ports = sorted([p.get('port') for p in (d.get('ports') or []) if p and p.get('port')])
|
||
|
|
print(f" {d['ip']:<16} {d.get('hostname','')[:35]:<35} {d.get('os_guess','')[:28]:<28} ports={ports}")
|
||
|
|
|
||
|
|
print("\n--- Scan History ---")
|
||
|
|
for s in get_scan_history():
|
||
|
|
print(f" {s['id']} @ {s.get('timestamp','?')} — {s.get('hosts_active','?')} hosts")
|
||
|
|
|
||
|
|
print("\n--- Summary ---")
|
||
|
|
s = get_network_summary()
|
||
|
|
print(f" Total devices: {s.get('total_devices','?')}")
|
||
|
|
print(f" Unique ports: {s.get('total_ports','?')}")
|
||
|
|
os_types = s.get('os_types', [])
|
||
|
|
from collections import Counter
|
||
|
|
for os_t, cnt in Counter(os_types).most_common():
|
||
|
|
print(f" {os_t}: {cnt}")
|
||
|
|
|
||
|
|
close()
|
||
|
|
except Exception as e:
|
||
|
|
print(f"Neo4j ERROR: {e}")
|
||
|
|
import traceback
|
||
|
|
traceback.print_exc()
|
||
|
|
|
||
|
|
print("\nDONE.")
|