beinahe suizidiert

This commit is contained in:
2025-07-30 12:20:19 +02:00
parent 61dcfdfdd5
commit 4d2366b5c9
4 changed files with 30 additions and 111 deletions

View File

@@ -1,5 +1,3 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
@@ -28,7 +26,6 @@ public class ServerDetailsViewModel
public int CpuCores { get; set; } = 0; public int CpuCores { get; set; } = 0;
public string? GpuType { get; set; } = string.Empty; public string? GpuType { get; set; } = string.Empty;
public double RamSize { get; set; } = 0; public double RamSize { get; set; } = 0;
public string? DiskSpace { get; set; } = string.Empty;
// Database // Database
@@ -39,16 +36,4 @@ public class ServerDetailsViewModel
public DateTime LastSeen { get; set; } public DateTime LastSeen { get; set; }
public Boolean IsVerified { get; set; } = false; public Boolean IsVerified { get; set; } = false;
// Display Properties for View
public string DisplayCpuType => !string.IsNullOrWhiteSpace(CpuType) ? CpuType : "-";
public string DisplayCpuCores => CpuCores > 0 ? CpuCores.ToString() : "-";
public string DisplayGpuType => !string.IsNullOrWhiteSpace(GpuType) ? GpuType : "-";
public string DisplayRamSize => RamSize > 0 ? $"{RamSize} GB" : "-";
//public string DisplayDiskSpace => !string.IsNullOrWhiteSpace(DiskSpace) ? DiskSpace : "-";
public string DisplayCreatedAt => CreatedAt.ToLocalTime().ToString("dd.MM.yyyy HH:mm");
public string DisplayLastSeen => LastSeen.ToLocalTime().ToString("dd.MM.yyyy HH:mm");
public string StatusBadgeClass => IsOnline ? "bg-success" : "bg-danger";
public string StatusIcon => IsOnline ? "bi-check-circle" : "bi-x-circle";
public string StatusText => IsOnline ? "Online" : "Offline";
} }

View File

