upsi
This commit is contained in:
@@ -25,7 +25,7 @@ public class Server
|
|||||||
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
|
||||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||||
@@ -35,5 +35,5 @@ public class Server
|
|||||||
public DateTime LastSeen { get; set; }
|
public DateTime LastSeen { get; set; }
|
||||||
|
|
||||||
public Boolean IsVerified { get; set; } = false;
|
public Boolean IsVerified { get; set; } = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -28,6 +28,7 @@ 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
|
||||||
@@ -38,4 +39,16 @@ 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";
|
||||||
}
|
}
|
@@ -4,54 +4,93 @@
|
|||||||
<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">
|
<div class="col-12 col-sm-6 col-lg-4">
|
||||||
<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-pc-display me-2 text-muted"></i>(#@s.Id) @s.Name
|
<i class="bi bi-server me-2 text-primary"></i>(#@s.Id) @s.Name
|
||||||
</h5>
|
</h5>
|
||||||
<span class="badge
|
<span class="badge @(s.IsOnline ? "bg-success" : "bg-danger")">
|
||||||
@(s.IsOnline ? "bg-success text-light" : "bg-danger text-light")">
|
|
||||||
<i class="bi @(s.IsOnline ? "bi-check-circle" : "bi-x-circle") me-1"></i>
|
<i class="bi @(s.IsOnline ? "bi-check-circle" : "bi-x-circle") me-1"></i>
|
||||||
@(s.IsOnline ? "Online" : "Offline")
|
@(s.IsOnline ? "Online" : "Offline")
|
||||||
</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-6 text-muted small">
|
||||||
<div><i class="bi bi-globe me-1"></i><strong>IP:</strong> @s.IPAddress</div>
|
<!-- Netzwerk -->
|
||||||
<div><i class="bi bi-pc-display me-1"></i><strong>Typ:</strong> @s.Type</div>
|
<div class="mb-2">
|
||||||
<div><i class="bi bi-calendar-check me-1"></i><strong>Erstellt:</strong> @s.CreatedAt.ToLocalTime().ToString("dd.MM.yyyy HH:mm")</div>
|
<i class="bi bi-globe me-1"></i>
|
||||||
<div><i class="bi bi-clock me-1"></i><strong>Last-Seen:</strong> @s.LastSeen.ToLocalTime().ToString("dd.MM.yyyy HH:mm")</div>
|
<strong>IP:</strong> @s.IPAddress
|
||||||
<div><i class="bi bi-cpu me-1"></i><strong>CPU:</strong> @(s.CpuType ?? "not found") </div>
|
</div>
|
||||||
<div><i class="bi bi-cpu me-1"></i><strong>CPU-Kerne: </strong> @s.CpuCores </div>
|
|
||||||
<div><i class="bi bi-gpu-card me-1"></i><strong>GPU:</strong> @(s.GpuType ?? "not found") </div>
|
<!-- Typ -->
|
||||||
<div><i class="bi bi-memory me-1"></i><strong>RAM:</strong> @(s.RamSize) </div>
|
<div class="mb-2">
|
||||||
<div><i class="bi bi-hdd me-1"></i><strong>Disk Space:</strong> ... </div>
|
<i class="bi bi-tag me-1"></i>
|
||||||
|
<strong>Typ:</strong> @s.Type
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Zeiten -->
|
||||||
|
<div class="mb-2">
|
||||||
|
<i class="bi bi-calendar me-1"></i>
|
||||||
|
<strong>Erstellt:</strong> @s.CreatedAt.ToLocalTime().ToString("dd.MM.yyyy")
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-2">
|
||||||
|
<i class="bi bi-clock-history me-1"></i>
|
||||||
|
<strong>Last Seen:</strong> @s.LastSeen.ToLocalTime().ToString("HH:mm")
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6 text-muted small">
|
||||||
|
<!-- Hardware -->
|
||||||
|
<div class="mb-2">
|
||||||
|
<i class="bi bi-cpu me-1"></i>
|
||||||
|
<strong>CPU:</strong> @(!string.IsNullOrEmpty(s.CpuType) ? s.CpuType : "-")
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-2">
|
||||||
|
<i class="bi bi-cpu me-1"></i>
|
||||||
|
<strong>Kerne:</strong> @(s.CpuCores > 0 ? s.CpuCores.ToString() : "-")
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-2">
|
||||||
|
<i class="bi bi-gpu-card me-1"></i>
|
||||||
|
<strong>GPU:</strong> @(!string.IsNullOrEmpty(s.GpuType) ? s.GpuType : "-")
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-2">
|
||||||
|
<i class="bi bi-memory me-1"></i>
|
||||||
|
<strong>RAM:</strong> @(s.RamSize > 0 ? $"{s.RamSize} GB" : "-")
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-2">
|
||||||
|
<i class="bi bi-hdd me-1"></i>
|
||||||
|
<strong>Disk:</strong> @(!string.IsNullOrEmpty(s.DiskSpace) ? s.DiskSpace : "-")
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex flex-wrap gap-2">
|
<!-- Action Buttons -->
|
||||||
|
<div class="d-flex flex-wrap gap-2 mt-auto">
|
||||||
<a asp-action="EditServer" asp-route-id="@s.Id" class="btn btn-outline-primary">
|
<a asp-action="Details" asp-route-id="@s.Id" class="btn btn-sm btn-outline-primary flex-grow-1">
|
||||||
<i class="bi bi-pencil-square me-1"></i> Bearbeiten
|
<i class="bi bi-info-circle me-1"></i> Details
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a asp-asp-controller="Server" asp-action="Details" asp-route-id="@s.Id" class="btn btn-outline-primary">
|
<a asp-action="EditServer" asp-route-id="@s.Id"
|
||||||
<i class="bi bi-bar-chart-fill me-1"></i> Metrics
|
class="btn btn-sm btn-outline-secondary flex-grow-1">
|
||||||
|
<i class="bi bi-pencil me-1"></i> Bearbeiten
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a asp-asp-controller="Container" asp-action="Overview" asp-route-id="@s.Id" class="btn btn-outline-primary">
|
<form asp-action="Delete" asp-route-id="@s.Id" method="post"
|
||||||
<i class="bi bi-box-fill me-1"></i> Container
|
onsubmit="return confirm('Server @s.Name wirklich löschen?');" class="flex-grow-1">
|
||||||
</a>
|
<button type="submit" class="btn btn-sm btn-outline-danger w-100">
|
||||||
|
|
||||||
<form asp-action="Delete" asp-route-id="@s.Id" method="post" onsubmit="return confirm('Diesen Server wirklich löschen?');" class="m-0">
|
|
||||||
<button type="submit" class="btn btn-outline-danger">
|
|
||||||
<i class="bi bi-trash me-1"></i> Löschen
|
<i class="bi bi-trash me-1"></i> Löschen
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -59,3 +98,19 @@
|
|||||||
}
|
}
|
||||||
</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>
|
@@ -2,42 +2,85 @@
|
|||||||
<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-hdd-network me-2 text-primary"></i>Serverdetails: @Model.Name
|
<i class="bi bi-server me-2 text-primary"></i>Serverdetails: @Model.Name
|
||||||
</h5>
|
</h5>
|
||||||
<span class="badge @(Model.IsOnline ? "bg-success" : "bg-danger")">
|
<span class="badge @Model.StatusBadgeClass">
|
||||||
<i class="bi @(Model.IsOnline ? "bi-check-circle" : "bi-x-circle") me-1"></i>
|
<i class="bi @Model.StatusIcon me-1"></i>
|
||||||
@(Model.IsOnline ? "Online" : "Offline")
|
@Model.StatusText
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<dl class="row mb-0">
|
<div class="row">
|
||||||
<dt class="col-sm-3">ID</dt>
|
<!-- System Information -->
|
||||||
<dd class="col-sm-9">@Model.Id</dd>
|
<div class="col-md-6">
|
||||||
|
<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-3">IP-Adresse</dt>
|
<dt class="col-sm-4">IP-Adresse</dt>
|
||||||
<dd class="col-sm-9">@Model.IPAddress</dd>
|
<dd class="col-sm-8">@Model.IPAddress</dd>
|
||||||
|
|
||||||
<dt class="col-sm-3">Typ</dt>
|
<dt class="col-sm-4">Typ</dt>
|
||||||
<dd class="col-sm-9">@Model.Type</dd>
|
<dd class="col-sm-8">@Model.Type</dd>
|
||||||
|
|
||||||
<dt class="col-sm-3">Erstellt am</dt>
|
<dt class="col-sm-4">Erstellt am</dt>
|
||||||
<dd class="col-sm-9">@Model.CreatedAt.ToLocalTime().ToString("dd.MM.yyyy HH:mm")</dd>
|
<dd class="col-sm-8">@Model.DisplayCreatedAt</dd>
|
||||||
|
|
||||||
<dt class="col-sm-3">Zuletzt gesehen</dt>
|
<dt class="col-sm-4">Zuletzt online</dt>
|
||||||
<dd class="col-sm-9">@Model.LastSeen.ToLocalTime().ToString("dd.MM.yyyy HH:mm")</dd>
|
<dd class="col-sm-8">@Model.DisplayLastSeen</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
|
<i class="bi bi-download me-1"></i> Linux Agent
|
||||||
</a>
|
</a>
|
||||||
<a asp-action="EditServer" asp-route-id="@Model.Id" class="btn btn-outline-primary me-2">
|
|
||||||
<i class="bi bi-pencil"></i> Bearbeiten
|
<a asp-action="EditServer" asp-route-id="@Model.Id" class="btn btn-outline-primary">
|
||||||
|
<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"
|
|
||||||
onsubmit="return confirm('Diesen Server wirklich löschen?');">
|
<form asp-action="Delete" asp-route-id="@Model.Id" method="post"
|
||||||
|
onsubmit="return confirm('Diesen Server wirklich löschen?');" class="ms-auto">
|
||||||
<button type="submit" class="btn btn-outline-danger">
|
<button type="submit" class="btn btn-outline-danger">
|
||||||
<i class="bi bi-trash"></i> Löschen
|
<i class="bi bi-trash me-1"></i> Löschen
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@@ -59,9 +102,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-4"></div>
|
<div class="mt-4"></div>
|
||||||
<h6><i class="bi bi-graph-up me-1"></i>RAM Last</h6>
|
<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;">
|
<div class="bg-light border rounded p-4 text-center text-muted" style="height: 250px;">
|
||||||
<canvas id="uptimeChart"></canvas>
|
<canvas id="uptimeChart"></canvas>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
Reference in New Issue
Block a user