Background Service erstellt

This commit is contained in:
2025-10-02 17:12:29 +02:00
parent 8e362f7271
commit 7e75f3e49e
8 changed files with 99 additions and 26 deletions

View File

@@ -0,0 +1,8 @@
namespace Watcher.Services;
public class DashboardStore : IDashboardStore
{
public String? NetworkStatus { get; set; }
public String? DatabaseStatus { get; set; }
}

View File

@@ -0,0 +1,70 @@
using Microsoft.Data.Sqlite;
namespace Watcher.Services;
public class DatabaseCheck : BackgroundService
{
private readonly ILogger<DatabaseCheck> _logger;
private IDashboardStore _dashboardStore;
public DatabaseCheck(ILogger<DatabaseCheck> logger, IDashboardStore dashboardStore)
{
_logger = logger;
_dashboardStore = dashboardStore;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var timer = new PeriodicTimer(TimeSpan.FromSeconds(30));
while (await timer.WaitForNextTickAsync(stoppingToken))
{
// Hintergrundprozess abwarten
// await checkDatabaseConnection();
await checkDatabaseIntegrity();
// 5 Sekdunden Offset
await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
}
}
public Task checkDatabaseConnection()
{
return Task.CompletedTask;
}
public Task checkDatabaseIntegrity(String sqliteConnectionString)
{
using var conn = new SqliteConnection(sqliteConnectionString);
_logger.LogInformation("Sqlite Integrity-Check started...");
try
{
conn.Open();
using var command = conn.CreateCommand();
command.CommandText = """
SELECT integrity_check FROM pragma_integrity_check;
""";
using var reader = command.ExecuteReader();
while (reader.Read())
{
string status = reader.GetString(0);
_dashboardStore.DatabaseStatus = status;
_logger.LogInformation("Sqlite DatabaseIntegrity: ${status}", status);
}
conn.Close();
}
catch (SqliteException e)
{
conn.Close();
_logger.LogError(e.Message);
}
_logger.LogInformation("Database Integrity-Check finished.");
return Task.CompletedTask;
}
}

View File

@@ -0,0 +1,7 @@
namespace Watcher.Services;
public interface IDashboardStore
{
String? NetworkStatus { get; set; }
String? DatabaseStatus { get; set; }
}

View File

@@ -1,6 +0,0 @@
namespace Watcher.Services;
public interface INetworkCheckStore
{
String? NetworkStatus { get; set; }
}

View File

@@ -1,4 +1,3 @@
using System.Composition;
using System.Net.NetworkInformation;
namespace Watcher.Services;
@@ -6,12 +5,12 @@ public class NetworkCheck : BackgroundService
{
private readonly ILogger<NetworkCheck> _logger;
private INetworkCheckStore _NetworkCheckStore;
private IDashboardStore _DashboardStore;
public NetworkCheck(ILogger<NetworkCheck> logger, INetworkCheckStore NetworkCheckStore)
public NetworkCheck(ILogger<NetworkCheck> logger, IDashboardStore DashboardStore)
{
_logger = logger;
_NetworkCheckStore = NetworkCheckStore;
_DashboardStore = DashboardStore;
}
@@ -41,13 +40,13 @@ public class NetworkCheck : BackgroundService
PingReply reply = p.Send(host, 3000);
if (reply.Status == IPStatus.Success)
{
_NetworkCheckStore.NetworkStatus = "online";
_DashboardStore.NetworkStatus = "online";
_logger.LogInformation("Ping successfull. Watcher is online.");
}
}
catch
{
_NetworkCheckStore.NetworkStatus = "offline";
_DashboardStore.NetworkStatus = "offline";
_logger.LogError("Ping failed. Watcher appears to have no network connection.");
}

View File

@@ -1,6 +0,0 @@
namespace Watcher.Services;
public class NetworkCheckStore : INetworkCheckStore
{
public String? NetworkStatus { get; set; }
}