Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
0521dfa
Introduce OpenTelemetry.DependencyInjection and refactor SDK.
CodeBlanch Nov 18, 2022
d80bfe9
Merge from main.
CodeBlanch Nov 28, 2022
641fd3f
Manual merge fixes.
CodeBlanch Nov 28, 2022
2642179
Some refactoring.
CodeBlanch Nov 29, 2022
7486cc2
Renames.
CodeBlanch Nov 29, 2022
55c1e62
Bug fixes and refactoring.
CodeBlanch Nov 29, 2022
18e5a61
Cleanup and docs.
CodeBlanch Nov 30, 2022
535d8fe
More updates.
CodeBlanch Nov 30, 2022
a735a53
More cleanup.
CodeBlanch Nov 30, 2022
d2f237c
API updates.
CodeBlanch Nov 30, 2022
119514d
Namespace tweaks.
CodeBlanch Dec 1, 2022
cde4679
Refactoring and API changes.
CodeBlanch Dec 2, 2022
754a882
Example tweaks.
CodeBlanch Dec 2, 2022
a3b3bcd
Example cleanup.
CodeBlanch Dec 2, 2022
adf1a00
XML doc updates.
CodeBlanch Dec 2, 2022
6022f84
XML doc updates.
CodeBlanch Dec 2, 2022
1c1bf38
Bug fix.
CodeBlanch Dec 2, 2022
9cf302f
Test fixes.
CodeBlanch Dec 2, 2022
3a75954
Example fixup.
CodeBlanch Dec 2, 2022
6e29c32
Test fixup.
CodeBlanch Dec 2, 2022
bdff2bb
Test fixup.
CodeBlanch Dec 2, 2022
1274793
Example fixup.
CodeBlanch Dec 2, 2022
7f9b9a0
Test fixup.
CodeBlanch Dec 2, 2022
09ef294
Test fixup.
CodeBlanch Dec 2, 2022
c9f33ab
Test fixup.
CodeBlanch Dec 2, 2022
5a38dc0
Merge from main.
CodeBlanch Dec 2, 2022
3e89e15
CHANGELOG patch.
CodeBlanch Dec 2, 2022
d5e4be8
Add test project.
CodeBlanch Dec 2, 2022
7dfdb13
Cleanup.
CodeBlanch Dec 2, 2022
f972732
Added configure tests.
CodeBlanch Dec 2, 2022
adb8d89
MeterProviderBuilder extensions tests.
CodeBlanch Dec 2, 2022
311831e
TracerProviderBuilder extensions tests
CodeBlanch Dec 2, 2022
5a40ee5
Some README content.
CodeBlanch Dec 2, 2022
cf70bf4
CHANGELOG patch.
CodeBlanch Dec 2, 2022
339e28d
Doc updates.
CodeBlanch Dec 2, 2022
df95a5a
Example code fixes.
CodeBlanch Dec 2, 2022
99c0f84
Doc updates.
CodeBlanch Dec 2, 2022
8d895e9
Doc updates.
CodeBlanch Dec 2, 2022
fae1e39
Doc updates and cleanup.
CodeBlanch Dec 2, 2022
ae660bf
Doc updates.
CodeBlanch Dec 2, 2022
a6613f4
Skip ApiCompat on new project.
CodeBlanch Dec 2, 2022
47d6d87
API tweaks.
CodeBlanch Dec 3, 2022
164c0f1
Merge branch 'main' into dependencyinjection-package-refactor
CodeBlanch Dec 3, 2022
6015b06
Test fixes.
CodeBlanch Dec 3, 2022
e85f8ae
XML doc improvements.
CodeBlanch Dec 3, 2022
de72219
Tweaks.
CodeBlanch Dec 5, 2022
f9afd08
Merge from main.
CodeBlanch Dec 8, 2022
752ad56
Project file updates.
CodeBlanch Dec 8, 2022
b1848c0
Test fix.
CodeBlanch Dec 8, 2022
1b8c894
Project rename.
CodeBlanch Dec 8, 2022
6b2971f
Merge from main.
CodeBlanch Dec 8, 2022
91d6784
Manual fixes for merge from main.
CodeBlanch Dec 8, 2022
d95757e
More manual fixes for merge from main.
CodeBlanch Dec 8, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Some refactoring.
  • Loading branch information
CodeBlanch committed Nov 29, 2022
commit 26421799d97f8b13ed85ecef73cfd6a5eac83812
2 changes: 2 additions & 0 deletions src/OpenTelemetry.DependencyInjection/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# Changelog

## Unreleased

Initial release.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,12 @@

using System;
using Microsoft.Extensions.DependencyInjection.Extensions;
using OpenTelemetry;
using OpenTelemetry.Internal;
using OpenTelemetry.Metrics;

namespace Microsoft.Extensions.DependencyInjection;

public class DeferredMeterProviderBuilder : MeterProviderBuilder, IProviderBuilder<MeterProvider, MeterProviderBuilder>, IDeferredMeterProviderBuilder
public class DeferredMeterProviderBuilder : MeterProviderBuilder, IMeterProviderBuilder
{
public DeferredMeterProviderBuilder(IServiceCollection services)
{
Expand All @@ -36,7 +35,7 @@ public DeferredMeterProviderBuilder(IServiceCollection services)
}

/// <inheritdoc />
MeterProvider? IProviderBuilder<MeterProvider, MeterProviderBuilder>.Provider => null;
MeterProvider? IMeterProviderBuilder.Provider => null;

protected IServiceCollection? Services { get; set; }

Expand Down Expand Up @@ -69,8 +68,8 @@ public override MeterProviderBuilder AddMeter(params string[] names)
/// <inheritdoc />
public MeterProviderBuilder ConfigureBuilder(Action<IServiceProvider, MeterProviderBuilder> configure)
{
this.ConfigureServices(services => services.AddSingleton<IConfigureProviderBuilder<MeterProvider, MeterProviderBuilder>>(
new ConfigureProviderBuilderCallbackWrapper<MeterProvider, MeterProviderBuilder>(configure)));
this.ConfigureServices(services => services.AddSingleton<IConfigureMeterProviderBuilder>(
new ConfigureMeterProviderBuilderCallbackWrapper(configure)));

return this;
}
Expand All @@ -95,4 +94,21 @@ public MeterProviderBuilder ConfigureServices(Action<IServiceCollection> configu
/// <inheritdoc />
MeterProviderBuilder IDeferredMeterProviderBuilder.Configure(Action<IServiceProvider, MeterProviderBuilder> configure)
=> this.ConfigureBuilder(configure);

private sealed class ConfigureMeterProviderBuilderCallbackWrapper : IConfigureMeterProviderBuilder
{
private readonly Action<IServiceProvider, MeterProviderBuilder> configure;

public ConfigureMeterProviderBuilderCallbackWrapper(Action<IServiceProvider, MeterProviderBuilder> configure)
{
Guard.ThrowIfNull(configure);

this.configure = configure;
}

public void ConfigureBuilder(IServiceProvider serviceProvider, MeterProviderBuilder meterProviderBuilder)
{
this.configure(serviceProvider, meterProviderBuilder);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// <copyright file="IConfigureProviderBuilder.cs" company="OpenTelemetry Authors">
// <copyright file="IConfigureMeterProviderBuilder.cs" company="OpenTelemetry Authors">
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -16,9 +16,9 @@

using System;

namespace OpenTelemetry;
namespace OpenTelemetry.Metrics;

public interface IConfigureProviderBuilder<TProvider, TProviderBuilder>
public interface IConfigureMeterProviderBuilder
{
void ConfigureBuilder(IServiceProvider serviceProvider, TProviderBuilder providerBuilder);
void ConfigureBuilder(IServiceProvider serviceProvider, MeterProviderBuilder meterProviderBuilder);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// <copyright file="IProviderBuilder.cs" company="OpenTelemetry Authors">
// <copyright file="IMeterProviderBuilder.cs" company="OpenTelemetry Authors">
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -17,14 +17,13 @@
using System;
using Microsoft.Extensions.DependencyInjection;

namespace OpenTelemetry;
namespace OpenTelemetry.Metrics;

public interface IProviderBuilder<TProvider, TProviderBuilder>
where TProvider : BaseProvider
public interface IMeterProviderBuilder : IDeferredMeterProviderBuilder
{
TProvider? Provider { get; }
MeterProvider? Provider { get; }

TProviderBuilder ConfigureServices(Action<IServiceCollection> configure);
MeterProviderBuilder ConfigureServices(Action<IServiceCollection> configure);

TProviderBuilder ConfigureBuilder(Action<IServiceProvider, TProviderBuilder> configure);
MeterProviderBuilder ConfigureBuilder(Action<IServiceProvider, MeterProviderBuilder> configure);
}
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,10 @@ public static MeterProviderBuilder AddInstrumentation<T>(

meterProviderBuilder.ConfigureBuilder((sp, builder) =>
{
if (builder is IProviderBuilder<MeterProvider, MeterProviderBuilder> providerBuilder
&& providerBuilder.Provider != null)
if (builder is IMeterProviderBuilder iMeterProviderBuilder
&& iMeterProviderBuilder.Provider != null)
{
builder.AddInstrumentation(() => instrumentationFactory(sp, providerBuilder.Provider));
builder.AddInstrumentation(() => instrumentationFactory(sp, iMeterProviderBuilder.Provider));
}
});

Expand All @@ -111,9 +111,9 @@ public static MeterProviderBuilder ConfigureServices(
this MeterProviderBuilder meterProviderBuilder,
Action<IServiceCollection> configure)
{
if (meterProviderBuilder is IProviderBuilder<MeterProvider, MeterProviderBuilder> providerBuilder)
if (meterProviderBuilder is IMeterProviderBuilder iMeterProviderBuilder)
{
providerBuilder.ConfigureServices(configure);
iMeterProviderBuilder.ConfigureServices(configure);
}

return meterProviderBuilder;
Expand All @@ -131,11 +131,7 @@ public static MeterProviderBuilder ConfigureBuilder(
this MeterProviderBuilder meterProviderBuilder,
Action<IServiceProvider, MeterProviderBuilder> configure)
{
if (meterProviderBuilder is IProviderBuilder<MeterProvider, MeterProviderBuilder> providerBuilder)
{
providerBuilder.ConfigureBuilder(configure);
}
else if (meterProviderBuilder is IDeferredMeterProviderBuilder deferredMeterProviderBuilder)
if (meterProviderBuilder is IDeferredMeterProviderBuilder deferredMeterProviderBuilder)
{
deferredMeterProviderBuilder.Configure(configure);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,12 @@

using System;
using Microsoft.Extensions.DependencyInjection.Extensions;
using OpenTelemetry;
using OpenTelemetry.Internal;
using OpenTelemetry.Trace;

namespace Microsoft.Extensions.DependencyInjection;

public class DeferredTracerProviderBuilder : TracerProviderBuilder, IProviderBuilder<TracerProvider, TracerProviderBuilder>, IDeferredTracerProviderBuilder
public class DeferredTracerProviderBuilder : TracerProviderBuilder, ITracerProviderBuilder
{
public DeferredTracerProviderBuilder(IServiceCollection services)
{
Expand All @@ -36,7 +35,7 @@ public DeferredTracerProviderBuilder(IServiceCollection services)
}

/// <inheritdoc />
TracerProvider? IProviderBuilder<TracerProvider, TracerProviderBuilder>.Provider => null;
TracerProvider? ITracerProviderBuilder.Provider => null;

protected IServiceCollection? Services { get; set; }

Expand Down Expand Up @@ -82,8 +81,8 @@ public override TracerProviderBuilder AddLegacySource(string operationName)
/// <inheritdoc />
public TracerProviderBuilder ConfigureBuilder(Action<IServiceProvider, TracerProviderBuilder> configure)
{
this.ConfigureServices(services => services.AddSingleton<IConfigureProviderBuilder<TracerProvider, TracerProviderBuilder>>(
new ConfigureProviderBuilderCallbackWrapper<TracerProvider, TracerProviderBuilder>(configure)));
this.ConfigureServices(services => services.AddSingleton<IConfigureTracerProviderBuilder>(
new ConfigureTracerProviderBuilderCallbackWrapper(configure)));

return this;
}
Expand All @@ -108,4 +107,21 @@ public TracerProviderBuilder ConfigureServices(Action<IServiceCollection> config
/// <inheritdoc />
TracerProviderBuilder IDeferredTracerProviderBuilder.Configure(Action<IServiceProvider, TracerProviderBuilder> configure)
=> this.ConfigureBuilder(configure);

private sealed class ConfigureTracerProviderBuilderCallbackWrapper : IConfigureTracerProviderBuilder
{
private readonly Action<IServiceProvider, TracerProviderBuilder> configure;

public ConfigureTracerProviderBuilderCallbackWrapper(Action<IServiceProvider, TracerProviderBuilder> configure)
{
Guard.ThrowIfNull(configure);

this.configure = configure;
}

public void ConfigureBuilder(IServiceProvider serviceProvider, TracerProviderBuilder tracerProviderBuilder)
{
this.configure(serviceProvider, tracerProviderBuilder);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// <copyright file="IConfigureTracerProviderBuilder.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;

namespace OpenTelemetry.Trace;

public interface IConfigureTracerProviderBuilder
{
void ConfigureBuilder(IServiceProvider serviceProvider, TracerProviderBuilder tracerProviderBuilder);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// <copyright file="ITracerProviderBuilder.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 Microsoft.Extensions.DependencyInjection;

namespace OpenTelemetry.Trace;

public interface ITracerProviderBuilder : IDeferredTracerProviderBuilder
{
TracerProvider? Provider { get; }

TracerProviderBuilder ConfigureServices(Action<IServiceCollection> configure);

TracerProviderBuilder ConfigureBuilder(Action<IServiceProvider, TracerProviderBuilder> configure);
}
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,10 @@ public static TracerProviderBuilder AddInstrumentation<T>(

tracerProviderBuilder.ConfigureBuilder((sp, builder) =>
{
if (builder is IProviderBuilder<TracerProvider, TracerProviderBuilder> providerBuilder
&& providerBuilder.Provider != null)
if (tracerProviderBuilder is ITracerProviderBuilder iTracerProviderBuilder
&& iTracerProviderBuilder.Provider != null)
{
builder.AddInstrumentation(() => instrumentationFactory(sp, providerBuilder.Provider));
builder.AddInstrumentation(() => instrumentationFactory(sp, iTracerProviderBuilder.Provider));
}
});

Expand All @@ -111,9 +111,9 @@ public static TracerProviderBuilder ConfigureServices(
this TracerProviderBuilder tracerProviderBuilder,
Action<IServiceCollection> configure)
{
if (tracerProviderBuilder is IProviderBuilder<TracerProvider, TracerProviderBuilder> providerBuilder)
if (tracerProviderBuilder is ITracerProviderBuilder iTracerProviderBuilder)
{
providerBuilder.ConfigureServices(configure);
iTracerProviderBuilder.ConfigureServices(configure);
}

return tracerProviderBuilder;
Expand All @@ -131,11 +131,7 @@ public static TracerProviderBuilder ConfigureBuilder(
this TracerProviderBuilder tracerProviderBuilder,
Action<IServiceProvider, TracerProviderBuilder> configure)
{
if (tracerProviderBuilder is IProviderBuilder<TracerProvider, TracerProviderBuilder> providerBuilder)
{
providerBuilder.ConfigureBuilder(configure);
}
else if (tracerProviderBuilder is IDeferredTracerProviderBuilder deferredTracerProviderBuilder)
if (tracerProviderBuilder is IDeferredTracerProviderBuilder deferredTracerProviderBuilder)
{
deferredTracerProviderBuilder.Configure(configure);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ namespace OpenTelemetry.Metrics
/// <summary>
/// Stores state used to build a <see cref="MeterProvider"/>.
/// </summary>
internal sealed class MeterProviderBuilderSdk : MeterProviderBuilder, IProviderBuilder<MeterProvider, MeterProviderBuilder>, IDeferredMeterProviderBuilder
internal sealed class MeterProviderBuilderSdk : MeterProviderBuilder, IMeterProviderBuilder
{
public const int MaxMetricsDefault = 1000;
public const int MaxMetricPointsPerMetricDefault = 2000;
Expand Down
2 changes: 1 addition & 1 deletion src/OpenTelemetry/Metrics/MeterProviderSdk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ internal MeterProviderSdk(

OpenTelemetrySdkEventSource.Log.MeterProviderSdkEvent("Building MeterProvider.");

var configureProviderBuilders = serviceProvider.GetServices<IConfigureProviderBuilder<MeterProvider, MeterProviderBuilder>>();
var configureProviderBuilders = serviceProvider.GetServices<IConfigureMeterProviderBuilder>();
foreach (var configureProviderBuilder in configureProviderBuilders)
{
configureProviderBuilder.ConfigureBuilder(serviceProvider, state);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ namespace OpenTelemetry.Trace
/// <summary>
/// Stores state used to build a <see cref="TracerProvider"/>.
/// </summary>
internal sealed class TracerProviderBuilderSdk : TracerProviderBuilder, IProviderBuilder<TracerProvider, TracerProviderBuilder>, IDeferredTracerProviderBuilder
internal sealed class TracerProviderBuilderSdk : TracerProviderBuilder, ITracerProviderBuilder
{
private const string DefaultInstrumentationVersion = "1.0.0.0";

Expand Down
2 changes: 1 addition & 1 deletion src/OpenTelemetry/Trace/TracerProviderSdk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ internal TracerProviderSdk(

OpenTelemetrySdkEventSource.Log.TracerProviderSdkEvent("Building TracerProvider.");

var configureProviderBuilders = serviceProvider.GetServices<IConfigureProviderBuilder<TracerProvider, TracerProviderBuilder>>();
var configureProviderBuilders = serviceProvider.GetServices<IConfigureTracerProviderBuilder>();
foreach (var configureProviderBuilder in configureProviderBuilders)
{
configureProviderBuilder.ConfigureBuilder(serviceProvider, state);
Expand Down