using Pilz.Extensions; using Pilz.Extensions.Reflection; using Pilz.Net.Api.Messages; using System.Diagnostics; using System.Reflection; namespace Pilz.Net.Api.Server; public class ServerStatusHandler(IApiServer server) : IApiHandlerInitializer { public string Route { get; set; } = "/status"; public virtual void Initialize() { server.RegisterHandler(GetType().GetMethod(nameof(GetStatus))!.CreateDelegate(this), new(Route, "GET"), Debugger.IsAttached); } public virtual ApiResult GetStatus(ApiRequestInfo req) { var msg = BuildMessage(req); if (server is ApiServer apiServer && msg is ServerStatusMessage message) { message.AppVersion ??= Assembly.GetEntryAssembly()?.GetAppVersion(); message.ApiVersion = apiServer.ApiVersion; message.EndpointsCount = apiServer.HandlersCount; message.DataManagersCount = apiServer.ManagersCount; message.RestartAttempts = apiServer.RestartAttempts; } return ApiResult.Ok(msg); } protected virtual ApiMessage? BuildMessage(ApiRequestInfo req) { return new ServerStatusMessage(); } }