Files
magman/MagMan.UI/Health/Checks.cs
T
2024-01-11 17:26:49 +01:00

130 lines
5.3 KiB
C#

using MagMan.Data.Tenant.DbModels;
using MagMan.Data;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using NLog;
using Org.BouncyCastle.Pqc.Crypto.Lms;
using System.Net.NetworkInformation;
using MagMan.Data.Admin;
using MagMan.Data.Admin.DbModels;
using Microsoft.EntityFrameworkCore;
using MagMan.Data.Tenant;
namespace MagMan.UI.Health
{
public class Checks
{
#region Private Fields
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
#region Public Methods
public static async Task<HealthCheckResult> DbIdentity(string dbName)
{
using (var appDb = new IdentityContext())
{
string description = "Try check Table IdentityUsers";
List<MagMan.Data.Admin.DbModels.TableCount> recordList = new List<MagMan.Data.Admin.DbModels.TableCount>();
var healthCheckData = new Dictionary<string, object>();
try
{
string sqlQuery = $"SELECT 'AspNetUsers' AS TableName, COUNT(*) AS Count FROM information_schema.tables WHERE table_schema = '{dbName}' AND table_name = 'AspNetUsers' LIMIT 1;";
var table = await Task.FromResult(appDb.DbSetCounts.FromSqlRaw(sqlQuery).ToList());
// provo a controllare se ho tab utenti
if (table != null && table.Count > 0)
{
// controllo valore
if (table[0].Count > 0)
{
description = $"Check IdentityUsers table, found!";
return HealthCheckResult.Healthy(description, healthCheckData);
}
}
}
catch (Exception exc)
{
Log.Error(exc, "Errore in esecuzione DbIdentity");
}
return HealthCheckResult.Degraded(description + $" {dbName}", null, healthCheckData);
}
}
public static async Task<HealthCheckResult> DbPlantTable(string dbName)
{
using (var appDb = new MagManContext())
{
string description = "Try check Table PlantLog";
var healthCheckData = new Dictionary<string, object>();
#if false
List<PlantDetailModel> recordList = new List<PlantDetailModel>();
try
{
// provo a controllare se ho tab utenti
recordList = await Task.FromResult(appDb.DbSetPlant.ToList()).ConfigureAwait(false);
if (recordList.Count > 0)
{
description = $"Check PlantDetail table, found {recordList.Count} records";
return HealthCheckResult.Healthy(description, healthCheckData);
}
}
catch (Exception exc)
{
Log.Error(exc, "Errore in esecuzione PlantDetail Table");
}
#endif
return HealthCheckResult.Degraded(description + $" {dbName}", null, healthCheckData);
}
}
public static async Task<HealthCheckResult> DbUserRoot(string dbName)
{
using (var adminDb = new ServerAdminContext())
{
string description = "Try check MySql User table";
List<MagMan.Data.Admin.DbModels.UserPriv> userList = new List<MagMan.Data.Admin.DbModels.UserPriv>();
var healthCheckData = new Dictionary<string, object>();
try
{
// provo a controllare se ho tab utenti
userList = await Task.FromResult(adminDb.UserList.ToList()).ConfigureAwait(false);
if (userList.Count > 0)
{
description = $"Check MySql User table, found {userList.Count} records";
return HealthCheckResult.Healthy(description, healthCheckData);
}
}
catch (Exception exc)
{
Log.Error(exc, "Errore in esecuzione DbUserRoot");
}
return HealthCheckResult.Unhealthy(description + $" {dbName}", null, healthCheckData);
}
}
public static async Task<HealthCheckResult> PingCheck(string hostName)
{
using (var thePing = new Ping())
{
var pingResult = await thePing.SendPingAsync(hostName);
var description = $"Ping to {hostName}";
var healthCheckData = new Dictionary<string, object>();
healthCheckData.Add("RoundTripMS", pingResult.RoundtripTime);
healthCheckData.Add("ActualIPAddress", pingResult.Address.ToString());
if (pingResult.Status == IPStatus.Success)
{
description += $" - {pingResult.RoundtripTime}ms";
return HealthCheckResult.Healthy(description, healthCheckData);
}
return HealthCheckResult.Unhealthy(description + $" {hostName}", null, healthCheckData);
}
}
#endregion Public Methods
}
}