Skip to content

Commit 09a5783

Browse files
committed
Using Open telemetry
1 parent 7661260 commit 09a5783

File tree

12 files changed

+80
-49
lines changed

12 files changed

+80
-49
lines changed

src/Genocs.Tracing/Extensions.cs

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
using Genocs.Core.Builders;
44
using Genocs.Logging.Options;
55
using Genocs.Tracing.Jaeger.Options;
6+
using Jaeger.Samplers;
7+
using Jaeger.Senders.Thrift;
68
using Microsoft.Extensions.DependencyInjection;
9+
using Microsoft.Extensions.Logging;
710
using OpenTelemetry;
811
using OpenTelemetry.Resources;
912
using OpenTelemetry.Trace;
1013

1114
namespace Genocs.Tracing;
1215

1316
/// <summary>
14-
/// The Open Telemetry and Tracing
17+
/// The Open Telemetry extensions
1518
/// </summary>
1619
public static class Extensions
1720
{
@@ -44,22 +47,21 @@ public static IGenocsBuilder AddOpenTelemetry(this IGenocsBuilder builder)
4447
.AddEnvironmentVariableDetector())
4548
.AddSource("*");
4649

47-
// Remove comment below to enable tracing on console
48-
// you should add MongoDB.Driver.Core.Extensions.OpenTelemetry NuGet package
50+
// TODO> add flag to enable feature MongoDB.Driver.Core.Extensions.OpenTelemetry
4951
provider.AddMongoDBInstrumentation();
5052

5153

5254
var loggerOptions = builder.GetOptions<LoggerSettings>(LoggerSettings.Position);
5355

5456

55-
// Check for Azure ApplicationInsights
57+
// Check for Console config
5658
if (loggerOptions.Console != null && loggerOptions.Console.Enabled)
5759
{
5860
// OpenTelemetry.Exporter.Console NuGet package
5961
provider.AddConsoleExporter();
6062
}
6163

62-
// Check for Azure ApplicationInsights
64+
// Check for Azure ApplicationInsights config
6365
if (loggerOptions.Azure != null && loggerOptions.Azure.Enabled)
6466
{
6567
provider.AddAzureMonitorTraceExporter(o =>
@@ -87,9 +89,55 @@ public static IGenocsBuilder AddOpenTelemetry(this IGenocsBuilder builder)
8789
};
8890
});
8991
}
90-
9192
});
9293

9394
return builder;
9495
}
96+
97+
private static ISampler GetSampler(JaegerSettings options)
98+
{
99+
switch (options.Sampler)
100+
{
101+
case "const": return new ConstSampler(true);
102+
case "rate": return new RateLimitingSampler(options.MaxTracesPerSecond);
103+
case "probabilistic": return new ProbabilisticSampler(options.SamplingRate);
104+
default: return new ConstSampler(true);
105+
}
106+
}
107+
108+
private static HttpSender BuildHttpSender(JaegerSettings.HttpSenderSettings? options)
109+
{
110+
if (options is null)
111+
{
112+
throw new Exception("Missing Jaeger HTTP sender options.");
113+
}
114+
115+
if (string.IsNullOrWhiteSpace(options.Endpoint))
116+
{
117+
throw new Exception("Missing Jaeger HTTP sender endpoint.");
118+
}
119+
120+
var builder = new HttpSender.Builder(options.Endpoint);
121+
if (options.MaxPacketSize > 0)
122+
{
123+
builder = builder.WithMaxPacketSize(options.MaxPacketSize);
124+
}
125+
126+
if (!string.IsNullOrWhiteSpace(options.AuthToken))
127+
{
128+
builder = builder.WithAuth(options.AuthToken);
129+
}
130+
131+
if (!string.IsNullOrWhiteSpace(options.Username) && !string.IsNullOrWhiteSpace(options.Password))
132+
{
133+
builder = builder.WithAuth(options.Username, options.Password);
134+
}
135+
136+
if (!string.IsNullOrWhiteSpace(options.UserAgent))
137+
{
138+
builder = builder.WithUserAgent(options.Username);
139+
}
140+
141+
return builder.Build();
142+
}
95143
}

