Skip to content

Commit

Permalink
Expand ADO.NET instrumentation (DbCommand, SqlCommand) (DataDog#516)
Browse files Browse the repository at this point in the history
* rewrite SqlServer sample app

* clean up code

* clean up AdoNetIntegration

* add new SqlClientIntegration

* intercept more method calls in AdoNetIntegration

* make StyleCop allow custom ordering in integrations

* clean up xml-doc comments, add missing ones

* add Samples.DbCommand project

* fix SqlServerTests, add DbCommandTests

* fix bad merge

* run DbCommand integration tests

* fix build for netcoreapp3.0

* rename Samples.SqlServer to Samples.SqlCommand everywhere

* fix target type

* refactor ExecuteReader() overloads

* fix filters

* rename method

* set project dependencies so managed profiler assembly is built when building samples in VS

* refactor common logic in db tests into Samples.DatabaseHelper project

* fix sample env vars

* sleep for a short time between sync and async method calls

* override target method name

* fix signature

* fix target signature

Co-Authored-By: Zach Montoya <zach.montoya@datadoghq.com>

* group ado.net tests into their own folder

* regenerate integrations and package version files

* fix span counts and filter by operation name

* fix timezone bug that caused tests to fail in Paris

* rename test harness class

* remove Samples.DbCommand and DbCommandTests, rename Samples.SqlCommand to Samples.SqlServer

* update package versions

* delete unused file

* refactor creating new connections

* allow skipping some callbacks

* refactor MySql and Npgsql integrations to use the new db test hardness

* add new integration tests for MySql and Npgsql

* add assertions for DbType tag

* missed a few renames from Samples.SqlCommand to Samples.SqlServer

* remove Samples.DbCommand from docker-compose and scripts

* move AdoNet files into their own directory

* fix namespaces

* rename AdoNetIntegration to DbCommandIntegration

* fix package name

Co-Authored-By: Zach Montoya <zach.montoya@datadoghq.com>

* remove "RunOnWindows" trait

* RunOnWindows

* fix sample name

Co-Authored-By: Zach Montoya <zach.montoya@datadoghq.com>

* add comment

* delete file that was moved into the AdoNet folder

* build Samples.MySql before running tests

* test single version of MySql client for now

* fix errors from bad merge

* update sql server docker image

* update comment

* add more tags to manual spans

* add a root span for the entire sample execution

* fix span names, assert on expected span count

* sign into default sql server database

* run Npgsql (PostgreSQL) test only on single library version until we have a proper integration (like MySQL)

* fix default database name

* refactor tests to use more constants and fix copy/paste mistakes

* change query to work in PostgreSQL

* use correct MySql database name

* skip the new MySQL tests for now
  • Loading branch information
lucaspimentel authored Oct 17, 2019
1 parent c8bd7f7 commit 56dd206
Show file tree
Hide file tree
Showing 28 changed files with 2,578 additions and 878 deletions.
20 changes: 20 additions & 0 deletions Datadog.Trace.sln
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
integrations.json = integrations.json
LICENSE = LICENSE
LICENSE-3rdparty.csv = LICENSE-3rdparty.csv
PackageVersionsGeneratorDefinitions.json = PackageVersionsGeneratorDefinitions.json
docs\README.md = docs\README.md
stylecop.json = stylecop.json
EndProjectSection
Expand Down Expand Up @@ -114,6 +115,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Datadog.Trace.ClrProfiler.I
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.SqlServer", "samples\Samples.SqlServer\Samples.SqlServer.csproj", "{086FF8A0-9CEE-470A-9751-78B0F1340649}"
ProjectSection(ProjectDependencies) = postProject
{C0C8D381-D6B9-4C76-9428-F40F2FA93A9A} = {C0C8D381-D6B9-4C76-9428-F40F2FA93A9A}
{85F35AAF-D102-4960-8B41-3BD9CBD0E77F} = {85F35AAF-D102-4960-8B41-3BD9CBD0E77F}
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.Elasticsearch", "samples\Samples.Elasticsearch\Samples.Elasticsearch.csproj", "{C98950B1-DC4B-43DA-974F-EF2CF325EC2B}"
ProjectSection(ProjectDependencies) = postProject
Expand Down Expand Up @@ -251,6 +256,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.WcfClient", "sample
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.Elasticsearch.MultipleAppDomains", "samples\Samples.Elasticsearch.MultipleAppDomains\Samples.Elasticsearch.MultipleAppDomains.csproj", "{48283691-0D4B-4ABD-B75B-EDFC682E1547}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.DatabaseHelper", "sample-libs\Samples.DatabaseHelper\Samples.DatabaseHelper.csproj", "{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UpdateVendors", "tools\UpdateVendors\UpdateVendors.csproj", "{72FB583A-A1B0-4B5F-8658-617B100DCD8E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SynchronizeInstaller", "tools\SynchronizeInstaller\SynchronizeInstaller.csproj", "{EBDDF6D7-59B8-4831-80C6-458C1ABBFC63}"
Expand Down Expand Up @@ -815,6 +822,18 @@ Global
{48283691-0D4B-4ABD-B75B-EDFC682E1547}.Release|x64.Build.0 = Release|x64
{48283691-0D4B-4ABD-B75B-EDFC682E1547}.Release|x86.ActiveCfg = Release|x86
{48283691-0D4B-4ABD-B75B-EDFC682E1547}.Release|x86.Build.0 = Release|x86
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Debug|x64.ActiveCfg = Debug|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Debug|x64.Build.0 = Debug|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Debug|x86.ActiveCfg = Debug|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Debug|x86.Build.0 = Debug|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Release|Any CPU.Build.0 = Release|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Release|x64.ActiveCfg = Release|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Release|x64.Build.0 = Release|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Release|x86.ActiveCfg = Release|Any CPU
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D}.Release|x86.Build.0 = Release|Any CPU
{72FB583A-A1B0-4B5F-8658-617B100DCD8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{72FB583A-A1B0-4B5F-8658-617B100DCD8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{72FB583A-A1B0-4B5F-8658-617B100DCD8E}.Debug|x64.ActiveCfg = Debug|Any CPU
Expand Down Expand Up @@ -897,6 +916,7 @@ Global
{E1706893-D3A5-43B9-9036-AEF49DB9600B} = {550AE553-2BBB-4021-B55A-137EF31A6B1F}
{21D420EB-06D0-489D-A71C-C748BB46B8EF} = {AA6F5582-3B71-49AC-AA39-8F7815AC46BE}
{48283691-0D4B-4ABD-B75B-EDFC682E1547} = {AA6F5582-3B71-49AC-AA39-8F7815AC46BE}
{472DBA92-4FEA-4B9A-BA70-0E97B942E12D} = {FA03944C-2391-4C25-8979-2E078A8CE0DD}
{72FB583A-A1B0-4B5F-8658-617B100DCD8E} = {5D8E1F81-B820-4736-B797-271B0FE787EE}
{EBDDF6D7-59B8-4831-80C6-458C1ABBFC63} = {5D8E1F81-B820-4736-B797-271B0FE787EE}
EndGlobalSection
Expand Down
43 changes: 17 additions & 26 deletions PackageVersions.g.props
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,9 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
<PackageVersionSample Include="samples*\**\Samples.Elasticsearch.csproj">
<Properties>ApiVersion=6.8.2;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.Elasticsearch.csproj">
<Properties>ApiVersion=6.8.3;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.Elasticsearch.V5.csproj">
<Properties>ApiVersion=5.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
Expand Down Expand Up @@ -219,56 +222,44 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
<PackageVersionSample Include="samples*\**\Samples.Npgsql.csproj">
<Properties>ApiVersion=4.1.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.0.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.0.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.0.2;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.0.3;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.1.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<PackageVersionSample Include="samples*\**\Samples.Npgsql.csproj">
<Properties>ApiVersion=4.1.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.1.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.1.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.1.2;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.1.3;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.3.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.1.4;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.4.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.1.8;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.4.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.1.11;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.4.2;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.2.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.4.3;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.2.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.5.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.2.2;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.5.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.2.3;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.6.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.2.4;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.6.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.SqlServer.csproj">
<Properties>ApiVersion=2.2.6;RestoreRecursive=false;BuildProjectReferences=false</Properties>
<Properties>ApiVersion=4.7.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
</PackageVersionSample>
<PackageVersionSample Include="samples*\**\Samples.StackExchange.Redis.csproj">
<Properties>ApiVersion=1.0.187;RestoreRecursive=false;BuildProjectReferences=false</Properties>
Expand Down
8 changes: 4 additions & 4 deletions PackageVersionsGeneratorDefinitions.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@
"MaxVersionExclusive": "5.0.0"
},
{
"IntegrationName": "SqlServer",
"IntegrationName": "SqlClient",
"SampleProjectName": "Samples.SqlServer",
"NugetPackageSearchName": "Microsoft.EntityFrameworkCore.SqlServer",
"MinVersion": "2.0.0",
"MaxVersionExclusive": "3.0.0"
"NugetPackageSearchName": "System.Data.SqlClient",
"MinVersion": "4.1.0",
"MaxVersionExclusive": "5.0.0"
},
{
"IntegrationName": "StackExchangeRedis",
Expand Down
10 changes: 5 additions & 5 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ services:
- "127.0.0.1:3306:3306"

sqlserver:
image: microsoft/mssql-server-linux:latest
image: mcr.microsoft.com/mssql/server:latest
ports:
- "127.0.0.1:1433:1433"
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=Strong!Passw0rd

wcfservice:
image: mcr.microsoft.com/dotnet/framework/wcf:4.8
ports:
Expand Down Expand Up @@ -158,7 +158,7 @@ services:
volumes:
- ./:/project
environment:
- SQLSERVER_CONNECTION_STRING=Server=sqlserver;Database=BlogDatabase;User=sa;Password=Strong!Passw0rd
- SQLSERVER_CONNECTION_STRING=Server=sqlserver;User=sa;Password=Strong!Passw0rd
depends_on:
- sqlserver

Expand All @@ -174,7 +174,7 @@ services:
- POSTGRES_HOST=postgres
depends_on:
- postgres

Samples.MySql:
build:
context: ./
Expand Down Expand Up @@ -213,7 +213,7 @@ services:
- STACKEXCHANGE_REDIS_HOST=stackexchangeredis:6379
- ELASTICSEARCH6_HOST=elasticsearch6:9200
- ELASTICSEARCH5_HOST=elasticsearch5:9200
- SQLSERVER_CONNECTION_STRING=Server=sqlserver;Database=BlogDatabase;User=sa;Password=Strong!Passw0rd
- SQLSERVER_CONNECTION_STRING=Server=sqlserver;User=sa;Password=Strong!Passw0rd
- POSTGRES_HOST=postgres
- MYSQL_HOST=mysql
- buildConfiguration=${buildConfiguration:-Debug}
Expand Down
2 changes: 1 addition & 1 deletion docker/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ then
dotnet publish -f $publishTargetFramework -c $buildConfiguration samples/Samples.AspNetCoreMvc2/Samples.AspNetCoreMvc2.csproj -p:Configuration=$buildConfiguration -p:ManagedProfilerOutputDirectory="$PUBLISH_OUTPUT"
fi

for sample in Samples.Elasticsearch Samples.Elasticsearch.V5 Samples.ServiceStack.Redis Samples.StackExchange.Redis Samples.SqlServer Samples.MongoDB Samples.HttpMessageHandler Samples.Npgsql Samples.GraphQL ; do
for sample in Samples.Elasticsearch Samples.Elasticsearch.V5 Samples.ServiceStack.Redis Samples.StackExchange.Redis Samples.SqlServer Samples.MongoDB Samples.HttpMessageHandler Samples.Npgsql Samples.MySql Samples.GraphQL ; do
dotnet publish -f $publishTargetFramework -c $buildConfiguration samples/$sample/$sample.csproj -p:Configuration=$buildConfiguration -p:ManagedProfilerOutputDirectory="$PUBLISH_OUTPUT"
done

Expand Down
Loading

0 comments on commit 56dd206

Please sign in to comment.