using BeWo.Service.ServiceContracts.Enhanced; using BeWo.Service.Status; using BS.Shared; 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() }; // Datenbankverbindung prüfen result.DatabaseOk = new DatenbankStatusService().DoHealthCheckup(); // Einzelne Subsysteme prüfen var statusServices = new List { 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; } } }