Шаблон включает:
- Настройка swagger
- Пакет для трассировки http-запросов Byndyusoft.AspNetCore.Instrumentation.Tracing
- Пакет для логирования Byndyusoft.Logging
- Пакет для работы с БД Byndyusoft.Data.Relational
- Пакет для маскирования чувствительных данных в логах и в трассировке Byndyusoft.MaskedSerialization
- Хэлчеки через метод /healthz
- Подключены OpenTelemetry Tracing & Metrics. Добавлены основные инструменты для метрик. Добавлен пример для метрик приложения.
Проекты:
- Domain - бизнес-логика приложения
- DataAccess - слой доступа к данным
- Migrator - мигратор базы данных на основе https://github.com/fluentmigrator/fluentmigrator
- Api - веб-апи приложения
- Api.Client - клиент для веб-апи, расширение для подключения клиента в потребителе
- Api.Contracts - контракты для веб-апи и клиента
- IntegrationTests - интеграционные тесты на веб-апи
- UnitTests - юнит-тесты
dotnet new --install Byndyusoft.DotNet.Web.ProjectTemplate
В списке должен появиться шаблон с коротким именем bsapi.
dotnet new bsapi -o {Название директории}
Примечание: Название сервиса будет совпадать с названием директории. С полным списком опций, вы можете ознакомиться тут.
Проект готов к использованию!
dotnet pack
Вместо создания пакета его можно скачать из nuget.org.
dotnet new --install .\Byndyusoft.Template.1.3.6.nupkg
Примечание: Версия может отличаться.
dotnet new bsapi -o {Название директории}
Примечание: Название сервиса будет совпадать с названием директории. С полным списком опций, вы можете ознакомиться тут.
Проект готов к использованию!
В коде был добавлен пример с метриками, которые определяются в классе ApiTemplateMetrics.cs.
В этом классе добавлены поля (терминология взята из OpenTelemetry Metrics API):
- Name - наименование meter (измеритель).
- DurationName - наименование instrument (инструмента).
- DurationBuckets - границы бакетов, используются в настройке отображения метрик в классе MeterProviderBuilderExtensions.cs.
В проекте добавлены список запросов, которые не будут попадать в трассироку. Они описаны в файле TracerProviderBuilderExtensions.cs:
var ignoredSegments = new[] { "/swagger", "/favicon", "/healthz", "/metrics" };
Если нужно игнорировать какие-то дополнительные запросы, то их можно добавить в список в этом классе.
Для интеграции нужно использовать класс JaegerPropagator.
Пример использования Propagator для RabbitMq.