Files
BeWoPlaner/Service/ServiceImplementations/Enhanced/StatusServiceImp.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

55 lines
1.4 KiB
C#

using BeWo.Service.ServiceContracts.Enhanced;
using BeWo.Service.Status;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Reflection;
using System.ServiceModel;
using System.ServiceModel.Web;
namespace BeWo.Service.ServiceImplementations.Enhanced
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,
ConcurrencyMode = ConcurrencyMode.Single)]
public class StatusServiceImp : IStatusService
{
public ServerStatusDC GetStatus()
{
var result = new ServerStatusDC
{
ServerTime = DateTime.Now.ToString("o"),
AssemblyVersion = Assembly.GetExecutingAssembly()
.GetName().Version?.ToString() ?? "unbekannt",
ServerVersion = BeWoAppInfo.BeWoAppVersion.ToString(),
Services = new List<ServiceStatusDC>()
};
// Datenbankverbindung prüfen
result.DatabaseOk = new DatenbankStatusService().DoHealthCheckup();
// Einzelne Subsysteme prüfen
var statusServices = new List<BaseStatusService>
{
new GeneralStatusService(),
new AiStatusService()
};
foreach (var service in statusServices)
result.Services.Add(service.DoHealthCheckup());
var allHealthy = result.DatabaseOk.IsOk && result.Services.All(x => x.IsOk);
if (!allHealthy)
{
WebOperationContext.Current.OutgoingResponse.StatusCode =
HttpStatusCode.InternalServerError;
}
return result;
}
}
}