diff --git a/Watcher/Controllers/HomeController.cs b/Watcher/Controllers/HomeController.cs index 90bc0af..2010961 100644 --- a/Watcher/Controllers/HomeController.cs +++ b/Watcher/Controllers/HomeController.cs @@ -38,5 +38,26 @@ namespace Watcher.Controllers return View(viewModel); } + + public IActionResult DashboardStats() + { + Console.WriteLine("Dashboard aktualisiert"); + var servers = _context.Servers.ToList(); + var containers = _context.Containers.ToList(); + + var now = DateTime.UtcNow; + + var model = new DashboardViewModel + { + ActiveServers = servers.Count(s => (now - s.LastSeen).TotalSeconds <= 120), + OfflineServers = servers.Count(s => (now - s.LastSeen).TotalSeconds > 120), + //RunningContainers = containers.Count(c => (now - c.LastSeen).TotalSeconds <= 120), + //FailedContainers = containers.Count(c => (now - c.LastSeen).TotalSeconds > 120), + LastLogin = DateTime.Now // Oder was auch immer hier richtig ist + }; + + return PartialView("_DashboardStats", model); + } + } } diff --git a/Watcher/Controllers/ServerController.cs b/Watcher/Controllers/ServerController.cs index e4d89a3..c6f4859 100644 --- a/Watcher/Controllers/ServerController.cs +++ b/Watcher/Controllers/ServerController.cs @@ -1,3 +1,4 @@ +using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; @@ -48,7 +49,7 @@ public class ServerController : Controller _context.Servers.Add(server); await _context.SaveChangesAsync(); - return RedirectToAction("Overview"); + return Redirect("Server/Overview"); } [HttpPost] @@ -103,4 +104,18 @@ public class ServerController : Controller return View(vm); } + public async Task ServerCardsPartial() + { + var servers = _context.Servers.ToList(); + + foreach (var server in servers) + { + server.IsOnline = (DateTime.UtcNow - server.LastSeen).TotalSeconds <= 120; + await _context.SaveChangesAsync(); + } + + return PartialView("_ServerCard", servers); // korrekt + } + + } diff --git a/Watcher/Views/Home/Index.cshtml b/Watcher/Views/Home/Index.cshtml index 2b8f1e6..8bd1f6b 100644 --- a/Watcher/Views/Home/Index.cshtml +++ b/Watcher/Views/Home/Index.cshtml @@ -5,25 +5,12 @@

Dashboard

-
-
-
-

Server

-

Online: @Model.ActiveServers

-

Offline: @Model.OfflineServers

- Zu den Servern -
-
+
+ @await Html.PartialAsync("_DashboardStats", Model) +
-
-
-

Container

-

Laufend: @Model.RunningContainers

-

Fehlerhaft: @Model.FailedContainers

- Zu den Containern -
-
+

Uptime letzte 24h

@@ -42,3 +29,25 @@
+ +@section Scripts { + +} diff --git a/Watcher/Views/Home/_DashboardStats.cshtml b/Watcher/Views/Home/_DashboardStats.cshtml new file mode 100644 index 0000000..a749114 --- /dev/null +++ b/Watcher/Views/Home/_DashboardStats.cshtml @@ -0,0 +1,17 @@ +@model Watcher.ViewModels.DashboardViewModel + +
+
+

Server

+

🟢 Online: @Model.ActiveServers

+

🔴 Offline: @Model.OfflineServers

+ → Zu den Servern +
+ +
+

Container

+

🟢 Laufend: @Model.RunningContainers

+

🔴 Fehlerhaft: @Model.FailedContainers

+ → Zu den Containern +
+
diff --git a/Watcher/Views/Server/_ServerCard.cshtml b/Watcher/Views/Server/_ServerCard.cshtml new file mode 100644 index 0000000..70976c1 --- /dev/null +++ b/Watcher/Views/Server/_ServerCard.cshtml @@ -0,0 +1,51 @@ +@model IEnumerable + + +
+ @foreach (var s in Model) + { +
+
+

+ (#@s.Id) @s.Name +

+ + + @(s.IsOnline ? "Online" : "Offline") + +
+ +
+ +
+
IP: @s.IPAddress
+
Typ: @s.Type
+
Erstellt: + @s.CreatedAt.ToLocalTime().ToString("dd.MM.yyyy HH:mm")
+
Last-Seen: + @s.LastSeen.ToLocalTime().ToString("dd.MM.yyyy HH:mm")
+
+ + +
+ + +
+
+ +
+ + Bearbeiten + + +
+ +
+
+
+ } +
diff --git a/Watcher/Views/Server/overview.cshtml b/Watcher/Views/Server/overview.cshtml index 7d7d064..ffe8ae0 100644 --- a/Watcher/Views/Server/overview.cshtml +++ b/Watcher/Views/Server/overview.cshtml @@ -13,124 +13,28 @@
-
- @foreach (var s in Model.Servers) - { -
-
-

- (#@s.Id) @s.Name -

- - - @(s.IsOnline ? "Online" : "Offline") - -
- -
- -
-
IP: @s.IPAddress
-
Typ: @s.Type
-
Erstellt: - @s.CreatedAt.ToLocalTime().ToString("dd.MM.yyyy HH:mm")
-
Last-Seen: - @s.LastSeen.ToLocalTime().ToString("dd.MM.yyyy HH:mm")
-
- - -
- - -
-
- -
- - Bearbeiten - - -
- -
-
-
- } +
+ @await Html.PartialAsync("_ServerCard", Model.Servers)
- - @section Scripts { - -} \ No newline at end of file + + // Initial laden und dann alle 30 Sekunden + loadServerCards(); + setInterval(loadServerCards, 30000); + +}