From 52c4243efc99900b274b00d3ce3c6cb5520b66dd Mon Sep 17 00:00:00 2001 From: daniel-hbn Date: Wed, 1 Oct 2025 10:15:50 +0200 Subject: [PATCH] Live Anzeige des Netzwerkstatus funktioniert --- Watcher/Controllers/HomeController.cs | 16 +++++++++-- Watcher/Program.cs | 5 +++- Watcher/Services/INetworkCheckStore.cs | 6 ++++ Watcher/Services/NetworkCheck.cs | 13 ++++----- Watcher/Services/NetworkCheckStore.cs | 6 ++++ Watcher/ViewModels/DashboardViewModel.cs | 2 ++ Watcher/Views/Home/_DashboardStats.cshtml | 34 +++++++++++++++++------ 7 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 Watcher/Services/INetworkCheckStore.cs create mode 100644 Watcher/Services/NetworkCheckStore.cs diff --git a/Watcher/Controllers/HomeController.cs b/Watcher/Controllers/HomeController.cs index 5579444..2fa4629 100644 --- a/Watcher/Controllers/HomeController.cs +++ b/Watcher/Controllers/HomeController.cs @@ -18,11 +18,16 @@ namespace Watcher.Controllers // Logging einbinden private readonly ILogger _logger; + // Daten der Backgroundchecks abrufen + private INetworkCheckStore _NetworkCheckStore; + // HomeController Constructor - public HomeController(AppDbContext context, ILogger logger) + public HomeController(AppDbContext context, ILogger logger, INetworkCheckStore NetworkCheckStore) { _context = context; _logger = logger; + _NetworkCheckStore = NetworkCheckStore; + } // Dashboard unter /home/index @@ -36,6 +41,7 @@ namespace Watcher.Controllers .Where(u => u.Username == preferredUserName) .FirstOrDefaultAsync(); + Console.WriteLine("Index" + _NetworkCheckStore.NetworkStatus); var viewModel = new DashboardViewModel { ActiveServers = await _context.Servers.CountAsync(s => s.IsOnline), @@ -53,8 +59,9 @@ namespace Watcher.Controllers Containers = await _context.Containers .OrderBy(s => s.Name) .ToListAsync(), + NetworkStatus = _NetworkCheckStore.NetworkStatus }; - //ViewBag.NetworkConnection = ReturnNetworkStatus(); + //ViewBag.NetworkConnection = _NetworkCheckStore.NetworkStatus; return View(viewModel); } @@ -67,6 +74,8 @@ namespace Watcher.Controllers var now = DateTime.UtcNow; + Console.WriteLine("DashboardStats" + _NetworkCheckStore.NetworkStatus); + var model = new DashboardViewModel { ActiveServers = await _context.Servers.CountAsync(s => s.IsOnline), @@ -82,7 +91,8 @@ namespace Watcher.Controllers .ToListAsync(), Containers = await _context.Containers .OrderBy(s => s.Name) - .ToListAsync() + .ToListAsync(), + NetworkStatus = _NetworkCheckStore.NetworkStatus }; return PartialView("_DashboardStats", model); diff --git a/Watcher/Program.cs b/Watcher/Program.cs index fd948b8..847fe08 100644 --- a/Watcher/Program.cs +++ b/Watcher/Program.cs @@ -34,6 +34,9 @@ builder.Services.AddControllersWithViews(); // HttpContentAccessor builder.Services.AddHttpContextAccessor(); +// Storage Singleton +builder.Services.AddSingleton(); + // Background Services builder.Services.AddHostedService(); @@ -218,4 +221,4 @@ app.MapControllerRoute( pattern: "{controller=Home}/{action=Index}/{id?}" ); -app.Run(); +app.Run(); \ No newline at end of file diff --git a/Watcher/Services/INetworkCheckStore.cs b/Watcher/Services/INetworkCheckStore.cs new file mode 100644 index 0000000..996246d --- /dev/null +++ b/Watcher/Services/INetworkCheckStore.cs @@ -0,0 +1,6 @@ +namespace Watcher.Services; + +public interface INetworkCheckStore +{ + String? NetworkStatus { get; set; } +} diff --git a/Watcher/Services/NetworkCheck.cs b/Watcher/Services/NetworkCheck.cs index a4baf03..6d34802 100644 --- a/Watcher/Services/NetworkCheck.cs +++ b/Watcher/Services/NetworkCheck.cs @@ -6,16 +6,13 @@ public class NetworkCheck : BackgroundService { private readonly ILogger _logger; - public static String networkCheckResult - { - get { return networkCheckResult; } - set { networkCheckResult = value; } + private INetworkCheckStore _NetworkCheckStore; - } - - public NetworkCheck(ILogger logger) + public NetworkCheck(ILogger logger, INetworkCheckStore NetworkCheckStore) { _logger = logger; + _NetworkCheckStore = NetworkCheckStore; + } protected override async Task ExecuteAsync(CancellationToken stoppingToken) @@ -44,11 +41,13 @@ public class NetworkCheck : BackgroundService PingReply reply = p.Send(host, 3000); if (reply.Status == IPStatus.Success) { + _NetworkCheckStore.NetworkStatus = "online"; _logger.LogInformation("Ping successfull. Watcher is online."); } } catch { + _NetworkCheckStore.NetworkStatus = "offline"; _logger.LogError("Ping failed. Watcher appears to have no network connection."); } diff --git a/Watcher/Services/NetworkCheckStore.cs b/Watcher/Services/NetworkCheckStore.cs new file mode 100644 index 0000000..66e73e7 --- /dev/null +++ b/Watcher/Services/NetworkCheckStore.cs @@ -0,0 +1,6 @@ +namespace Watcher.Services; + +public class NetworkCheckStore : INetworkCheckStore +{ + public String? NetworkStatus { get; set; } +} \ No newline at end of file diff --git a/Watcher/ViewModels/DashboardViewModel.cs b/Watcher/ViewModels/DashboardViewModel.cs index 624c9bd..c2cb489 100644 --- a/Watcher/ViewModels/DashboardViewModel.cs +++ b/Watcher/ViewModels/DashboardViewModel.cs @@ -14,5 +14,7 @@ namespace Watcher.ViewModels public List RecentEvents { get; set; } = new(); public List Containers { get; set; } = new(); + public String? NetworkStatus { get; set; } = "?"; + } } diff --git a/Watcher/Views/Home/_DashboardStats.cshtml b/Watcher/Views/Home/_DashboardStats.cshtml index ee6e81c..f0a8861 100644 --- a/Watcher/Views/Home/_DashboardStats.cshtml +++ b/Watcher/Views/Home/_DashboardStats.cshtml @@ -1,3 +1,4 @@ +@using Microsoft.IdentityModel.Tokens @model Watcher.ViewModels.DashboardViewModel @{ @@ -57,13 +58,28 @@
Systemstatus
-
- Netzwerk - NetworkConnection -
-
-
-
+ @if (!Model.NetworkStatus.IsNullOrEmpty()) + { + @if (Model.NetworkStatus == "online") + { +
+ Netzwerk + @Model.NetworkStatus +
+
+
+
+ } else if (Model.NetworkStatus == "offline") + { +
+ Netzwerk + @Model.NetworkStatus +
+
+
+
+ } + }
Datenbank @@ -123,10 +139,10 @@ {
  • @server.Name - + CPU: 30.45% - + RAM: 65.09%