feature/permissionsAndRoles #2
@@ -200,6 +200,7 @@ type StatsResponse struct {
|
||||
FQDNs int `json:"fqdns"`
|
||||
CSRs int `json:"csrs"`
|
||||
Certificates int `json:"certificates"`
|
||||
Users int `json:"users"`
|
||||
}
|
||||
|
||||
type Space struct {
|
||||
@@ -655,7 +656,7 @@ func getStatsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
var spacesCount, fqdnsCount, csrsCount, certificatesCount int
|
||||
var spacesCount, fqdnsCount, csrsCount, certificatesCount, usersCount int
|
||||
|
||||
// Zähle Spaces
|
||||
err := db.QueryRow("SELECT COUNT(*) FROM spaces").Scan(&spacesCount)
|
||||
@@ -689,11 +690,20 @@ func getStatsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// Zähle Benutzer
|
||||
err = db.QueryRow("SELECT COUNT(*) FROM users").Scan(&usersCount)
|
||||
if err != nil {
|
||||
http.Error(w, "Fehler beim Abrufen der Statistiken", http.StatusInternalServerError)
|
||||
log.Printf("Fehler beim Zählen der Benutzer: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
response := StatsResponse{
|
||||
Spaces: spacesCount,
|
||||
FQDNs: fqdnsCount,
|
||||
CSRs: csrsCount,
|
||||
Certificates: certificatesCount,
|
||||
Users: usersCount,
|
||||
}
|
||||
|
||||
json.NewEncoder(w).Encode(response)
|
||||
@@ -2211,6 +2221,12 @@ components:
|
||||
csrs:
|
||||
type: integer
|
||||
example: 7
|
||||
certificates:
|
||||
type: integer
|
||||
example: 8
|
||||
users:
|
||||
type: integer
|
||||
example: 3
|
||||
Space:
|
||||
type: object
|
||||
properties:
|
||||
|
||||
@@ -267,6 +267,20 @@ const Home = () => {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="bg-gradient-to-br from-cyan-500/20 to-cyan-600/20 rounded-lg p-4 border border-cyan-500/30">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<p className="text-sm text-slate-300 mb-1">Benutzer</p>
|
||||
<p className="text-3xl font-bold text-white">{stats.users || 0}</p>
|
||||
</div>
|
||||
<div className="w-12 h-12 bg-cyan-500/20 rounded-full flex items-center justify-center">
|
||||
<svg className="w-6 h-6 text-cyan-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<p className="text-slate-400">Fehler beim Laden der Statistiken</p>
|
||||
|
||||
Reference in New Issue
Block a user