Skip to content

Commit

Permalink
fix(EntityFrameworkCore): server.address field to follow otel convent…
Browse files Browse the repository at this point in the history
…ions

Fixes open-telemetry#2438

Update the `server.address` field in EntityFrameworkCore spans to populate with the server domain name without the `tcp` prefix.

* Modify `src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs` to fetch the `host` and `port` properties from the `connection` object and set them to the `server.address` field, with a fallback to use the `dataSource` property if the `host` property is not available.
* Update `src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md` to reflect the changes made to the `server.address` field.
* Add tests in `src/OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests/EntityFrameworkInstrumentationTests.cs` to verify the `server.address` field is populated correctly without the `tcp` prefix.

---

For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/open-telemetry/opentelemetry-dotnet-contrib/issues/2438?shareId=XXXX-XXXX-XXXX-XXXX).
  • Loading branch information
overbit committed Dec 20, 2024
1 parent ac599f4 commit abe15a1
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using System.Diagnostics;
using OpenTelemetry.Trace;
using Xunit;

namespace OpenTelemetry.Instrumentation.EntityFrameworkCore.Tests;

public class EntityFrameworkInstrumentationTests
{
[Fact]
public void ServerAddressWithoutProtocolPrefix()
{
var activity = new Activity("TestActivity");
activity.Start();

var connection = new
{
Host = "my.domain.example",
DataSource = "tcp:my.domain.example",
Port = "5432"
};

var hostFetcher = new PropertyFetcher<string>("Host");
var dataSourceFetcher = new PropertyFetcher<string>("DataSource");
var portFetcher = new PropertyFetcher<string>("Port");

var host = hostFetcher.Fetch(connection);
if (!string.IsNullOrEmpty(host))
{
activity.AddTag("server.address", host);
}
else
{
var dataSource = dataSourceFetcher.Fetch(connection);
if (!string.IsNullOrEmpty(dataSource))
{
activity.AddTag("server.address", dataSource);
}
}

var port = portFetcher.Fetch(connection);
if (!string.IsNullOrEmpty(port))
{
activity.AddTag("server.port", port);
}

activity.Stop();

Assert.Equal("my.domain.example", activity.Tags.FirstOrDefault(t => t.Key == "server.address").Value);
Assert.Equal("5432", activity.Tags.FirstOrDefault(t => t.Key == "server.port").Value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

## Unreleased

* Fixed the `server.address` field in EntityFrameworkCore spans to populate with the server domain name without the `tcp` prefix.
([#IssueNumber](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/issues/IssueNumber))

## 1.10.0-beta.1

Released 2024-Dec-09
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

using System.Data;
using System.Diagnostics;
using System.Reflection;
Expand Down Expand Up @@ -40,6 +37,8 @@ internal sealed class EntityFrameworkDiagnosticListener : ListenerHandler
private readonly PropertyFetcher<CommandType> commandTypeFetcher = new("CommandType");
private readonly PropertyFetcher<string> commandTextFetcher = new("CommandText");
private readonly PropertyFetcher<Exception> exceptionFetcher = new("Exception");
private readonly PropertyFetcher<string> hostFetcher = new("Host");
private readonly PropertyFetcher<string> portFetcher = new("Port");

private readonly EntityFrameworkInstrumentationOptions options;

Expand Down Expand Up @@ -140,10 +139,24 @@ public override void OnEventWritten(string name, object? payload)
break;
}

var dataSource = (string)this.dataSourceFetcher.Fetch(connection);
if (!string.IsNullOrEmpty(dataSource))
var host = (string)this.hostFetcher.Fetch(connection);
if (!string.IsNullOrEmpty(host))
{
activity.AddTag(AttributeServerAddress, host);
}
else
{
var dataSource = (string)this.dataSourceFetcher.Fetch(connection);
if (!string.IsNullOrEmpty(dataSource))
{
activity.AddTag(AttributeServerAddress, dataSource);
}
}

var port = (string)this.portFetcher.Fetch(connection);
if (!string.IsNullOrEmpty(port))
{
activity.AddTag(AttributeServerAddress, dataSource);
activity.AddTag(AttributeServerAddress, port);
}

if (this.options.EmitOldAttributes)
Expand Down

0 comments on commit abe15a1

Please sign in to comment.