Created
October 30, 2022 19:48
-
-
Save martinjt/50fc363d995f443633bae8b6fc869eed to your computer and use it in GitHub Desktop.
BenchmarkDotNet Tests for OpenTelemetry/Activity
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Diagnostics; | |
using BenchmarkDotNet.Attributes; | |
using OpenTelemetry; | |
using OpenTelemetry.Trace; | |
public class OpenTelemetryTests | |
{ | |
private readonly Dictionary<string, string> _dictionary = new(); | |
private readonly ActivitySource _source = new("DummyTest"); | |
public OpenTelemetryTests() | |
{ | |
_dictionary = new Dictionary<string, string> { | |
{ "blah", "blah" }, | |
{ "blah1", "blah" } | |
}; | |
} | |
private TracerProvider? _tracerProvider; | |
[GlobalSetup(Target = nameof(WithActivityAndOpenTelemetry))] | |
public void SetupOpenTelemetry() | |
{ | |
_tracerProvider = Sdk.CreateTracerProviderBuilder() | |
.AddSource(_source.Name) | |
.Build(); | |
} | |
[GlobalSetup(Target = nameof(WithActivityAndOpenTelemetryAndAlwaysSampledOn))] | |
public void SetupOpenTelemetryWithAlwaysOnSampler() | |
{ | |
_tracerProvider = Sdk.CreateTracerProviderBuilder() | |
.AddSource(_source.Name) | |
.SetSampler(new AlwaysOnSampler()) | |
.Build(); | |
} | |
[GlobalSetup(Target = nameof(WithActivityAndOpenTelemetryWithAddAttributeProcessor))] | |
public void SetupOpenTelemetryWithAddAttributeProcessor() | |
{ | |
_tracerProvider = Sdk.CreateTracerProviderBuilder() | |
.AddSource(_source.Name) | |
.SetSampler(new AlwaysOnSampler()) | |
.AddProcessor(new AddAttributeProcessor()) | |
.Build(); | |
} | |
[GlobalCleanup] | |
public void DisposeTracerProvider() => _tracerProvider?.Dispose(); | |
[Benchmark] | |
public void WithoutActivity() | |
{ | |
var item = InternalTest(); | |
} | |
[Benchmark] | |
public void WithActivity() | |
{ | |
using var activity = _source.StartActivity("WithActivity"); | |
var item = InternalTest(); | |
} | |
[Benchmark] | |
public void WithActivityAndAttributes() => BasicMethodWithActivity(); | |
[Benchmark] | |
public void WithActivityAndOpenTelemetry() => BasicMethodWithActivity(); | |
[Benchmark] | |
public void WithActivityAndOpenTelemetryAndAlwaysSampledOn() => BasicMethodWithActivity(); | |
[Benchmark] | |
public void WithActivityAndOpenTelemetryWithAddAttributeProcessor() => BasicMethodWithActivity(); | |
private void BasicMethodWithActivity() | |
{ | |
using var activity = _source.StartActivity("WithActivity"); | |
var item = InternalTest(); | |
activity?.SetTag("dictionary.item", item); | |
} | |
private string InternalTest() | |
{ | |
if (_dictionary.ContainsKey("blah")) | |
return _dictionary["blah"]; | |
return ""; | |
} | |
} | |
public class AddAttributeProcessor : BaseProcessor<Activity> | |
{ | |
public override void OnStart(Activity data) | |
{ | |
data?.SetTag("blah", true); | |
base.OnStart(data!); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment