Skip to content

Commit 21b9d73

Browse files
committed
tweaks
1 parent 56fe7b5 commit 21b9d73

File tree

9 files changed

+226
-133
lines changed

9 files changed

+226
-133
lines changed

Ocelot.sln

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "basic", "basic", "{ED066001
8282
EndProject
8383
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "graphql", "graphql", "{C15CD120-5F8D-41DE-9B21-00E3EA77D6C1}"
8484
EndProject
85+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ocelot.Tracing.OpenTracing", "src\Ocelot.Tracing.OpenTracing\Ocelot.Tracing.OpenTracing.csproj", "{11C622AD-8C0A-4CF4-811B-3DBB76550797}"
86+
EndProject
87+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "open-tracing", "open-tracing", "{731C6A8A-69ED-445C-A132-C638AA93F9C7}"
88+
EndProject
89+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OcelotOpenTracing", "samples\OcelotOpenTracing\OcelotOpenTracing.csproj", "{C9427E78-4281-4F59-A66E-17C0B66550E5}"
90+
EndProject
8591
Global
8692
GlobalSection(SolutionConfigurationPlatforms) = preSolution
8793
Debug|Any CPU = Debug|Any CPU
@@ -180,6 +186,14 @@ Global
180186
{33BE6D88-F188-4E60-83AC-3C4B94D24675}.Debug|Any CPU.Build.0 = Debug|Any CPU
181187
{33BE6D88-F188-4E60-83AC-3C4B94D24675}.Release|Any CPU.ActiveCfg = Release|Any CPU
182188
{33BE6D88-F188-4E60-83AC-3C4B94D24675}.Release|Any CPU.Build.0 = Release|Any CPU
189+
{11C622AD-8C0A-4CF4-811B-3DBB76550797}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
190+
{11C622AD-8C0A-4CF4-811B-3DBB76550797}.Debug|Any CPU.Build.0 = Debug|Any CPU
191+
{11C622AD-8C0A-4CF4-811B-3DBB76550797}.Release|Any CPU.ActiveCfg = Release|Any CPU
192+
{11C622AD-8C0A-4CF4-811B-3DBB76550797}.Release|Any CPU.Build.0 = Release|Any CPU
193+
{C9427E78-4281-4F59-A66E-17C0B66550E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
194+
{C9427E78-4281-4F59-A66E-17C0B66550E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
195+
{C9427E78-4281-4F59-A66E-17C0B66550E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
196+
{C9427E78-4281-4F59-A66E-17C0B66550E5}.Release|Any CPU.Build.0 = Release|Any CPU
183197
EndGlobalSection
184198
GlobalSection(SolutionProperties) = preSolution
185199
HideSolutionNode = FALSE
@@ -214,6 +228,9 @@ Global
214228
{1F1F324D-6EA4-4E63-A6A7-C6053F412F1A} = {8FA0CBA0-0338-48EB-B37F-83CA5022237C}
215229
{ED066001-BAF7-4117-9884-DF591A56347D} = {8FA0CBA0-0338-48EB-B37F-83CA5022237C}
216230
{C15CD120-5F8D-41DE-9B21-00E3EA77D6C1} = {8FA0CBA0-0338-48EB-B37F-83CA5022237C}
231+
{11C622AD-8C0A-4CF4-811B-3DBB76550797} = {5CFB79B7-C9DC-45A4-9A75-625D92471702}
232+
{731C6A8A-69ED-445C-A132-C638AA93F9C7} = {8FA0CBA0-0338-48EB-B37F-83CA5022237C}
233+
{C9427E78-4281-4F59-A66E-17C0B66550E5} = {731C6A8A-69ED-445C-A132-C638AA93F9C7}
217234
EndGlobalSection
218235
GlobalSection(ExtensibilityGlobals) = postSolution
219236
SolutionGuid = {21476EFF-778A-4F97-8A56-D1AF1CEC0C48}

docs/features/tracing.rst

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,41 @@
11
Tracing
22
=======
33

4-
This page details how to perform distributed tracing with Ocelot. At the moment we only support Butterfly but other tracers might just work without
5-
anything Ocelot specific.
4+
This page details how to perform distributed tracing with Ocelot.
5+
6+
OpenTracing
7+
^^^^^^^^^^^
8+
9+
Ocelot providers tracing functionality from the excellent `OpenTracing C# <https://github.com/opentracing/opentracing-csharp>`_ project. The code for the Ocelot integration
10+
can be found `here <https://github.com/ThreeMammals/Ocelot.Tracing.OpenTracing>`_.
11+
12+
The example below uses `Jaeger C# <https://github.com/jaegertracing/jaeger-client-csharp>`_ client to provide the tracer used in Ocelot.
13+
14+
.. code-block:: csharp
15+
16+
services.AddSingleton<ITracer>(sp =>
17+
{
18+
var loggerFactory = sp.GetService<ILoggerFactory>();
19+
Configuration config = new Configuration(context.HostingEnvironment.ApplicationName, loggerFactory);
20+
21+
var tracer = config.GetTracer();
22+
GlobalTracer.Register(tracer);
23+
return tracer;
24+
});
25+
26+
services
27+
.AddOcelot()
28+
.AddOpenTracing();
29+
30+
Then in your ocelot.json add the following to the Route you want to trace..
31+
32+
.. code-block:: json
33+
34+
"HttpHandlerOptions": {
35+
"UseTracing": true
36+
},
37+
38+
Ocelot will now send tracing information to Jaeger when this Route is called.
639

740
Butterfly
841
^^^^^^^^^

samples/OcelotOpenTracing/Program.cs

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
1-
using Microsoft.AspNetCore.Hosting;
2-
using Microsoft.Extensions.Configuration;
3-
using Microsoft.Extensions.Hosting;
4-
using System.IO;
5-
using Ocelot.DependencyInjection;
6-
using Ocelot.Middleware;
7-
using Microsoft.Extensions.Logging;
8-
using Ocelot.Tracing.OpenTracing;
9-
using Jaeger;
10-
using Microsoft.Extensions.DependencyInjection;
11-
using OpenTracing;
12-
using OpenTracing.Util;
13-
14-
namespace OcelotOpenTracing
1+
namespace OcelotOpenTracing
152
{
3+
using Microsoft.AspNetCore.Hosting;
4+
using Microsoft.Extensions.Configuration;
5+
using Microsoft.Extensions.Hosting;
6+
using System.IO;
7+
using Ocelot.DependencyInjection;
8+
using Ocelot.Middleware;
9+
using Microsoft.Extensions.Logging;
10+
using Ocelot.Tracing.OpenTracing;
11+
using Jaeger;
12+
using Microsoft.Extensions.DependencyInjection;
13+
using OpenTracing;
14+
using OpenTracing.Util;
15+
1616
internal static class Program
1717
{
1818
private static void Main(string[] args)
1919
{
20-
2120
Host.CreateDefaultBuilder()
2221
.ConfigureWebHostDefaults(webBuilder =>
2322
{
@@ -36,10 +35,6 @@ private static void Main(string[] args)
3635
})
3736
.ConfigureServices((context, services) =>
3837
{
39-
services
40-
.AddOcelot()
41-
.AddOpenTracing();
42-
4338
services.AddSingleton<ITracer>(sp =>
4439
{
4540
var loggerFactory = sp.GetService<ILoggerFactory>();
@@ -50,6 +45,9 @@ private static void Main(string[] args)
5045
return tracer;
5146
});
5247

48+
services
49+
.AddOcelot()
50+
.AddOpenTracing();
5351
})
5452
.ConfigureLogging(logging =>
5553
{

src/Ocelot.Tracing.OpenTracing/Ocelot.Tracing.OpenTracing.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1111
</PropertyGroup>
1212

13-
<ItemGroup>
14-
<PackageReference Include="OpenTracing" Version="0.12.1" />
13+
<ItemGroup>
14+
<PackageReference Include="OpenTracing" Version="0.12.1" />
1515
</ItemGroup>
1616

1717
<ItemGroup>

src/Ocelot.Tracing.OpenTracing/OcelotBuilderExtensions.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
using Microsoft.Extensions.DependencyInjection;
2-
using Ocelot.DependencyInjection;
3-
using Ocelot.Logging;
4-
using System;
5-
6-
namespace Ocelot.Tracing.OpenTracing
1+
namespace Ocelot.Tracing.OpenTracing
72
{
3+
using Microsoft.Extensions.DependencyInjection.Extensions;
4+
using Ocelot.DependencyInjection;
5+
using Ocelot.Logging;
6+
87
public static class OcelotBuilderExtensions
98
{
109
public static IOcelotBuilder AddOpenTracing(this IOcelotBuilder builder)
1110
{
12-
builder.Services.AddSingleton<ITracer, OpenTracingTracer>();
13-
11+
builder.Services.TryAddSingleton<ITracer, OpenTracingTracer>();
1412
return builder;
1513
}
1614
}

src/Ocelot.Tracing.OpenTracing/OpenTracingTracer.cs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,36 @@
1-
using Microsoft.AspNetCore.Http;
2-
using OpenTracing;
3-
using OpenTracing.Propagation;
4-
using OpenTracing.Tag;
5-
using System;
6-
using System.Collections.Generic;
7-
using System.Net.Http;
8-
using System.Threading;
9-
using System.Threading.Tasks;
10-
11-
namespace Ocelot.Tracing.OpenTracing
1+
namespace Ocelot.Tracing.OpenTracing
122
{
3+
using global::OpenTracing;
4+
using global::OpenTracing.Propagation;
5+
using global::OpenTracing.Tag;
6+
using Microsoft.AspNetCore.Http;
7+
using System;
8+
using System.Collections.Generic;
9+
using System.Net.Http;
10+
using System.Threading;
11+
using System.Threading.Tasks;
12+
1313
class OpenTracingTracer : Logging.ITracer
1414
{
15-
private readonly ITracer tracer;
15+
private readonly ITracer _tracer;
1616

1717
public OpenTracingTracer(ITracer tracer)
1818
{
19-
this.tracer = tracer ?? throw new ArgumentNullException(nameof(tracer));
19+
_tracer = tracer ?? throw new ArgumentNullException(nameof(tracer));
2020
}
2121

2222
public void Event(HttpContext httpContext, string @event)
2323
{
2424
}
2525

26-
public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken,
27-
Action<string> addTraceIdToRepo, Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> baseSendAsync)
26+
public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
27+
CancellationToken cancellationToken,
28+
Action<string> addTraceIdToRepo,
29+
Func<HttpRequestMessage,
30+
CancellationToken,
31+
Task<HttpResponseMessage>> baseSendAsync)
2832
{
29-
using (IScope scope = this.tracer.BuildSpan(request.RequestUri.AbsoluteUri).StartActive(finishSpanOnDispose: true))
33+
using (IScope scope = _tracer.BuildSpan(request.RequestUri.AbsoluteUri).StartActive(finishSpanOnDispose: true))
3034
{
3135
var span = scope.Span;
3236

@@ -38,7 +42,7 @@ public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, Can
3842

3943
var headers = new Dictionary<string, string>();
4044

41-
this.tracer.Inject(span.Context, BuiltinFormats.HttpHeaders, new TextMapInjectAdapter(headers));
45+
_tracer.Inject(span.Context, BuiltinFormats.HttpHeaders, new TextMapInjectAdapter(headers));
4246

4347
foreach (var item in headers)
4448
{
Lines changed: 76 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,77 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
2-
<PropertyGroup>
3-
<VersionPrefix>0.0.0-dev</VersionPrefix>
4-
<TargetFramework>netcoreapp3.1</TargetFramework>
5-
<AssemblyName>Ocelot.AcceptanceTests</AssemblyName>
6-
<OutputType>Exe</OutputType>
7-
<PackageId>Ocelot.AcceptanceTests</PackageId>
8-
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
9-
<RuntimeIdentifiers>osx.10.11-x64;osx.10.12-x64;win7-x64;win10-x64</RuntimeIdentifiers>
10-
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
11-
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
12-
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
13-
<CodeAnalysisRuleSet>..\..\codeanalysis.ruleset</CodeAnalysisRuleSet>
14-
</PropertyGroup>
15-
16-
<ItemGroup>
17-
<None Update="appsettings.product.json">
18-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
19-
</None>
20-
<None Update="appsettings.json">
21-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
22-
</None>
23-
<None Update="idsrv3test.pfx">
24-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
25-
</None>
26-
</ItemGroup>
27-
<ItemGroup>
28-
<ProjectReference Include="..\..\src\Ocelot.Tracing.Butterfly\Ocelot.Tracing.Butterfly.csproj" />
29-
<ProjectReference Include="..\..\src\Ocelot\Ocelot.csproj" />
30-
<ProjectReference Include="..\..\src\Ocelot.Cache.CacheManager\Ocelot.Cache.CacheManager.csproj" />
31-
<ProjectReference Include="..\..\src\Ocelot.Provider.Consul\Ocelot.Provider.Consul.csproj" />
32-
<ProjectReference Include="..\..\src\Ocelot.Provider.Eureka\Ocelot.Provider.Eureka.csproj" />
33-
<ProjectReference Include="..\..\src\Ocelot.Provider.Polly\Ocelot.Provider.Polly.csproj" />
34-
<ProjectReference Include="..\Ocelot.ManualTest\Ocelot.ManualTest.csproj" />
35-
</ItemGroup>
36-
<ItemGroup>
37-
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
38-
</ItemGroup>
39-
40-
<ItemGroup>
41-
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="3.1.1" />
42-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
43-
<PackageReference Include="Moq" Version="4.13.1" />
44-
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.164">
45-
<PrivateAssets>all</PrivateAssets>
46-
</PackageReference>
47-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
48-
<PrivateAssets>all</PrivateAssets>
49-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
50-
</PackageReference>
51-
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.1" />
52-
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.1" />
53-
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.1" />
54-
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.1" />
55-
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.1" />
56-
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.1" />
57-
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.1" />
58-
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.1" />
59-
<PackageReference Include="Microsoft.DotNet.InternalAbstractions" Version="1.0.500-preview2-1-003177" />
60-
<PackageReference Include="Shouldly" Version="4.0.0-beta0002" />
61-
<PackageReference Include="TestStack.BDDfy" Version="4.3.2" />
62-
<PackageReference Include="xunit" Version="2.4.1" />
63-
<PackageReference Include="Butterfly.Client.AspNetCore" Version="0.0.8" />
64-
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
65-
<PackageReference Include="IdentityServer4" Version="3.1.1" />
66-
<PackageReference Include="Consul" Version="0.7.2.6" />
67-
<PackageReference Include="Rafty" Version="0.4.4" />
68-
<PackageReference Include="CacheManager.Microsoft.Extensions.Logging" Version="2.0.0-beta-1629" />
69-
<PackageReference Include="CacheManager.Serialization.Json" Version="2.0.0-beta-1629" />
70-
<PackageReference Include="Steeltoe.Discovery.ClientCore" Version="2.4.2" />
71-
</ItemGroup>
72-
<ItemGroup>
73-
<PackageReference Update="Microsoft.SourceLink.GitHub" Version="1.0.0" />
74-
</ItemGroup>
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<VersionPrefix>0.0.0-dev</VersionPrefix>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
<AssemblyName>Ocelot.AcceptanceTests</AssemblyName>
6+
<OutputType>Exe</OutputType>
7+
<PackageId>Ocelot.AcceptanceTests</PackageId>
8+
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
9+
<RuntimeIdentifiers>osx.10.11-x64;osx.10.12-x64;win7-x64;win10-x64</RuntimeIdentifiers>
10+
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
11+
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
12+
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
13+
<CodeAnalysisRuleSet>..\..\codeanalysis.ruleset</CodeAnalysisRuleSet>
14+
</PropertyGroup>
15+
16+
<ItemGroup>
17+
<None Update="appsettings.product.json">
18+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
19+
</None>
20+
<None Update="appsettings.json">
21+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
22+
</None>
23+
<None Update="idsrv3test.pfx">
24+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
25+
</None>
26+
</ItemGroup>
27+
<ItemGroup>
28+
<ProjectReference Include="..\..\src\Ocelot.Tracing.Butterfly\Ocelot.Tracing.Butterfly.csproj" />
29+
<ProjectReference Include="..\..\src\Ocelot.Tracing.OpenTracing\Ocelot.Tracing.OpenTracing.csproj" />
30+
<ProjectReference Include="..\..\src\Ocelot\Ocelot.csproj" />
31+
<ProjectReference Include="..\..\src\Ocelot.Cache.CacheManager\Ocelot.Cache.CacheManager.csproj" />
32+
<ProjectReference Include="..\..\src\Ocelot.Provider.Consul\Ocelot.Provider.Consul.csproj" />
33+
<ProjectReference Include="..\..\src\Ocelot.Provider.Eureka\Ocelot.Provider.Eureka.csproj" />
34+
<ProjectReference Include="..\..\src\Ocelot.Provider.Polly\Ocelot.Provider.Polly.csproj" />
35+
<ProjectReference Include="..\Ocelot.ManualTest\Ocelot.ManualTest.csproj" />
36+
</ItemGroup>
37+
<ItemGroup>
38+
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
39+
</ItemGroup>
40+
41+
<ItemGroup>
42+
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="3.1.1" />
43+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
44+
<PackageReference Include="Moq" Version="4.13.1" />
45+
<PackageReference Include="OpenTracing" Version="0.12.1" />
46+
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.164">
47+
<PrivateAssets>all</PrivateAssets>
48+
</PackageReference>
49+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
50+
<PrivateAssets>all</PrivateAssets>
51+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
52+
</PackageReference>
53+
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.1" />
54+
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.1" />
55+
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.1" />
56+
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.1" />
57+
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.1" />
58+
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.1" />
59+
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.1" />
60+
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.1" />
61+
<PackageReference Include="Microsoft.DotNet.InternalAbstractions" Version="1.0.500-preview2-1-003177" />
62+
<PackageReference Include="Shouldly" Version="4.0.0-beta0002" />
63+
<PackageReference Include="TestStack.BDDfy" Version="4.3.2" />
64+
<PackageReference Include="xunit" Version="2.4.1" />
65+
<PackageReference Include="Butterfly.Client.AspNetCore" Version="0.0.8" />
66+
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
67+
<PackageReference Include="IdentityServer4" Version="3.1.1" />
68+
<PackageReference Include="Consul" Version="0.7.2.6" />
69+
<PackageReference Include="Rafty" Version="0.4.4" />
70+
<PackageReference Include="CacheManager.Microsoft.Extensions.Logging" Version="2.0.0-beta-1629" />
71+
<PackageReference Include="CacheManager.Serialization.Json" Version="2.0.0-beta-1629" />
72+
<PackageReference Include="Steeltoe.Discovery.ClientCore" Version="2.4.2" />
73+
</ItemGroup>
74+
<ItemGroup>
75+
<PackageReference Update="Microsoft.SourceLink.GitHub" Version="1.0.0" />
76+
</ItemGroup>
7577
</Project>

0 commit comments

Comments
 (0)