src/Genocs.Tracing/Genocs.Tracing.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757

5858
<ItemGroup>
5959
<PackageReference Include="Jaeger" Version="1.0.3" />
60-
<PackageReference Include="OpenTracing.Contrib.NetCore" Version="0.9.0" />
6160
</ItemGroup>
6261

6362
<ItemGroup>

src/Genocs.Tracing/Jaeger/Extensions.cs

Lines changed: 12 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Genocs.Core.Builders;
2-
using Genocs.Tracing.Jaeger.Builders;
32
using Genocs.Tracing.Jaeger.Options;
43
using Genocs.Tracing.Jaeger.Tracers;
54
using Jaeger;
@@ -11,7 +10,6 @@
1110
using Microsoft.Extensions.DependencyInjection;
1211
using Microsoft.Extensions.Logging;
1312
using OpenTracing;
14-
using OpenTracing.Contrib.NetCore.Configuration;
1513
using OpenTracing.Util;
1614

1715
namespace Genocs.Tracing.Jaeger;
@@ -23,39 +21,28 @@ namespace Genocs.Tracing.Jaeger;
2321
public static class Extensions
2422
{
2523
private static int _initialized;
26-
private const string SectionName = "jaeger";
2724
private const string RegistryName = "tracing.jaeger";
2825

29-
public static IGenocsBuilder AddJaeger(this IGenocsBuilder builder, string sectionName = SectionName,
30-
Action<IOpenTracingBuilder>? openTracingBuilder = null)
31-
{
32-
if (string.IsNullOrWhiteSpace(sectionName))
33-
{
34-
sectionName = SectionName;
35-
}
36-
37-
var options = builder.GetOptions<JaegerSettings>(sectionName);
38-
return builder.AddJaeger(options, sectionName, openTracingBuilder);
39-
}
40-
41-
public static IGenocsBuilder AddJaeger(this IGenocsBuilder builder,
42-
Func<IJaegerOptionsBuilder, IJaegerOptionsBuilder> buildOptions,
43-
string sectionName = SectionName,
44-
Action<IOpenTracingBuilder> openTracingBuilder = null)
45-
{
46-
var options = buildOptions(new JaegerOptionsBuilder()).Build();
47-
return builder.AddJaeger(options, sectionName, openTracingBuilder);
48-
}
4926

50-
public static IGenocsBuilder AddJaeger(this IGenocsBuilder builder, JaegerSettings options,
51-
string sectionName = SectionName, Action<IOpenTracingBuilder>? openTracingBuilder = null)
27+
/// <summary>
28+
/// Add Jaeger Tracer
29+
/// </summary>
30+
/// <param name="builder"></param>
31+
/// <param name="sectionName"></param>
32+
/// <returns></returns>
33+
/// <exception cref="Exception"></exception>
34+
public static IGenocsBuilder AddJaeger(this IGenocsBuilder builder, string sectionName = JaegerSettings.Position)
5235
{
5336
if (Interlocked.Exchange(ref _initialized, 1) == 1)
5437
{
5538
return builder;
5639
}
5740

41+
42+
var options = builder.GetOptions<JaegerSettings>(sectionName);
43+
5844
builder.Services.AddSingleton(options);
45+
5946
if (!options.Enabled)
6047
{
6148
var defaultTracer = GenocsDefaultTracer.Create();
@@ -68,18 +55,6 @@ public static IGenocsBuilder AddJaeger(this IGenocsBuilder builder, JaegerSettin
6855
return builder;
6956
}
7057

71-
if (options.ExcludePaths is not null)
72-
{
73-
builder.Services.Configure<AspNetCoreDiagnosticOptions>(o =>
74-
{
75-
foreach (var path in options.ExcludePaths)
76-
{
77-
o.Hosting.IgnorePatterns.Add(x => x.Request.Path == path);
78-
}
79-
});
80-
}
81-
82-
builder.Services.AddOpenTracing(x => openTracingBuilder?.Invoke(x));
8358

8459
builder.Services.AddSingleton<ITracer>(sp =>
8560
{

src/apps/api-gateway/Genocs.APIGateway/Startup.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Genocs.MessageBrokers.RabbitMQ;
66
using Genocs.Metrics.Prometheus;
77
using Genocs.Security;
8+
using Genocs.Tracing;
89
using Genocs.Tracing.Jaeger;
910
using Genocs.Tracing.Jaeger.RabbitMQ;
1011
using Genocs.WebApi;
@@ -36,6 +37,7 @@ public void ConfigureServices(IServiceCollection services)
3637
services.AddSingleton<IForwarderHttpClientFactory, CustomForwarderHttpClientFactory>();
3738
services
3839
.AddGenocs()
40+
.AddOpenTelemetry()
3941
.AddJaeger()
4042
.AddJwt()
4143
.AddPrometheus()

src/apps/identity/Genocs.Identities.Application/Extensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
using Genocs.Persistence.MongoDb.Extensions;
2424
using Genocs.Persistence.Redis;
2525
using Genocs.Tracing;
26+
using Genocs.Tracing.Jaeger;
2627
using Genocs.WebApi;
2728
using Genocs.WebApi.CQRS;
2829
using Genocs.WebApi.Swagger;
@@ -67,7 +68,7 @@ public static IGenocsBuilder AddCore(this IGenocsBuilder builder)
6768
.AddMongo()
6869
.AddRedis()
6970
.AddOpenTelemetry()
70-
//.AddJaeger()
71+
.AddJaeger()
7172
.AddMetrics()
7273
.AddMongoRepository<RefreshTokenDocument, Guid>("refreshTokens")
7374
.AddMongoRepository<UserDocument, Guid>("users")

src/apps/identity/Genocs.Identities.WebApi/Genocs.Identities.WebApi.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>net7.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
7-
<UserSecretsId>__genocs</UserSecretsId>
7+
<UserSecretsId>_genocs</UserSecretsId>
88
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
99
<DockerfileContext>..\..</DockerfileContext>
1010
</PropertyGroup>

src/apps/orders/Genocs.Orders.WebApi/Genocs.Orders.WebApi.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>net7.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
7-
<UserSecretsId>__genocs</UserSecretsId>
7+
<UserSecretsId>_genocs</UserSecretsId>
88
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
99
<DockerfileContext>..\..</DockerfileContext>
1010
</PropertyGroup>

src/apps/orders/Genocs.Orders.WebApi/Program.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using Genocs.Persistence.MongoDb.Extensions;
2121
using Genocs.Persistence.Redis;
2222
using Genocs.Secrets.Vault;
23+
using Genocs.Tracing;
2324
using Genocs.Tracing.Jaeger;
2425
using Genocs.Tracing.Jaeger.RabbitMQ;
2526
using Genocs.WebApi;
@@ -54,6 +55,7 @@
5455
.AddCorrelationContextLogging()
5556
.AddConsul()
5657
.AddFabio()
58+
.AddOpenTelemetry()
5759
.AddJaeger()
5860
.AddMongo()
5961
.AddMongoRepository<Order, Guid>("orders")

src/apps/products/Genocs.Products.WebApi/Genocs.Products.WebApi.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>net7.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
7-
<UserSecretsId>genocs</UserSecretsId>
7+
<UserSecretsId>_genocs</UserSecretsId>
88
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
99
<DockerfileContext>..\..</DockerfileContext>
1010
</PropertyGroup>

src/apps/products/Genocs.Products.WebApi/Program.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using Genocs.Products.WebApi.DTO;
1919
using Genocs.Products.WebApi.Queries;
2020
using Genocs.Secrets.Vault;
21+
using Genocs.Tracing;
2122
using Genocs.Tracing.Jaeger;
2223
using Genocs.Tracing.Jaeger.RabbitMQ;
2324
using Genocs.WebApi;
@@ -52,6 +53,7 @@
5253
.AddCorrelationContextLogging()
5354
.AddConsul()
5455
.AddFabio()
56+
.AddOpenTelemetry()
5557
.AddJaeger()
5658
.AddMongo()
5759
.AddMongoRepository<Product, Guid>("products")

0 commit comments

Comments
 (0)