From 7b66dc50330c29b49f0c384bf8c30669f026d3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Jankovi=C4=87?= Date: Wed, 15 Jan 2025 17:32:29 +0100 Subject: [PATCH 1/6] Fix db.statement tag for Devart Oracle --- .../EntityFrameworkDiagnosticListener.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs index 509402f807..c317015b7a 100644 --- a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs +++ b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs @@ -199,7 +199,20 @@ public override void OnEventWritten(string name, object? payload) return; } - if (this.commandTypeFetcher.Fetch(command) is CommandType commandType) + if (command.GetType().FullName?.Contains("Devart.Data.Oracle") == true) + { + string payloadString = payload?.ToString() ?? string.Empty; + if ((payloadString.Contains("CommandType='Text'") && this.options.SetDbStatementForText) || + (payloadString.Contains("CommandType='StoredProcedure'") && this.options.SetDbStatementForStoredProcedure)) + { + string[] result = payloadString.Split("\r\n", count: 2); + if (result.Length > 1) + { + activity.AddTag(AttributeDbStatement, result[1]); + } + } + } + else if (this.commandTypeFetcher.Fetch(command) is CommandType commandType) { var commandText = this.commandTextFetcher.Fetch(command); switch (commandType) From f455d86bc5700d84ec6704ff598b082889a2d454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Jankovi=C4=87?= Date: Wed, 15 Jan 2025 17:50:38 +0100 Subject: [PATCH 2/6] Update CHANGELOG.md --- .../CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md index c2510f474b..7b4b5d668d 100644 --- a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md +++ b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +* Added code to fix exception thrown when Devart Oracle is used +(`this.commandTypeFetcher.Fetch(command)`). If Devart Oracle is used, +the SQL statement will be extracted from the payload. +([#2466](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2466)) + ## 1.10.0-beta.1 Released 2024-Dec-09 From 6e5257891136789d7b8174cc884c889cda4fa462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Jankovi=C4=87?= Date: Wed, 15 Jan 2025 17:52:27 +0100 Subject: [PATCH 3/6] Fix error --- .../Implementation/EntityFrameworkDiagnosticListener.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs index c317015b7a..6002bcbf2a 100644 --- a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs +++ b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs @@ -205,7 +205,7 @@ public override void OnEventWritten(string name, object? payload) if ((payloadString.Contains("CommandType='Text'") && this.options.SetDbStatementForText) || (payloadString.Contains("CommandType='StoredProcedure'") && this.options.SetDbStatementForStoredProcedure)) { - string[] result = payloadString.Split("\r\n", count: 2); + string[] result = payloadString.Split(['\n'], 2); if (result.Length > 1) { activity.AddTag(AttributeDbStatement, result[1]); From b2ea7d80f50da8a777457db78f3ba36f567fa314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Jankovi=C4=87?= Date: Thu, 16 Jan 2025 10:49:04 +0100 Subject: [PATCH 4/6] Update CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Piotr Kiełkowicz --- .../CHANGELOG.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md index 098d51c444..9cf74da7e0 100644 --- a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md +++ b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md @@ -9,10 +9,9 @@ `Devart.Data.Oracle.Entity.EFCore` is used a provider. ([#2465](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2465)) -* Added code to fix exception thrown when Devart Oracle is used -(`this.commandTypeFetcher.Fetch(command)`). If Devart Oracle is used, -the SQL statement will be extracted from the payload. -([#2466](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2466)) +* Correctly report `db.statement`/`db.query.text` when + Devart Oracle is used as a provider. + ([#2466](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2466)) ## 1.10.0-beta.1 From 73b092124161f024ad7cd9d75dbc2b47e7cea388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Jankovi=C4=87?= Date: Thu, 16 Jan 2025 12:02:36 +0100 Subject: [PATCH 5/6] Fix lint --- .../CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md index 9cf74da7e0..10b1a56255 100644 --- a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md +++ b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/CHANGELOG.md @@ -8,7 +8,7 @@ * Attribute `db.system` reports `oracle` when `Devart.Data.Oracle.Entity.EFCore` is used a provider. ([#2465](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2465)) - + * Correctly report `db.statement`/`db.query.text` when Devart Oracle is used as a provider. ([#2466](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2466)) From 3369e1bdc92f695f09ef077d49314b4b4b880f32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Jankovi=C4=87?= Date: Thu, 16 Jan 2025 12:05:53 +0100 Subject: [PATCH 6/6] Update code to support both emitting old and new attributes --- .../EntityFrameworkDiagnosticListener.cs | 40 ++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs index 0b24c684d6..26eb87b993 100644 --- a/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs +++ b/src/OpenTelemetry.Instrumentation.EntityFrameworkCore/Implementation/EntityFrameworkDiagnosticListener.cs @@ -203,15 +203,45 @@ public override void OnEventWritten(string name, object? payload) if (command.GetType().FullName?.Contains("Devart.Data.Oracle") == true) { string payloadString = payload?.ToString() ?? string.Empty; - if ((payloadString.Contains("CommandType='Text'") && this.options.SetDbStatementForText) || - (payloadString.Contains("CommandType='StoredProcedure'") && this.options.SetDbStatementForStoredProcedure)) + string[] result = payloadString.Split([Environment.NewLine], 2, StringSplitOptions.None); + string commandText = result.Length > 1 ? result[1] : payloadString; + + if (payloadString.Contains("CommandType='Text'")) + { + if (this.options.SetDbStatementForText) + { + if (this.options.EmitOldAttributes) + { + activity.AddTag(AttributeDbStatement, commandText); + } + + if (this.options.EmitNewAttributes) + { + activity.AddTag(AttributeDbQueryText, commandText); + } + } + } + else if (payloadString.Contains("CommandType='StoredProcedure'")) { - string[] result = payloadString.Split(['\n'], 2); - if (result.Length > 1) + if (this.options.SetDbStatementForText) { - activity.AddTag(AttributeDbStatement, result[1]); + if (this.options.EmitOldAttributes) + { + activity.AddTag(AttributeDbStatement, commandText); + } + + if (this.options.EmitNewAttributes) + { + activity.AddTag(AttributeDbQueryText, commandText); + } } } + else if (payloadString.Contains("CommandType='TableDirect'")) + { + } + else + { + } } else if (this.commandTypeFetcher.Fetch(command) is CommandType commandType) {