Files
BeWoPlaner/Service/Status/BaseStatusService.cs
Rene Evertz f6fef62bdd Script-Check-Bug behoben: CheckDBScripts prüft jetzt alle registrierten Scripts, nicht nur das erste. Alle vier Check-Methoden sind auf das gleiche Muster umgestellt (Where auf Fehler filtern, Meldungen mit ; joinen), d.h. sie melden jetzt auch jeweils alle fehlenden Einträge ihrer Kategorie statt nur den ersten.
Alle Fehler sammeln: DoHealthCheckup bricht nicht mehr beim ersten Fehler ab, sondern sammelt die Meldungen aller Checkups und gibt sie zusammen in Message zurück.
Exception-Logging: Wirft ein Checkup eine Exception, wird sie jetzt vollständig per log4net geloggt (gleiches Idiom wie im WCFErrorHandler über LoggerUtils.GetLogger); nach außen geht weiterhin nur ex.Message.
Listen direkt initialisiert statt Lazy-Init — alle is null-Checks entfallen, die Add*-Methoden sind jetzt Einzeiler.
Naming auf PascalCase vereinheitlicht (AddWebConfigCheck, RegisterCheckup, CheckDBScripts, …) und ungenutzte Usings entfernt.
2026-07-13 11:39:36 +02:00

125 lines
3.0 KiB
C#

using BeWo.Data.Access;
using BeWo.ServerUtils.Core;
using BeWo.Service.Core;
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace BeWo.Service.Status
{
public class BaseStatusService
{
private static readonly log4net.ILog log = LoggerUtils.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
protected string Name { get; set; }
protected List<Func<string>> Checkups { get; } = new List<Func<string>>();
private List<WebConfigSetting> RequiredWebConfigs { get; } = new List<WebConfigSetting>();
private List<WebSecretConfigSetting> RequiredWebSecretConfigs { get; } = new List<WebSecretConfigSetting>();
private List<string> RequiredDBScripts { get; } = new List<string>();
private List<SpecialConfig> RequiredConfigs { get; } = new List<SpecialConfig>();
public BaseStatusService(string name)
{
Name = name;
RegisterCheckup(CheckWebConfig,
CheckWebSecretConfig,
CheckDBScripts,
CheckConfig);
}
protected void AddWebConfigCheck(params WebConfigSetting[] args)
{
RequiredWebConfigs.AddRange(args);
}
protected void AddWebSecretConfigCheck(params WebSecretConfigSetting[] args)
{
RequiredWebSecretConfigs.AddRange(args);
}
protected void AddDBScript(params string[] args)
{
RequiredDBScripts.AddRange(args);
}
protected void AddCustomConfig(params SpecialConfig[] args)
{
RequiredConfigs.AddRange(args);
}
protected void RegisterCheckup(params Func<string>[] args)
{
Checkups.AddRange(args);
}
public ServiceStatusDC DoHealthCheckup()
{
var errors = new List<string>();
foreach (var func in Checkups)
{
try
{
var error = func();
if (!string.IsNullOrEmpty(error))
errors.Add(error);
}
catch (Exception ex)
{
log.Error($"Health-Checkup '{Name}' fehlgeschlagen", ex);
errors.Add(ex.Message);
}
}
return new ServiceStatusDC
{
Name = Name,
IsOk = errors.Count == 0,
Message = errors.Count == 0 ? "OK" : string.Join("; ", errors)
};
}
private string CheckWebConfig()
{
var missing = RequiredWebConfigs
.Where(x => string.IsNullOrWhiteSpace(MergedConfig.GetSetting(x)))
.Select(x => $"'{x}' wurde nicht korrekt konfiguriert");
return string.Join("; ", missing);
}
private string CheckWebSecretConfig()
{
var missing = RequiredWebSecretConfigs
.Where(x => string.IsNullOrWhiteSpace(MergedConfig.GetSecretSetting(x)))
.Select(x => $"'{x}' wurde nicht korrekt konfiguriert");
return string.Join("; ", missing);
}
private string CheckDBScripts()
{
var missing = RequiredDBScripts
.Where(x => !DAOFactory.ScriptDAO.IsScriptExecuted(x))
.Select(x => $"Script '{x}' wurde nicht ausgeführt");
return string.Join("; ", missing);
}
private string CheckConfig()
{
var missing = RequiredConfigs
.Where(x => !File.Exists(ConfigReader.GetConfigPath(x)))
.Select(x => $"SpecialConfig.{x} wurde nicht korrekt konfiguriert");
return string.Join("; ", missing);
}
}
}