@@ -4,13 +4,12 @@
<div class="row g-4"> <div class="row g-4">
@foreach (var s in Model) @foreach (var s in Model)
{ {
<div class="col-12 col-sm-6 col-lg-4"> <div class="col-12 col-sm-6">
<div class="card h-100 border-secondary shadow-sm"> <div class="card h-100 border-secondary shadow-sm">
<div class="card-body d-flex flex-column gap-3"> <div class="card-body d-flex flex-column gap-3">
<!-- Header mit Name und Status -->
<div class="d-flex justify-content-between align-items-center mb-3"> <div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="card-title text-dark mb-0"> <h5 class="card-title text-dark mb-0">
<i class="bi bi-server me-2 text-primary"></i>(#@s.Id) @s.Name <i class="bi bi-pc-display me-2 text-muted"></i>(#@s.Id) @s.Name
</h5> </h5>
<span class="badge <span class="badge
@(s.IsOnline ? "bg-success text-light" : "bg-danger text-light")"> @(s.IsOnline ? "bg-success text-light" : "bg-danger text-light")">
@@ -19,7 +18,6 @@
</span> </span>
</div> </div>
<!-- Server Details -->
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-5 text-muted small"> <div class="col-md-5 text-muted small">
<div><i class="bi bi-globe me-1"></i><strong>IP:</strong> @s.IPAddress</div> <div><i class="bi bi-globe me-1"></i><strong>IP:</strong> @s.IPAddress</div>
@@ -37,10 +35,10 @@
</div> </div>
</div> </div>
<!-- Action Buttons --> <div class="d-flex flex-wrap gap-2">
<div class="d-flex flex-wrap gap-2 mt-auto">
<a asp-action="Details" asp-route-id="@s.Id" class="btn btn-sm btn-outline-primary flex-grow-1"> <a asp-action="EditServer" asp-route-id="@s.Id" class="btn btn-outline-primary">
<i class="bi bi-info-circle me-1"></i> Details <i class="bi bi-pencil-square me-1"></i> Bearbeiten
</a> </a>
<a asp-asp-controller="Server" asp-action="Details" asp-route-id="@s.Id" <a asp-asp-controller="Server" asp-action="Details" asp-route-id="@s.Id"
@@ -66,20 +64,4 @@
</div> </div>
} }
</div> </div>
</div> </div>
<style>
.card {
transition: transform 0.2s, box-shadow 0.2s;
}
.card:hover {
transform: translateY(-2px);
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
}
.badge {
font-size: 0.8rem;
padding: 0.35em 0.65em;
}
</style>

View File

@@ -2,84 +2,42 @@
<div class="card shadow-sm"> <div class="card shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center"> <div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0"> <h5 class="mb-0">
<i class="bi bi-server me-2 text-primary"></i>Serverdetails: @Model.Name <i class="bi bi-hdd-network me-2 text-primary"></i>Serverdetails: @Model.Name
</h5> </h5>
<span class="badge @Model.StatusBadgeClass"> <span class="badge @(Model.IsOnline ? "bg-success" : "bg-danger")">
<i class="bi @Model.StatusIcon me-1"></i> <i class="bi @(Model.IsOnline ? "bi-check-circle" : "bi-x-circle") me-1"></i>
@Model.StatusText @(Model.IsOnline ? "Online" : "Offline")
</span> </span>
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="row"> <dl class="row mb-0">
<!-- System Information --> <dt class="col-sm-3">ID</dt>
<div class="col-md-6"> <dd class="col-sm-9">@Model.Id</dd>
<h6><i class="bi bi-info-circle me-2"></i>Systeminformationen</h6>
<dl class="row">
<dt class="col-sm-4">ID</dt>
<dd class="col-sm-8">@Model.Id</dd>
<dt class="col-sm-4">IP-Adresse</dt> <dt class="col-sm-3">IP-Adresse</dt>
<dd class="col-sm-8">@Model.IPAddress</dd> <dd class="col-sm-9">@Model.IPAddress</dd>
<dt class="col-sm-4">Typ</dt> <dt class="col-sm-3">Typ</dt>
<dd class="col-sm-8">@Model.Type</dd> <dd class="col-sm-9">@Model.Type</dd>
<dt class="col-sm-4">Erstellt am</dt> <dt class="col-sm-3">Erstellt am</dt>
<dd class="col-sm-8">@Model.DisplayCreatedAt</dd> <dd class="col-sm-9">@Model.CreatedAt.ToLocalTime().ToString("dd.MM.yyyy HH:mm")</dd>
<dt class="col-sm-4">Zuletzt online</dt> <dt class="col-sm-3">Zuletzt gesehen</dt>
<dd class="col-sm-8">@Model.DisplayLastSeen</dd> <dd class="col-sm-9">@Model.LastSeen.ToLocalTime().ToString("dd.MM.yyyy HH:mm")</dd>
</dl> </dl>
</div>
<!-- Hardware Information -->
<div class="col-md-6">
<h6><i class="bi bi-cpu me-2"></i>Hardwareinformationen</h6>
<dl class="row">
<dt class="col-sm-4">CPU-Typ</dt>
<dd class="col-sm-8">@Model.DisplayCpuType</dd>
<dt class="col-sm-4">CPU-Kerne</dt>
<dd class="col-sm-8">@Model.DisplayCpuCores</dd>
<dt class="col-sm-4">GPU-Typ</dt>
<dd class="col-sm-8">@Model.DisplayGpuType</dd>
<dt class="col-sm-4">RAM</dt>
<dd class="col-sm-8">@Model.DisplayRamSize</dd>
<dt class="col-sm-4">Festplatte</dt>
<dd class="col-sm-8">@Model.DisplayDiskSpace</dd>
</dl>
</div>
</div>
<!-- Description -->
@if (!string.IsNullOrEmpty(Model.Description))
{
<div class="mt-4">
<h6><i class="bi bi-card-text me-2"></i>Beschreibung</h6>
<div class="alert alert-light">
@Model.Description
</div>
</div>
}
</div> </div>
<div class="card-footer text-end">
<!-- Card Footer with Actions -->
<div class="card-footer d-flex flex-wrap gap-2">
<a href="/Download/File/Linux/heartbeat" class="btn btn-success"> <a href="/Download/File/Linux/heartbeat" class="btn btn-success">
🖥️ Linux Agent 🖥️ Linux Agent
</a> </a>
<a asp-action="EditServer" asp-route-id="@Model.Id" class="btn btn-outline-primary me-2">
<a asp-action="EditServer" asp-route-id="@Model.Id" class="btn btn-outline-primary"> <i class="bi bi-pencil"></i> Bearbeiten
<i class="bi bi-pencil me-1"></i> Bearbeiten
</a> </a>
<form asp-action="Delete" asp-route-id="@Model.Id" method="post" class="d-inline" <form asp-action="Delete" asp-route-id="@Model.Id" method="post" class="d-inline"
onsubmit="return confirm('Diesen Server wirklich löschen?');"> onsubmit="return confirm('Diesen Server wirklich löschen?');">
<button type="submit" class="btn btn-outline-danger"> <button type="submit" class="btn btn-outline-danger">
<i class="bi bi-trash me-1"></i> Löschen <i class="bi bi-trash"></i> Löschen
</button> </button>
</form> </form>
</div> </div>
@@ -106,9 +64,4 @@
<canvas id="uptimeChart"></canvas> <canvas id="uptimeChart"></canvas>
</div> </div>
</div> </div>
<h6><i class="bi bi-graph-up me-1"></i>RAM Last</h6>
<div class="bg-light border rounded p-4 text-center text-muted" style="height: 250px;">
<canvas id="uptimeChart"></canvas>
</div>
</div>
</div> </div>

View File

@@ -7,8 +7,7 @@
<h1 class="h2 fw-bold mb-0"> <h1 class="h2 fw-bold mb-0">
<i class="bi bi-hdd-network me-2 text-primary"></i>Serverübersicht <i class="bi bi-hdd-network me-2 text-primary"></i>Serverübersicht
</h1> </h1>
<a asp-controller="Server" asp-action="AddServer" <a asp-controller="Server" asp-action="AddServer" class="btn btn-primary d-flex align-items-center gap-1">
class="btn btn-primary d-flex align-items-center gap-1">
<i class="bi bi-plus-circle"></i> Server hinzufügen <i class="bi bi-plus-circle"></i> Server hinzufügen
</a> </a>
</div> </div>
@@ -22,7 +21,7 @@
<script src="~/js/server_uptime.js"></script> <script src="~/js/server_uptime.js"></script>
<script> <script>
async function loadServerCards() { async function loadServerCards() {
try { try {
const response = await fetch('/Server/ServerCardsPartial'); const response = await fetch('/Server/ServerCardsPartial');
if (response.ok) { if (response.ok) {
@@ -40,4 +39,4 @@
loadServerCards(); loadServerCards();
setInterval(loadServerCards, 30000); setInterval(loadServerCards, 30000);
</script> </script>
} }