Skip to content

Commit

Permalink
Added initial set of changes for Open Telemetry support
Browse files Browse the repository at this point in the history
  • Loading branch information
oskardudycz committed Nov 26, 2022
1 parent f439c7c commit 7526f8d
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 1 deletion.
4 changes: 4 additions & 0 deletions Core/Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Polly" Version="7.2.3" />
<PackageReference Include="RestSharp" Version="108.0.2" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.0.0-rc9.9" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.0.0-rc9.9" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.0.0-rc9.9" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.3.1" />
</ItemGroup>

<ItemGroup>
Expand Down
77 changes: 77 additions & 0 deletions Core/OpenTelemetry/OpenTelemetryExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
using System.Diagnostics;
using Microsoft.Extensions.DependencyInjection;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

namespace Core.OpenTelemetry;

public static class OpenTelemetryExtensions
{
public static IServiceCollection AddOpenTelemetry(
this IServiceCollection services,
string serviceName
) => AddOpenTelemetry(services, serviceName, OpenTelemetryOptions.Default);

public static IServiceCollection AddOpenTelemetry(
this IServiceCollection services,
string serviceName,
OpenTelemetryOptions options
)
{
Activity.DefaultIdFormat = ActivityIdFormat.W3C;

AppContext.SetSwitch("Azure.Experimental.EnableActivitySource", true);

services
.AddOpenTelemetryTracing(builder =>
{
options.ConfigureTracerProvider(builder
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(serviceName)
.AddTelemetrySdk()
));

if (!options.ShouldDisableConsoleExporter)
builder.AddConsoleExporter();
});

return services;
}
}

public class OpenTelemetryOptions
{
public static OpenTelemetryOptions Default
{
get
{
return new OpenTelemetryOptions();
}
}

public Func<TracerProviderBuilder, TracerProviderBuilder> ConfigureTracerProvider { get; private set; } = p => p;

public bool ShouldDisableConsoleExporter { get; private set; }

private OpenTelemetryOptions()
{
}

public static OpenTelemetryOptions Build(Func<OpenTelemetryOptions, OpenTelemetryOptions> build) =>
build(Default);

public OpenTelemetryOptions Configure(Func<TracerProviderBuilder, TracerProviderBuilder> configure)
{
this.ConfigureTracerProvider = configure;
return this;
}

public OpenTelemetryOptions DisableConsoleExporter(bool shouldDisable)
{
ShouldDisableConsoleExporter = shouldDisable;
return this;
}
}
1 change: 1 addition & 0 deletions Sample/ECommerce/Carts/Carts.Api/Carts.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.0" />
<PackageReference Include="OpenTelemetry.Exporter.Jaeger" Version="1.4.0-beta.3" />
</ItemGroup>

<ItemGroup>
Expand Down
5 changes: 5 additions & 0 deletions Sample/ECommerce/Carts/Carts.Api/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@
using Core.Exceptions;
using Core.Kafka;
using Core.Marten.OptimisticConcurrency;
using Core.OpenTelemetry;
using Core.Serialization.Newtonsoft;
using Core.WebApi.Middlewares.ExceptionHandling;
using Core.WebApi.OptimisticConcurrency;
using Core.WebApi.Swagger;
using Core.WebApi.Tracing;
using Marten.Exceptions;
using Microsoft.OpenApi.Models;
using OpenTelemetry.Trace;

var builder = WebApplication.CreateBuilder(args);

Expand All @@ -28,6 +30,9 @@
sp => sp.GetRequiredService<MartenExpectedStreamVersionProvider>().TrySet,
sp => () => sp.GetRequiredService<MartenNextStreamVersionProvider>().Value?.ToString()
)
.AddOpenTelemetry("Carts", OpenTelemetryOptions.Build(options =>
options.Configure(t => t.AddJaegerExporter())
))
.AddControllers()
.AddNewtonsoftJson(opt => opt.SerializerSettings.WithDefaults());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public RequestPaymentsTests(TestWebApplicationFactory<Program> fixture)

[Fact]
[Trait("Category", "Acceptance")]
public Task RequestPayment_ShouldReturn_CreatedStatus_With_PaymentId() =>
public Task RequestPayment_ShouldReturn_CreatedStatus_With_PaymentId() =>
API.Given(
URI("/api/Payments/"),
BODY(new RequestPaymentRequest {OrderId = OrderId, Amount = Amount})
Expand Down
11 changes: 11 additions & 0 deletions docker-compose.pg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,17 @@ services:
networks:
- postgres

jaeger:
image: jaegertracing/all-in-one:latest
ports:
- "5775:5775/udp"
- "6831:6831/udp"
- "6832:6832/udp"
- "5778:5778"
- "16686:16686"
- "14268:14268"
- "9411:9411"

networks:
postgres:
driver: bridge
Expand Down

0 comments on commit 7526f8d

Please sign in to comment.