Files
BeWoPlaner/Service/ServiceImplementations/Enhanced/StatusServiceImp.cs
2026-07-24 13:21:52 +02:00

55 lines
1.5 KiB
C#

using BeWo.Service.ServiceContracts.Enhanced;
using BeWo.Service.Status;
using BS.Shared;
using BS.Shared.DataContracts;
using DevExpress.Xpo.Helpers;
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 is object && x.IsOk);
if (!allHealthy)
{
WebOperationContext.Current.OutgoingResponse.StatusCode =
HttpStatusCode.InternalServerError;
}
return result;
}
}
}