Каков в настоящее время рекомендуемый способ отслеживания MediatR с использованием Application Insights в базовом приложении ASP.NET?
Наша цель - развернуть отдельные конвейеры в приложении из запроса, посредника, вызова в ответ.
Способ 1 : Wrap Mediator в действии
[HttpGet]
[Route("", Name = MachinesRoutes.Names.GetMachines)]
public async Task<IActionResult> GetMachines()
{
MachinesProjection p;
using (IOperationHolder<RequestTelemetry> operation = _telemetryClient.StartOperation<RequestTelemetry>(nameof(GetMachinesCommand)))
{
p = await _mediator.Send(new GetMachinesCommand());
}
// ....
}
Путь 2: собственный диспетчер
public class MediatorDispatcher : IEventDispatcher
{
private readonly IMediator _mediator;
private readonly TelemetryClient _telemetryClient;
public MediatorDispatcher(IMediator mediator, TelemetryClient telemetryClient )
{
_mediator = mediator;
_telemetryClient = telemetryClient;
}
public async Task<TResponse> Send<TResponse>(IRequest<TResponse> command, CancellationToken cancellationToken = default)
{
using IOperationHolder<RequestTelemetry> operation = _telemetryClient.StartOperation<RequestTelemetry>(command.GetType().FullName);
return await _mediator.Send(command, cancellationToken).ConfigureAwait(false);
}
Путь 3 ...?
В конце мы хотим иметь способ распознавать запросы, которые занимают необычно много времени.
Должна также быть возможность распознать причину длительности запроса, то есть развернуть операцию.
Спасибо.