Solo.Beacon 1.0.0-pre-doc4847-07

Solo.Beacon

Solo.Beacon — это переиспользуемый ASP.NET Core пакет для сервисов ft-soft. Он предоставляет:

  • endpoint /beacon/discovery, который публикует реальные пути health и stats для сервиса
  • endpoint /beacon/health, который отвечает 200 OK на любой HTTP-метод
  • endpoint /beacon/stats для состояния текущего сервиса
  • возможность включать или отключать логирование запросов к /discovery, /health и /stats одним общим флагом
  • опциональный фоновый опрос зависимых сервисов с обработкой результатов через delegate
  • стартовую health-проверку зависимостей сразу после запуска приложения

Использование

using Solo.Beacon;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddBeacon();

var app = builder.Build();

app.MapBeacon()
    .MapHealth();

Если нужен /stats, можно передать async-handler в MapStats(...). В нем доступны HttpContext и CancellationToken, так что состав статистики можно настраивать в зависимости от пользователя, заголовков и других деталей запроса.

app.MapBeacon()
    .MapHealth()
    .MapStats(async (httpContext, cancellationToken) =>
    {
        var statsProvider = httpContext.RequestServices.GetRequiredService<StatsProvider>();
        var stats = await statsProvider.GetStatsAsync();
        var userName = httpContext.User.Identity?.Name;

        return TypedResults.Ok(new
        {
            stats,
            userName,
        });
    });

По умолчанию endpoint вернет только timestamp генерации ответа текущего сервиса.

Если нужно переопределить настройки пакета кодом, используйте перегрузку с Action<BeaconOptions>:

builder.Services.AddBeacon(options =>
{
    options.LoggingEnabled = true;
    options.HealthUrl = "/health";
    options.StatsUrl = "/stats";
});

Если нужно обработать результаты мониторинга зависимостей, настройте handler через BeaconBuilder:

builder.Services
    .AddBeacon()
    .AddMonitoringHandler(
        static async (serviceProvider, responses, cancellationToken) =>
        {
            var cache = serviceProvider.GetRequiredService<IMonitoringCache>();
            await cache.StoreAsync(responses, cancellationToken);
        });

Конфигурация

{
  "Beacon": {
    "LoggingEnabled": false,
    "HealthUrl": "/beacon/health",
    "StatsUrl": "/beacon/stats",
    "Monitoring": {
      "Enabled": true,
      "ProbeInterval": "00:00:30",
      "RequestTimeout": "00:00:05",
      "Services": [
        "https://solo-butler.ru",
        "https://solo.ru/solo",
        "https://solo.ru/org"
      ]
    }
  }
}

Если мониторинг включен, пакет сразу после старта приложения делает первый проход по Services: запрашивает /beacon/discovery, находит опубликованный health endpoint и проверяет его доступность. Успешный стартовый проход и ошибки пишутся в лог только при LoggingEnabled = true.

AddBeacon() сам регистрирует monitoring-инфраструктуру. Публичный вход для регистрации пакета ограничен двумя вариантами: базовый вызов и кодовая настройка через Action<BeaconOptions>. Кастомный BeaconMonitoringHandler задается через UseMonitoringHandler(...).

Примечания

  • /stats всегда закрыт авторизацией и использует стандартное поведение ASP.NET Core, настроенное в хост-приложении.
  • Чтобы в HttpContext.User были данные пользователя, хост-приложение должно само настроить аутентификацию обычным для себя способом.
  • /beacon/discovery всегда захардкожен и не настраивается через конфиг.
  • Пути endpoint-ов и общий флаг логгирования можно полностью задать через SoloBeacon в конфиге, без обязательных lambda-настроек в Program.cs.
  • Если health endpoint зависимого сервиса возвращает не JSON, Solo.Beacon сформирует служебный payload со статусом проверки.
  • 404 Not Found на /beacon/discovery трактуется как отсутствие поддержки Solo.Beacon у зависимого сервиса и логируется в общем формате сообщений мониторинга.

No packages depend on Solo.Beacon.

.NET 8.0

  • No dependencies.

Version Downloads Last updated
1.0.0 2 05/28/2026
1.0.0-pre-doc4847-07 2 05/19/2026
1.0.0-pre-doc4847-06 2 05/19/2026
1.0.0-pre-doc4847-05 2 05/19/2026
1.0.0-pre-doc4847-04 2 05/19/2026
1.0.0-pre-doc4847-03 2 05/18/2026
1.0.0-pre-doc4847-02 2 05/18/2026
1.0.0-pre-doc4847-01 2 05/18/2026