Remove TracerFactory from Extensions.Hosting project (#790)
* Removed hosting extensions using tracerfactory * rename * test * comment
This commit is contained in:
parent
0973b3ea0a
commit
bd65fd2132
|
|
@ -39,7 +39,7 @@ namespace API
|
||||||
// Switch between Zipkin/Jaeger by commenting out one of the following.
|
// Switch between Zipkin/Jaeger by commenting out one of the following.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
services.AddOpenTelemetrySdk((builder) => builder.AddRequestInstrumentation().AddDependencyInstrumentation()
|
services.AddOpenTelemetry((builder) => builder.AddRequestInstrumentation().AddDependencyInstrumentation()
|
||||||
.UseJaegerActivityExporter(o =>
|
.UseJaegerActivityExporter(o =>
|
||||||
{
|
{
|
||||||
o.ServiceName = this.Configuration.GetValue<string>("Jaeger:ServiceName");
|
o.ServiceName = this.Configuration.GetValue<string>("Jaeger:ServiceName");
|
||||||
|
|
@ -48,7 +48,7 @@ namespace API
|
||||||
}));
|
}));
|
||||||
*/
|
*/
|
||||||
|
|
||||||
services.AddOpenTelemetrySdk((builder) => builder.AddRequestInstrumentation().AddDependencyInstrumentation()
|
services.AddOpenTelemetry((builder) => builder.AddRequestInstrumentation().AddDependencyInstrumentation()
|
||||||
.UseZipkinActivityExporter(o =>
|
.UseZipkinActivityExporter(o =>
|
||||||
{
|
{
|
||||||
o.ServiceName = this.Configuration.GetValue<string>("Zipkin:ServiceName");
|
o.ServiceName = this.Configuration.GetValue<string>("Zipkin:ServiceName");
|
||||||
|
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
// <copyright file="TelemetryFactoryHostedService.cs" company="OpenTelemetry Authors">
|
|
||||||
// Copyright The OpenTelemetry Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
// </copyright>
|
|
||||||
|
|
||||||
namespace OpenTelemetry.Extensions.Hosting.Implementation
|
|
||||||
{
|
|
||||||
using System;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using Microsoft.Extensions.Hosting;
|
|
||||||
using OpenTelemetry.Trace;
|
|
||||||
|
|
||||||
internal class TelemetryFactoryHostedService : IHostedService
|
|
||||||
{
|
|
||||||
private readonly IServiceProvider serviceProvider;
|
|
||||||
|
|
||||||
public TelemetryFactoryHostedService(IServiceProvider serviceProvider)
|
|
||||||
{
|
|
||||||
this.serviceProvider = serviceProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task StartAsync(CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
// Ensure the factory was created when the app starts.
|
|
||||||
// This will create and start any configured instrumentations.
|
|
||||||
this.serviceProvider.GetRequiredService<TracerFactoryBase>();
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task StopAsync(CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -34,8 +34,11 @@ namespace OpenTelemetry.Extensions.Hosting.Implementation
|
||||||
|
|
||||||
public Task StartAsync(CancellationToken cancellationToken)
|
public Task StartAsync(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
// Ensure the factory was created when the app starts.
|
// The sole purpose of this HostedService is to ensure
|
||||||
// This will create and start any configured instrumentations.
|
// all instrumentations are created and started.
|
||||||
|
// This method is invoked when host starts, and
|
||||||
|
// by requesting the OpenTelemetrySdk from DI
|
||||||
|
// it ensures all instrumentations gets started.
|
||||||
this.serviceProvider.GetRequiredService<OpenTelemetrySdk>();
|
this.serviceProvider.GetRequiredService<OpenTelemetrySdk>();
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
using OpenTelemetry.Extensions.Hosting.Implementation;
|
using OpenTelemetry.Extensions.Hosting.Implementation;
|
||||||
using OpenTelemetry.Trace;
|
|
||||||
using OpenTelemetry.Trace.Configuration;
|
using OpenTelemetry.Trace.Configuration;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -43,24 +42,11 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
/// Adds OpenTelemetry services to the specified <see cref="IServiceCollection" />.
|
/// Adds OpenTelemetry services to the specified <see cref="IServiceCollection" />.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
||||||
|
/// <param name="configure">The <see cref="OpenTelemetryBuilder"/> configuration delegate.</param>
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
||||||
public static IServiceCollection AddOpenTelemetrySdk(this IServiceCollection services)
|
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Action<OpenTelemetryBuilder> configure)
|
||||||
{
|
{
|
||||||
services.AddOpenTelemetrySdk(builder => { });
|
services.AddOpenTelemetry(() => OpenTelemetrySdk.EnableOpenTelemetry(configure));
|
||||||
return services;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds OpenTelemetry services to the specified <see cref="IServiceCollection" />.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
|
||||||
/// <param name="configure">The <see cref="TracerBuilder"/> configuration delegate.</param>
|
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
|
||||||
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Action<TracerBuilder> configure)
|
|
||||||
{
|
|
||||||
services.AddOpenTelemetry(() => TracerFactory.Create(configure));
|
|
||||||
services.AddSingleton<TracerFactory>(s => (TracerFactory)s.GetRequiredService<TracerFactoryBase>());
|
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -70,59 +56,9 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
||||||
/// <param name="configure">The <see cref="OpenTelemetryBuilder"/> configuration delegate.</param>
|
/// <param name="configure">The <see cref="OpenTelemetryBuilder"/> configuration delegate.</param>
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
||||||
public static IServiceCollection AddOpenTelemetrySdk(this IServiceCollection services, Action<OpenTelemetryBuilder> configure)
|
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Action<IServiceProvider, OpenTelemetryBuilder> configure)
|
||||||
{
|
{
|
||||||
services.AddOpenTelemetrySdk(() => OpenTelemetrySdk.EnableOpenTelemetry(configure));
|
services.AddOpenTelemetry(s => OpenTelemetrySdk.EnableOpenTelemetry(builder => configure(s, builder)));
|
||||||
return services;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds OpenTelemetry services to the specified <see cref="IServiceCollection" />.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
|
||||||
/// <param name="configure">The <see cref="TracerBuilder"/> configuration delegate.</param>
|
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
|
||||||
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Action<IServiceProvider, TracerBuilder> configure)
|
|
||||||
{
|
|
||||||
services.AddOpenTelemetry(s => TracerFactory.Create(builder => configure(s, builder)));
|
|
||||||
services.AddSingleton<TracerFactory>(s => (TracerFactory)s.GetRequiredService<TracerFactoryBase>());
|
|
||||||
|
|
||||||
return services;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds OpenTelemetry services to the specified <see cref="IServiceCollection" />.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
|
||||||
/// <param name="configure">The <see cref="OpenTelemetryBuilder"/> configuration delegate.</param>
|
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
|
||||||
public static IServiceCollection AddOpenTelemetrySdk(this IServiceCollection services, Action<IServiceProvider, OpenTelemetryBuilder> configure)
|
|
||||||
{
|
|
||||||
services.AddOpenTelemetrySdk(s => OpenTelemetrySdk.EnableOpenTelemetry(builder => configure(s, builder)));
|
|
||||||
return services;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds OpenTelemetry services to the specified <see cref="IServiceCollection" />.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
|
||||||
/// <param name="createFactory">A delegate that provides the factory to be registered.</param>
|
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
|
||||||
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Func<TracerFactoryBase> createFactory)
|
|
||||||
{
|
|
||||||
if (services is null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(services));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (createFactory is null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(createFactory));
|
|
||||||
}
|
|
||||||
|
|
||||||
services.AddSingleton<TracerFactoryBase>(s => createFactory());
|
|
||||||
AddOpenTelemetryCore(services);
|
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -132,7 +68,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
||||||
/// <param name="createSdk">A delegate that provides the factory to be registered.</param>
|
/// <param name="createSdk">A delegate that provides the factory to be registered.</param>
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
||||||
public static IServiceCollection AddOpenTelemetrySdk(this IServiceCollection services, Func<OpenTelemetrySdk> createSdk)
|
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Func<OpenTelemetrySdk> createSdk)
|
||||||
{
|
{
|
||||||
if (services is null)
|
if (services is null)
|
||||||
{
|
{
|
||||||
|
|
@ -145,31 +81,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
}
|
}
|
||||||
|
|
||||||
services.AddSingleton(s => createSdk());
|
services.AddSingleton(s => createSdk());
|
||||||
AddOpenTelemetrySdkCore(services);
|
AddOpenTelemetryInternal(services);
|
||||||
|
|
||||||
return services;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds OpenTelemetry services to the specified <see cref="IServiceCollection" />.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
|
||||||
/// <param name="createFactory">A delegate that provides the factory to be registered.</param>
|
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
|
||||||
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Func<IServiceProvider, TracerFactoryBase> createFactory)
|
|
||||||
{
|
|
||||||
if (services is null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(services));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (createFactory is null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(createFactory));
|
|
||||||
}
|
|
||||||
|
|
||||||
services.AddSingleton<TracerFactoryBase>(s => createFactory(s));
|
|
||||||
AddOpenTelemetryCore(services);
|
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
@ -180,7 +92,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
||||||
/// <param name="createSdk">A delegate that provides the factory to be registered.</param>
|
/// <param name="createSdk">A delegate that provides the factory to be registered.</param>
|
||||||
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
|
||||||
public static IServiceCollection AddOpenTelemetrySdk(this IServiceCollection services, Func<IServiceProvider, OpenTelemetrySdk> createSdk)
|
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Func<IServiceProvider, OpenTelemetrySdk> createSdk)
|
||||||
{
|
{
|
||||||
if (services is null)
|
if (services is null)
|
||||||
{
|
{
|
||||||
|
|
@ -193,17 +105,12 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
}
|
}
|
||||||
|
|
||||||
services.AddSingleton(s => createSdk(s));
|
services.AddSingleton(s => createSdk(s));
|
||||||
AddOpenTelemetrySdkCore(services);
|
AddOpenTelemetryInternal(services);
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddOpenTelemetryCore(IServiceCollection services)
|
private static void AddOpenTelemetryInternal(IServiceCollection services)
|
||||||
{
|
|
||||||
services.TryAddEnumerable(ServiceDescriptor.Singleton<IHostedService, TelemetryFactoryHostedService>());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void AddOpenTelemetrySdkCore(IServiceCollection services)
|
|
||||||
{
|
{
|
||||||
services.TryAddEnumerable(ServiceDescriptor.Singleton<IHostedService, TelemetryHostedService>());
|
services.TryAddEnumerable(ServiceDescriptor.Singleton<IHostedService, TelemetryHostedService>());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ namespace OpenTelemetry.Trace.Configuration
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds auto-instrumentations for spans.
|
/// Adds auto-instrumentations for activity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TInstrumentation">Type of instrumentation class.</typeparam>
|
/// <typeparam name="TInstrumentation">Type of instrumentation class.</typeparam>
|
||||||
/// <param name="instrumentationFactory">Function that builds instrumentation.</param>
|
/// <param name="instrumentationFactory">Function that builds instrumentation.</param>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// <copyright file="HostingIntergrationOpenTelemetrySdkTests.cs" company="OpenTelemetry Authors">
|
// <copyright file="HostingExtensionsTests.cs" company="OpenTelemetry Authors">
|
||||||
// Copyright The OpenTelemetry Authors
|
// Copyright The OpenTelemetry Authors
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
|
@ -23,17 +23,17 @@ using Xunit;
|
||||||
|
|
||||||
namespace OpenTelemetry.Extensions.Hosting
|
namespace OpenTelemetry.Extensions.Hosting
|
||||||
{
|
{
|
||||||
public class HostingIntergrationOpenTelemetrySdkTests
|
public class HostingExtensionsTests
|
||||||
{
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task AddOpenTelemetry_RegisterInstrumentation_InstrumentationCreatedAndDisposed()
|
public async Task AddOpenTelemetryInstrumentationCreationAndDisposal()
|
||||||
{
|
{
|
||||||
var testInstrumentation = new TestInstrumentation();
|
var testInstrumentation = new TestInstrumentation();
|
||||||
var callbackRun = false;
|
var callbackRun = false;
|
||||||
|
|
||||||
var builder = new HostBuilder().ConfigureServices(services =>
|
var builder = new HostBuilder().ConfigureServices(services =>
|
||||||
{
|
{
|
||||||
services.AddOpenTelemetrySdk(builder =>
|
services.AddOpenTelemetry(builder =>
|
||||||
{
|
{
|
||||||
builder.AddInstrumentation((activitySource) =>
|
builder.AddInstrumentation((activitySource) =>
|
||||||
{
|
{
|
||||||
|
|
@ -69,7 +69,7 @@ namespace OpenTelemetry.Extensions.Hosting
|
||||||
{
|
{
|
||||||
var builder = new HostBuilder().ConfigureServices(services =>
|
var builder = new HostBuilder().ConfigureServices(services =>
|
||||||
{
|
{
|
||||||
services.AddOpenTelemetrySdk();
|
services.AddOpenTelemetry();
|
||||||
});
|
});
|
||||||
|
|
||||||
var host = builder.Build();
|
var host = builder.Build();
|
||||||
|
|
@ -87,7 +87,7 @@ namespace OpenTelemetry.Extensions.Hosting
|
||||||
|
|
||||||
var services = new ServiceCollection();
|
var services = new ServiceCollection();
|
||||||
services.AddSingleton(testInstrumentation);
|
services.AddSingleton(testInstrumentation);
|
||||||
services.AddOpenTelemetrySdk((provider, builder) =>
|
services.AddOpenTelemetry((provider, builder) =>
|
||||||
{
|
{
|
||||||
builder.AddInstrumentation<TestInstrumentation>((activitySource) => provider.GetRequiredService<TestInstrumentation>());
|
builder.AddInstrumentation<TestInstrumentation>((activitySource) => provider.GetRequiredService<TestInstrumentation>());
|
||||||
});
|
});
|
||||||
|
|
@ -1,123 +0,0 @@
|
||||||
// <copyright file="HostingIntegrationTests.cs" company="OpenTelemetry Authors">
|
|
||||||
// Copyright The OpenTelemetry Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
// </copyright>
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using Microsoft.Extensions.Hosting;
|
|
||||||
using OpenTelemetry.Trace;
|
|
||||||
using OpenTelemetry.Trace.Configuration;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace OpenTelemetry.Extensions.Hosting
|
|
||||||
{
|
|
||||||
public class HostingIntegrationTests
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public async Task AddOpenTelemetry_RegisterInstrumentation_InstrumentationCreatedAndDisposed()
|
|
||||||
{
|
|
||||||
var testInstrumentation = new TestInstrumentation();
|
|
||||||
var callbackRun = false;
|
|
||||||
|
|
||||||
var builder = new HostBuilder().ConfigureServices(services =>
|
|
||||||
{
|
|
||||||
services.AddOpenTelemetry(telemetry =>
|
|
||||||
{
|
|
||||||
telemetry.AddInstrumentation(t =>
|
|
||||||
{
|
|
||||||
callbackRun = true;
|
|
||||||
return testInstrumentation;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
var host = builder.Build();
|
|
||||||
|
|
||||||
Assert.False(callbackRun);
|
|
||||||
Assert.False(testInstrumentation.Disposed);
|
|
||||||
|
|
||||||
await host.StartAsync();
|
|
||||||
|
|
||||||
Assert.True(callbackRun);
|
|
||||||
Assert.False(testInstrumentation.Disposed);
|
|
||||||
|
|
||||||
await host.StopAsync();
|
|
||||||
|
|
||||||
Assert.True(callbackRun);
|
|
||||||
Assert.False(testInstrumentation.Disposed);
|
|
||||||
|
|
||||||
host.Dispose();
|
|
||||||
|
|
||||||
Assert.True(callbackRun);
|
|
||||||
Assert.True(testInstrumentation.Disposed);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void AddOpenTelemetry_HostBuilt_TracerFactoryRegisteredAsSingleton()
|
|
||||||
{
|
|
||||||
var builder = new HostBuilder().ConfigureServices(services =>
|
|
||||||
{
|
|
||||||
services.AddOpenTelemetry();
|
|
||||||
});
|
|
||||||
|
|
||||||
var host = builder.Build();
|
|
||||||
|
|
||||||
var tracerFactoryBase1 = host.Services.GetRequiredService<TracerFactoryBase>();
|
|
||||||
var tracerFactoryBase2 = host.Services.GetRequiredService<TracerFactoryBase>();
|
|
||||||
|
|
||||||
Assert.Same(tracerFactoryBase1, tracerFactoryBase2);
|
|
||||||
|
|
||||||
var tracerFactory1 = host.Services.GetRequiredService<TracerFactory>();
|
|
||||||
var tracerFactory2 = host.Services.GetRequiredService<TracerFactory>();
|
|
||||||
|
|
||||||
Assert.Same(tracerFactory1, tracerFactory2);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void AddOpenTelemetry_ServiceProviderArgument_ServicesRegistered()
|
|
||||||
{
|
|
||||||
var testInstrumentation = new TestInstrumentation();
|
|
||||||
|
|
||||||
var services = new ServiceCollection();
|
|
||||||
services.AddSingleton(testInstrumentation);
|
|
||||||
services.AddOpenTelemetry((provider, builder) =>
|
|
||||||
{
|
|
||||||
builder.AddInstrumentation<TestInstrumentation>(tracer => provider.GetRequiredService<TestInstrumentation>());
|
|
||||||
});
|
|
||||||
|
|
||||||
var serviceProvider = services.BuildServiceProvider();
|
|
||||||
|
|
||||||
var tracerFactory = serviceProvider.GetRequiredService<TracerFactory>();
|
|
||||||
Assert.NotNull(tracerFactory);
|
|
||||||
|
|
||||||
Assert.False(testInstrumentation.Disposed);
|
|
||||||
|
|
||||||
serviceProvider.Dispose();
|
|
||||||
|
|
||||||
Assert.True(testInstrumentation.Disposed);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class TestInstrumentation : IDisposable
|
|
||||||
{
|
|
||||||
public bool Disposed { get; private set; }
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
this.Disposed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -56,7 +56,7 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
|
||||||
builder.ConfigureTestServices((IServiceCollection services) =>
|
builder.ConfigureTestServices((IServiceCollection services) =>
|
||||||
{
|
{
|
||||||
services.AddSingleton<CallbackMiddleware.CallbackMiddlewareImpl>(new TestCallbackMiddlewareImpl());
|
services.AddSingleton<CallbackMiddleware.CallbackMiddlewareImpl>(new TestCallbackMiddlewareImpl());
|
||||||
services.AddOpenTelemetrySdk((builder) => builder.AddRequestInstrumentation()
|
services.AddOpenTelemetry((builder) => builder.AddRequestInstrumentation()
|
||||||
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)));
|
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)));
|
||||||
}))
|
}))
|
||||||
.CreateClient())
|
.CreateClient())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue