nessi 672473603e Enhance login page with new UI and styling updates
Introduced a redesigned login page featuring a two-column layout with a branding section. Added new styles such as gradient backgrounds, input fields with focus animations, and button hover effects. These changes improve the visual appeal and user experience.
2026-02-12 10:24:50 +01:00
2026-02-12 09:09:13 +01:00
2026-02-12 09:09:13 +01:00
2026-02-12 08:12:57 +01:00
2026-02-12 09:09:13 +01:00
2026-02-12 09:09:13 +01:00
2026-02-12 09:09:13 +01:00

NexaPG - PostgreSQL Monitoring Stack

Docker-basierte Monitoring-Loesung fuer mehrere PostgreSQL-Targets mit FastAPI + React.

Features

  • Multi-target PostgreSQL Monitoring (remote)
  • Polling Collector fuer:
    • pg_stat_database
    • pg_stat_activity
    • pg_stat_bgwriter
    • pg_locks
    • pg_stat_statements (falls auf Target aktiviert)
  • Core-DB fuer:
    • User/Auth/RBAC (admin, operator, viewer)
    • Targets (Credentials verschluesselt via Fernet)
    • Metrics / Query Stats
    • Audit Logs
  • Auth mit JWT Access/Refresh Tokens
  • FastAPI + SQLAlchemy async + Alembic
  • React (Vite) Frontend mit:
    • Login/Logout
    • Dashboard
    • Target Detail mit Charts
    • Query Insights
    • Admin User Management
  • Health Endpoints:
    • /api/v1/healthz
    • /api/v1/readyz

Struktur

  • backend/ FastAPI App
  • frontend/ React (Vite) App
  • ops/ Scripts
  • docker-compose.yml Stack
  • .env.example Konfigurationsvorlage

Schnellstart

  1. Env-Datei erstellen:
cp .env.example .env
  1. Fernet Key setzen:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

Wert in .env bei ENCRYPTION_KEY eintragen.

  1. Stack starten:
make up
  1. URLs:
  • Frontend: http://localhost:5173
  • Backend API: http://localhost:8000/api/v1
  • OpenAPI: http://localhost:8000/docs

Default Admin (aus .env):

  • Email: admin@example.com
  • Passwort: ChangeMe123!

Commands

make up
make down
make logs
make migrate

API (Minimum)

  • POST /api/v1/auth/login
  • POST /api/v1/auth/refresh
  • POST /api/v1/auth/logout
  • GET /api/v1/me
  • CRUD: GET/POST/PUT/DELETE /api/v1/targets
  • GET /api/v1/targets/{id}/metrics?from=&to=&metric=
  • GET /api/v1/targets/{id}/locks
  • GET /api/v1/targets/{id}/activity
  • GET /api/v1/targets/{id}/top-queries
  • Admin-only CRUD users:
    • GET /api/v1/admin/users
    • POST /api/v1/admin/users
    • PUT /api/v1/admin/users/{user_id}
    • DELETE /api/v1/admin/users/{user_id}

Security Notes

  • Keine Secrets hardcoded
  • Passwoerter als Argon2 Hash
  • Target-Credentials verschluesselt (Fernet)
  • CORS via Env steuerbar
  • Audit Logs fuer Login / Logout / Target- und User-Aenderungen
  • Rate limiting: Platzhalter (kann spaeter middleware-basiert ergaenzt werden)

Wichtiger Hinweis zu pg_stat_statements

Auf jedem monitored Target muss pg_stat_statements aktiviert sein, sonst bleiben Query Insights leer. Beispiel:

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
Description
No description provided
Readme 3 MiB
2026-02-14 22:14:54 +00:00
Languages
Python 48.2%
JavaScript 40.1%
CSS 10.4%
Shell 0.5%
Dockerfile 0.5%
Other 0.2%