using Microsoft.Extensions.Diagnostics.HealthChecks; using NLog; using System.Net.NetworkInformation; using WebDoorCreator.Data; namespace WebDoorCreator.API.Health { public class Checks { #region Public Methods public static async Task ConfigCount(IConfiguration _config) { string description = "Try check Config table"; var healthCheckData = new Dictionary(); using (WDCDataContext localDbCtx = new WDCDataContext(_config)) { var dbCount = localDbCtx .DbSetConfig .Count(); if (dbCount > 0) { description = $"Check Config table, found {dbCount} records"; healthCheckData.Add("Count", dbCount); return HealthCheckResult.Healthy(description, healthCheckData); } } await Task.Delay(1); return HealthCheckResult.Unhealthy(description + $" NO RECORD found", null, healthCheckData); } public static async Task DoorsCount(IConfiguration _config) { string description = "Try check DOOR table"; var healthCheckData = new Dictionary(); using (WDCDataContext localDbCtx = new WDCDataContext(_config)) { var dbCount = localDbCtx .DbSetDoor .Count(); if (dbCount > 0) { description = $"Check DOOR table, found {dbCount} records"; healthCheckData.Add("Count", dbCount); return HealthCheckResult.Healthy(description, healthCheckData); } } await Task.Delay(1); return HealthCheckResult.Unhealthy(description + $" NO RECORD found", null, healthCheckData); } public static async Task OrdersCount(IConfiguration _config) { string description = "Try check ORDER table"; var healthCheckData = new Dictionary(); using (WDCDataContext localDbCtx = new WDCDataContext(_config)) { var dbCount = localDbCtx .DbSetOrders .Count(); if (dbCount > 0) { description = $"Check ORDER table, found {dbCount} records"; healthCheckData.Add("Count", dbCount); return HealthCheckResult.Healthy(description, healthCheckData); } } await Task.Delay(1); return HealthCheckResult.Unhealthy(description + $" NO RECORD found", null, healthCheckData); } public static async Task PingCheck(string hostName) { var description = $"Ping to {hostName}"; var healthCheckData = new Dictionary(); using (var thePing = new Ping()) { var pingResult = await thePing.SendPingAsync(hostName); 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 } }