mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-05-02 20:42:51 +08:00

* failing test * failing test but needs real butterfly server running..need to fix that...also worked out ive broken tracing...yey * brought in butterfly source code so i can work out how to write acceptance tests for this... * fixed the bug but still need to fix tracing * tracing working again across services but need to make tracing hook into new Ocelot middleware as it still uses asp.net middleware * removed butterfly libs brought in for testing
60 lines
2.0 KiB
C#
60 lines
2.0 KiB
C#
using System;
|
|
using System.Net.Http;
|
|
using Ocelot.Configuration;
|
|
using Ocelot.Logging;
|
|
using Ocelot.Requester.QoS;
|
|
using Ocelot.Responses;
|
|
|
|
namespace Ocelot.Requester
|
|
{
|
|
public class DelegatingHandlerHandlerProviderFactory : IDelegatingHandlerHandlerProviderFactory
|
|
{
|
|
private readonly ITracingHandlerFactory _factory;
|
|
private readonly IOcelotLoggerFactory _loggerFactory;
|
|
private readonly IDelegatingHandlerHandlerProvider _allRoutesProvider;
|
|
private readonly IQosProviderHouse _qosProviderHouse;
|
|
|
|
public DelegatingHandlerHandlerProviderFactory(IOcelotLoggerFactory loggerFactory,
|
|
IDelegatingHandlerHandlerProvider allRoutesProvider,
|
|
ITracingHandlerFactory factory,
|
|
IQosProviderHouse qosProviderHouse)
|
|
{
|
|
_factory = factory;
|
|
_loggerFactory = loggerFactory;
|
|
_allRoutesProvider = allRoutesProvider;
|
|
_qosProviderHouse = qosProviderHouse;
|
|
}
|
|
|
|
public Response<IDelegatingHandlerHandlerProvider> Get(DownstreamReRoute request)
|
|
{
|
|
var handlersAppliedToAll = _allRoutesProvider.Get();
|
|
|
|
var provider = new DelegatingHandlerHandlerProvider();
|
|
|
|
foreach (var handler in handlersAppliedToAll)
|
|
{
|
|
provider.Add(handler);
|
|
}
|
|
|
|
if (request.HttpHandlerOptions.UseTracing)
|
|
{
|
|
provider.Add(() => (DelegatingHandler)_factory.Get());
|
|
}
|
|
|
|
if (request.IsQos)
|
|
{
|
|
var qosProvider = _qosProviderHouse.Get(request);
|
|
|
|
if (qosProvider.IsError)
|
|
{
|
|
return new ErrorResponse<IDelegatingHandlerHandlerProvider>(qosProvider.Errors);
|
|
}
|
|
|
|
provider.Add(() => new PollyCircuitBreakingDelegatingHandler(qosProvider.Data, _loggerFactory));
|
|
}
|
|
|
|
return new OkResponse<IDelegatingHandlerHandlerProvider>(provider);
|
|
}
|
|
}
|
|
}
|