140 lines
5.6 KiB
HTML
140 lines
5.6 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Dashboard - mGuard VPN Manager{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
<h1><i class="bi bi-speedometer2"></i> Dashboard</h1>
|
|
<button class="btn btn-outline-primary" hx-get="/htmx/dashboard/stats" hx-target="#stats-row" hx-swap="innerHTML">
|
|
<i class="bi bi-arrow-clockwise"></i> Aktualisieren
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Stats Cards -->
|
|
<div class="row mb-4" id="stats-row">
|
|
<div class="col-md-3 mb-3">
|
|
<div class="card stat-card bg-primary text-white">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between">
|
|
<div>
|
|
<h6 class="card-subtitle mb-2 text-white-50">Gateways Online</h6>
|
|
<div class="stat-value">{{ stats.gateways_online }} / {{ stats.gateways_total }}</div>
|
|
</div>
|
|
<i class="bi bi-router stat-icon"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 mb-3">
|
|
<div class="card stat-card bg-success text-white">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between">
|
|
<div>
|
|
<h6 class="card-subtitle mb-2 text-white-50">Aktive Verbindungen</h6>
|
|
<div class="stat-value">{{ stats.active_connections }}</div>
|
|
</div>
|
|
<i class="bi bi-plug stat-icon"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 mb-3">
|
|
<div class="card stat-card bg-info text-white">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between">
|
|
<div>
|
|
<h6 class="card-subtitle mb-2 text-white-50">Endpunkte</h6>
|
|
<div class="stat-value">{{ stats.endpoints_total }}</div>
|
|
</div>
|
|
<i class="bi bi-hdd-network stat-icon"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 mb-3">
|
|
<div class="card stat-card bg-warning text-dark">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between">
|
|
<div>
|
|
<h6 class="card-subtitle mb-2">Benutzer</h6>
|
|
<div class="stat-value">{{ stats.users_total }}</div>
|
|
</div>
|
|
<i class="bi bi-people stat-icon"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<!-- Gateway Status -->
|
|
<div class="col-lg-8 mb-4">
|
|
<div class="card">
|
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
<h5 class="mb-0"><i class="bi bi-router"></i> Gateway Status</h5>
|
|
<a href="/gateways" class="btn btn-sm btn-outline-primary">Alle anzeigen</a>
|
|
</div>
|
|
<div class="card-body" hx-get="/htmx/gateways/status-list" hx-trigger="load, every 30s" hx-swap="innerHTML">
|
|
<div class="text-center py-4">
|
|
<div class="spinner-border text-primary" role="status">
|
|
<span class="visually-hidden">Laden...</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Recent Connections -->
|
|
<div class="col-lg-4 mb-4">
|
|
<div class="card">
|
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
<h5 class="mb-0"><i class="bi bi-clock-history"></i> Letzte Verbindungen</h5>
|
|
<a href="/connections" class="btn btn-sm btn-outline-primary">Alle</a>
|
|
</div>
|
|
<div class="card-body" hx-get="/htmx/connections/recent" hx-trigger="load, every 60s" hx-swap="innerHTML">
|
|
<div class="text-center py-4">
|
|
<div class="spinner-border text-primary" role="status">
|
|
<span class="visually-hidden">Laden...</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Quick Actions -->
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0"><i class="bi bi-lightning"></i> Schnellaktionen</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-3 mb-2">
|
|
<a href="/gateways/new" class="btn btn-outline-primary w-100">
|
|
<i class="bi bi-plus-circle"></i> Neues Gateway
|
|
</a>
|
|
</div>
|
|
<div class="col-md-3 mb-2">
|
|
<a href="/users/new" class="btn btn-outline-success w-100">
|
|
<i class="bi bi-person-plus"></i> Neuer Benutzer
|
|
</a>
|
|
</div>
|
|
<div class="col-md-3 mb-2">
|
|
<a href="/connections" class="btn btn-outline-info w-100">
|
|
<i class="bi bi-list-check"></i> Verbindungs-Log
|
|
</a>
|
|
</div>
|
|
<div class="col-md-3 mb-2">
|
|
<a href="/api/docs" target="_blank" class="btn btn-outline-secondary w-100">
|
|
<i class="bi bi-code-slash"></i> API Docs
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|