diff --git a/.github/ISSUE_TEMPLATE/comp_resourcedetectors_process.md b/.github/ISSUE_TEMPLATE/comp_resourcedetectors_process.md
new file mode 100644
index 0000000000..b085c90e45
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/comp_resourcedetectors_process.md
@@ -0,0 +1,41 @@
+---
+name: OpenTelemetry.ResourceDetectors.Process
+about: OpenTelemetry.ResourceDetectors.Process
+labels: comp:resourcedetectors.process
+---
+
+# Issue with OpenTelemetry.ResourceDetectors.Process
+
+List of [all OpenTelemetry NuGet
+packages](https://www.nuget.org/profiles/OpenTelemetry) and version that you are
+using (e.g. `OpenTelemetry 1.3.2`):
+
+* TBD
+
+Runtime version (e.g. `net462`, `net48`, `net6.0`, `net7.0` etc. You can
+find this information from the `*.csproj` file):
+
+* TBD
+
+**Is this a feature request or a bug?**
+
+* [ ] Feature Request
+* [ ] Bug
+
+**What is the expected behavior?**
+
+What do you expect to see?
+
+**What is the actual behavior?**
+
+What did you see instead? If you are reporting a bug, create a self-contained
+project using the template of your choice and apply the minimum required code to
+result in the issue you're observing. We will close this issue if:
+
+* The repro project you share with us is complex. We can't investigate custom
+ projects, so don't point us to such, please.
+* If we can not reproduce the behavior you're reporting.
+
+## Additional Context
+
+Add any other context about the feature request here.
diff --git a/.github/codecov.yml b/.github/codecov.yml
index 28e08db161..9e592ee5fe 100644
--- a/.github/codecov.yml
+++ b/.github/codecov.yml
@@ -99,6 +99,11 @@ flags:
paths:
- src/OpenTelemetry.ResourceDetectors.Azure
+ unittests-ResourceDetectors.Process:
+ carryforward: true
+ paths:
+ - src/OpenTelemetry.ResourceDetectors.Process
+
unittests-ResourceDetectors.ProcessRuntime:
carryforward: true
paths:
diff --git a/.github/component_owners.yml b/.github/component_owners.yml
index ba09d34efb..0477e2a34d 100644
--- a/.github/component_owners.yml
+++ b/.github/component_owners.yml
@@ -65,6 +65,9 @@ components:
- vishweshbankwar
src/OpenTelemetry.ResourceDetectors.Container/:
- iskiselev
+ src/OpenTelemetry.ResourceDetectors.Process/:
+ - Kielek
+ - lachmatt
src/OpenTelemetry.ResourceDetectors.ProcessRuntime/:
- Kielek
- lachmatt
@@ -144,6 +147,9 @@ components:
- vishweshbankwar
test/OpenTelemetry.ResourceDetectors.Container.Tests/:
- iskiselev
+ test/OpenTelemetry.ResourceDetectors.Process.Tests/:
+ - Kielek
+ - lachmatt
test/OpenTelemetry.ResourceDetectors.ProcessRuntime.Tests/:
- Kielek
- lachmatt
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 67e3c9a685..58b0d167e8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -31,7 +31,8 @@ jobs:
owin: ['*/OpenTelemetry.Instrumentation.Owin*/**', 'examples/owin/**', '!**/*.md']
persistentstorage: ['*/OpenTelemetry.PersistentStorage*/**', '!**/*.md']
process: ['*/OpenTelemetry.Instrumentation.Process*/**', 'examples/process-instrumentation/**', '!**/*.md']
- processruntime: ['*/OpenTelemetry.ResourceDetectors.ProcessRuntime*/**', '!**/*.md']
+ processdetector: ['*/OpenTelemetry.ResourceDetectors.Process/**', '*/OpenTelemetry.ResourceDetectors.Process.Tests/**', '!**/*.md']
+ processruntime: ['*/OpenTelemetry.ResourceDetectors.ProcessRuntime/**', '*/OpenTelemetry.ResourceDetectors.ProcessRuntime.Tests/**', '!**/*.md']
redis: ['*/OpenTelemetry.Instrumentation.StackExchangeRedis*/**', 'examples/redis/**', '!**/*.md']
runtime: ['*/OpenTelemetry.Instrumentation.Runtime*/**', 'examples/runtime-instrumentation/**', '!**/*.md']
wcf: ['*/OpenTelemetry.Instrumentation.Wcf*/**', 'examples/wcf/**', '!**/*.md']
@@ -43,7 +44,10 @@ jobs:
'!*/OpenTelemetry.Instrumentation.AspNet*/**',
'!examples/AspNet/**',
'!*/OpenTelemetry.ResourceDetectors.Azure*/**',
- '!*/OpenTelemetry.ResourceDetectors.ProcessRuntime*/**',
+ '!*/OpenTelemetry.ResourceDetectors.Process/**',
+ '!*/OpenTelemetry.ResourceDetectors.Process.Tests/**',
+ '!*/OpenTelemetry.ResourceDetectors.ProcessRuntime/**',
+ '!*/OpenTelemetry.ResourceDetectors.ProcessRuntime.Tests/**',
'!*/OpenTelemetry.Instrumentation.EventCounters*/**',
'!examples/event-counters/**',
'!*/OpenTelemetry.Extensions/**',
@@ -178,6 +182,17 @@ jobs:
project-name: OpenTelemetry.Instrumentation.Process
code-cov-name: Instrumentation.Process
+ build-test-processdetector:
+ needs: detect-changes
+ if: |
+ contains(needs.detect-changes.outputs.changes, 'processdetector')
+ || contains(needs.detect-changes.outputs.changes, 'build')
+ || contains(needs.detect-changes.outputs.changes, 'shared')
+ uses: ./.github/workflows/Component.BuildTest.yml
+ with:
+ project-name: OpenTelemetry.ResourceDetectors.Process
+ code-cov-name: ResourceDetectors.Process
+
build-test-processruntime:
needs: detect-changes
if: |
@@ -272,6 +287,7 @@ jobs:
OpenTelemetry.Instrumentation.Wcf.Tests.csproj,
OpenTelemetry.PersistentStorage.FileSystem.Tests.csproj,
OpenTelemetry.ResourceDetectors.Azure.Tests.csproj,
+ OpenTelemetry.ResourceDetectors.Process.Tests.csproj,
OpenTelemetry.ResourceDetectors.ProcessRuntime.Tests.csproj
$failedProjects = @()
@@ -314,6 +330,7 @@ jobs:
contains(needs.detect-changes.outputs.changes, 'eventcounters')
|| contains(needs.detect-changes.outputs.changes, 'runtime')
|| contains(needs.detect-changes.outputs.changes, 'azure')
+ || contains(needs.detect-changes.outputs.changes, 'processdetector')
|| contains(needs.detect-changes.outputs.changes, 'processruntime')
|| contains(needs.detect-changes.outputs.changes, 'aottestapp')
|| contains(needs.detect-changes.outputs.changes, 'build')
@@ -336,6 +353,7 @@ jobs:
build-test-owin,
build-test-persistentstorage,
build-test-process,
+ build-test-processdetector,
build-test-processruntime,
build-test-redis,
build-test-redis-integration,
diff --git a/.github/workflows/package-ResourceDetectors.Process.yml b/.github/workflows/package-ResourceDetectors.Process.yml
new file mode 100644
index 0000000000..874054383d
--- /dev/null
+++ b/.github/workflows/package-ResourceDetectors.Process.yml
@@ -0,0 +1,21 @@
+name: Pack OpenTelemetry.ResourceDetectors.Process
+
+on:
+ workflow_dispatch:
+ inputs:
+ logLevel:
+ description: 'Log level'
+ required: true
+ default: 'warning'
+ push:
+ tags:
+ - 'ResourceDetectors.Process-*' # trigger when we create a tag with prefix "ResourceDetectors.Process-"
+
+jobs:
+ call-build-test-pack:
+ permissions:
+ contents: write
+ uses: ./.github/workflows/Component.Package.yml
+ with:
+ project-name: OpenTelemetry.ResourceDetectors.Process
+ secrets: inherit
diff --git a/build/Projects/OpenTelemetry.ResourceDetectors.Process.proj b/build/Projects/OpenTelemetry.ResourceDetectors.Process.proj
new file mode 100644
index 0000000000..032a74930c
--- /dev/null
+++ b/build/Projects/OpenTelemetry.ResourceDetectors.Process.proj
@@ -0,0 +1,32 @@
+
+
+
+ $([System.IO.Directory]::GetParent($(MSBuildThisFileDirectory)).Parent.Parent.FullName)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/opentelemetry-dotnet-contrib.sln b/opentelemetry-dotnet-contrib.sln
index 1c749e3975..807e8f14d4 100644
--- a/opentelemetry-dotnet-contrib.sln
+++ b/opentelemetry-dotnet-contrib.sln
@@ -67,6 +67,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{
.github\workflows\package-ResourceDetectors.AWS.yml = .github\workflows\package-ResourceDetectors.AWS.yml
.github\workflows\package-ResourceDetectors.Azure.yml = .github\workflows\package-ResourceDetectors.Azure.yml
.github\workflows\package-ResourceDetectors.Container.yml = .github\workflows\package-ResourceDetectors.Container.yml
+ .github\workflows\package-ResourceDetectors.Process.yml = .github\workflows\package-ResourceDetectors.Process.yml
.github\workflows\package-ResourceDetectors.ProcessRuntime.yml = .github\workflows\package-ResourceDetectors.ProcessRuntime.yml
.github\workflows\package-Sampler.AWS.yml = .github\workflows\package-Sampler.AWS.yml
.github\workflows\sanitycheck.yml = .github\workflows\sanitycheck.yml
@@ -322,6 +323,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projects", "Projects", "{04
build\Projects\OpenTelemetry.Instrumentation.Wcf.proj = build\Projects\OpenTelemetry.Instrumentation.Wcf.proj
build\Projects\OpenTelemetry.PersistentStorage.proj = build\Projects\OpenTelemetry.PersistentStorage.proj
build\Projects\OpenTelemetry.ResourceDetectors.Azure.proj = build\Projects\OpenTelemetry.ResourceDetectors.Azure.proj
+ build\Projects\OpenTelemetry.ResourceDetectors.Process.proj = build\Projects\OpenTelemetry.ResourceDetectors.Process.proj
build\Projects\OpenTelemetry.ResourceDetectors.ProcessRuntime.proj = build\Projects\OpenTelemetry.ResourceDetectors.ProcessRuntime.proj
EndProjectSection
EndProject
@@ -329,6 +331,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.ResourceDetec
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.ResourceDetectors.ProcessRuntime.Tests", "test\OpenTelemetry.ResourceDetectors.ProcessRuntime.Tests\OpenTelemetry.ResourceDetectors.ProcessRuntime.Tests.csproj", "{B6157646-8EBA-464C-99B9-C386D474CB12}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.ResourceDetectors.Process", "src\OpenTelemetry.ResourceDetectors.Process\OpenTelemetry.ResourceDetectors.Process.csproj", "{A5FCDD8F-20FF-4657-804E-707EAD4FE31D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.ResourceDetectors.Process.Tests", "test\OpenTelemetry.ResourceDetectors.Process.Tests\OpenTelemetry.ResourceDetectors.Process.Tests.csproj", "{A5EF701C-439E-407F-8BB4-394166000C6D}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -655,6 +661,14 @@ Global
{B6157646-8EBA-464C-99B9-C386D474CB12}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B6157646-8EBA-464C-99B9-C386D474CB12}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B6157646-8EBA-464C-99B9-C386D474CB12}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A5FCDD8F-20FF-4657-804E-707EAD4FE31D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A5FCDD8F-20FF-4657-804E-707EAD4FE31D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A5FCDD8F-20FF-4657-804E-707EAD4FE31D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A5FCDD8F-20FF-4657-804E-707EAD4FE31D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A5EF701C-439E-407F-8BB4-394166000C6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A5EF701C-439E-407F-8BB4-394166000C6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A5EF701C-439E-407F-8BB4-394166000C6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A5EF701C-439E-407F-8BB4-394166000C6D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -753,6 +767,8 @@ Global
{048509D6-FB49-4B84-832A-90E55520B97B} = {824BD1DE-3FA8-4FE0-823A-FD365EAC78AF}
{95372E82-CA5B-4C61-BD6C-74E6AB1970D4} = {22DF5DC0-1290-4E83-A9D8-6BB7DE3B3E63}
{B6157646-8EBA-464C-99B9-C386D474CB12} = {2097345F-4DD3-477D-BC54-A922F9B2B402}
+ {A5FCDD8F-20FF-4657-804E-707EAD4FE31D} = {22DF5DC0-1290-4E83-A9D8-6BB7DE3B3E63}
+ {A5EF701C-439E-407F-8BB4-394166000C6D} = {2097345F-4DD3-477D-BC54-A922F9B2B402}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B0816796-CDB3-47D7-8C3C-946434DE3B66}
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net462/PublicAPI.Shipped.txt b/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net462/PublicAPI.Shipped.txt
new file mode 100644
index 0000000000..7dc5c58110
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net462/PublicAPI.Shipped.txt
@@ -0,0 +1 @@
+#nullable enable
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net462/PublicAPI.Unshipped.txt b/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net462/PublicAPI.Unshipped.txt
new file mode 100644
index 0000000000..536c6eae3b
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net462/PublicAPI.Unshipped.txt
@@ -0,0 +1,3 @@
+OpenTelemetry.ResourceDetectors.Process.ProcessDetector
+OpenTelemetry.ResourceDetectors.Process.ProcessDetector.Detect() -> OpenTelemetry.Resources.Resource!
+OpenTelemetry.ResourceDetectors.Process.ProcessDetector.ProcessDetector() -> void
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net6.0/PublicAPI.Shipped.txt b/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net6.0/PublicAPI.Shipped.txt
new file mode 100644
index 0000000000..7dc5c58110
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net6.0/PublicAPI.Shipped.txt
@@ -0,0 +1 @@
+#nullable enable
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net6.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net6.0/PublicAPI.Unshipped.txt
new file mode 100644
index 0000000000..536c6eae3b
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/.publicApi/net6.0/PublicAPI.Unshipped.txt
@@ -0,0 +1,3 @@
+OpenTelemetry.ResourceDetectors.Process.ProcessDetector
+OpenTelemetry.ResourceDetectors.Process.ProcessDetector.Detect() -> OpenTelemetry.Resources.Resource!
+OpenTelemetry.ResourceDetectors.Process.ProcessDetector.ProcessDetector() -> void
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/AssemblyInfo.cs b/src/OpenTelemetry.ResourceDetectors.Process/AssemblyInfo.cs
new file mode 100644
index 0000000000..221b668c6c
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+using System.Runtime.CompilerServices;
+
+#if SIGNED
+[assembly: InternalsVisibleTo("OpenTelemetry.ResourceDetectors.Process.Tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010051c1562a090fb0c9f391012a32198b5e5d9a60e9b80fa2d7b434c9e5ccb7259bd606e66f9660676afc6692b8cdc6793d190904551d2103b7b22fa636dcbb8208839785ba402ea08fc00c8f1500ccef28bbf599aa64ffb1e1d5dc1bf3420a3777badfe697856e9d52070a50c3ea5821c80bef17ca3acffa28f89dd413f096f898")]
+#else
+[assembly: InternalsVisibleTo("OpenTelemetry.ResourceDetectors.Process.Tests")]
+#endif
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/CHANGELOG.md b/src/OpenTelemetry.ResourceDetectors.Process/CHANGELOG.md
new file mode 100644
index 0000000000..72ccecd211
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/CHANGELOG.md
@@ -0,0 +1,6 @@
+# Changelog
+
+## Unreleased
+
+* Initial release of `OpenTelemetry.ResourceDetectors.Process` project
+[1506](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/1506)
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/OpenTelemetry.ResourceDetectors.Process.csproj b/src/OpenTelemetry.ResourceDetectors.Process/OpenTelemetry.ResourceDetectors.Process.csproj
new file mode 100644
index 0000000000..f0a4b7beda
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/OpenTelemetry.ResourceDetectors.Process.csproj
@@ -0,0 +1,12 @@
+
+
+
+ net6.0
+ $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion)
+ OpenTelemetry Extensions - Process Resource Detector.
+ ResourceDetectors.Process-
+
+
+
+
+
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/ProcessDetector.cs b/src/OpenTelemetry.ResourceDetectors.Process/ProcessDetector.cs
new file mode 100644
index 0000000000..1fc900576f
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/ProcessDetector.cs
@@ -0,0 +1,32 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+#if NET6_0_OR_GREATER
+using System;
+#endif
+using System.Collections.Generic;
+using OpenTelemetry.Resources;
+
+namespace OpenTelemetry.ResourceDetectors.Process;
+
+///
+/// Process detector.
+///
+public sealed class ProcessDetector : IResourceDetector
+{
+ ///
+ /// Detects the resource attributes for process.
+ ///
+ /// Resource with key-value pairs of resource attributes.
+ public Resource Detect()
+ {
+ return new Resource(new List>(1)
+ {
+#if NET6_0_OR_GREATER
+ new(ProcessSemanticConventions.AttributeProcessPid, Environment.ProcessId),
+#else
+ new(ProcessSemanticConventions.AttributeProcessPid, System.Diagnostics.Process.GetCurrentProcess().Id),
+#endif
+ });
+ }
+}
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/ProcessSemanticConventions.cs b/src/OpenTelemetry.ResourceDetectors.Process/ProcessSemanticConventions.cs
new file mode 100644
index 0000000000..26ff48b894
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/ProcessSemanticConventions.cs
@@ -0,0 +1,9 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+namespace OpenTelemetry.ResourceDetectors.Process;
+
+internal static class ProcessSemanticConventions
+{
+ public const string AttributeProcessPid = "process.pid";
+}
diff --git a/src/OpenTelemetry.ResourceDetectors.Process/README.md b/src/OpenTelemetry.ResourceDetectors.Process/README.md
new file mode 100644
index 0000000000..d191c6732e
--- /dev/null
+++ b/src/OpenTelemetry.ResourceDetectors.Process/README.md
@@ -0,0 +1,43 @@
+# Process Resource Detectors
+
+[![NuGet version badge](https://img.shields.io/nuget/v/OpenTelemetry.ResourceDetectors.Process)](https://www.nuget.org/packages/OpenTelemetry.ResourceDetectors.Process)
+[![NuGet download count badge](https://img.shields.io/nuget/dt/OpenTelemetry.ResourceDetectors.Process)](https://www.nuget.org/packages/OpenTelemetry.ResourceDetectors.Process)
+
+> [!IMPORTANT]
+> Resources detected by this packages are defined by [experimental semantic convention](https://github.com/open-telemetry/semantic-conventions/blob/v1.24.0/docs/resource/process.md#process).
+> These resources can be changed without prior notification.
+
+## Getting Started
+
+You need to install the
+`OpenTelemetry.ResourceDetectors.Process` package to be able to use the
+Process Runtime Resource Detectors.
+
+```shell
+dotnet add package OpenTelemetry.ResourceDetectors.Process --prerelease
+```
+
+## Usage
+
+You can configure Process Runtime resource detector to
+the `TracerProvider` with the following example below.
+
+```csharp
+using OpenTelemetry;
+using OpenTelemetry.ResourceDetectors.Process;
+
+var tracerProvider = Sdk.CreateTracerProviderBuilder()
+ // other configurations
+ .ConfigureResource(resource => resource
+ .AddDetector(new ProcessDetector()))
+ .Build();
+```
+
+The resource detectors will record the following metadata based on where
+your application is running:
+
+- **ProcessDetector**: `process.pid`.
+
+## References
+
+- [OpenTelemetry Project](https://opentelemetry.io/)
diff --git a/src/OpenTelemetry.ResourceDetectors.ProcessRuntime/ProcessRuntimeDetector.cs b/src/OpenTelemetry.ResourceDetectors.ProcessRuntime/ProcessRuntimeDetector.cs
index 38cfb3315e..bef33a9fc5 100644
--- a/src/OpenTelemetry.ResourceDetectors.ProcessRuntime/ProcessRuntimeDetector.cs
+++ b/src/OpenTelemetry.ResourceDetectors.ProcessRuntime/ProcessRuntimeDetector.cs
@@ -16,7 +16,7 @@ namespace OpenTelemetry.ResourceDetectors.ProcessRuntime;
///
/// Process runtime detector.
///
-public class ProcessRuntimeDetector : IResourceDetector
+public sealed class ProcessRuntimeDetector : IResourceDetector
{
///
/// Detects the resource attributes from .NET runtime.
diff --git a/src/OpenTelemetry.ResourceDetectors.ProcessRuntime/README.md b/src/OpenTelemetry.ResourceDetectors.ProcessRuntime/README.md
index 7d0027b42c..6a5d589413 100644
--- a/src/OpenTelemetry.ResourceDetectors.ProcessRuntime/README.md
+++ b/src/OpenTelemetry.ResourceDetectors.ProcessRuntime/README.md
@@ -3,6 +3,10 @@
[![NuGet version badge](https://img.shields.io/nuget/v/OpenTelemetry.ResourceDetectors.ProcessRuntime)](https://www.nuget.org/packages/OpenTelemetry.ResourceDetectors.ProcessRuntime)
[![NuGet download count badge](https://img.shields.io/nuget/dt/OpenTelemetry.ResourceDetectors.ProcessRuntime)](https://www.nuget.org/packages/OpenTelemetry.ResourceDetectors.ProcessRuntime)
+> [!IMPORTANT]
+> Resources detected by this packages are defined by [experimental semantic convention](https://github.com/open-telemetry/semantic-conventions/blob/v1.24.0/docs/resource/process.md#process-runtimes).
+> These resources can be changed without prior notification.
+
## Getting Started
You need to install the
diff --git a/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj b/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj
index 56e661f052..9381dad406 100644
--- a/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj
+++ b/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj
@@ -17,6 +17,7 @@
+
diff --git a/test/OpenTelemetry.ResourceDetectors.Process.Tests/OpenTelemetry.ResourceDetectors.Process.Tests.csproj b/test/OpenTelemetry.ResourceDetectors.Process.Tests/OpenTelemetry.ResourceDetectors.Process.Tests.csproj
new file mode 100644
index 0000000000..06565fd592
--- /dev/null
+++ b/test/OpenTelemetry.ResourceDetectors.Process.Tests/OpenTelemetry.ResourceDetectors.Process.Tests.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Unit test project for Process Detector for OpenTelemetry
+
+ $(SupportedNetTargets)
+ $(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion)
+
+
+
+
+
+
+
diff --git a/test/OpenTelemetry.ResourceDetectors.Process.Tests/ProcessDetectorTests.cs b/test/OpenTelemetry.ResourceDetectors.Process.Tests/ProcessDetectorTests.cs
new file mode 100644
index 0000000000..98c3ade236
--- /dev/null
+++ b/test/OpenTelemetry.ResourceDetectors.Process.Tests/ProcessDetectorTests.cs
@@ -0,0 +1,23 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+using System.Linq;
+using OpenTelemetry.Resources;
+using Xunit;
+
+namespace OpenTelemetry.ResourceDetectors.Process.Tests;
+
+public class ProcessDetectorTests
+{
+ [Fact]
+ public void TestProcessAttributes()
+ {
+ var resource = ResourceBuilder.CreateEmpty().AddDetector(new ProcessDetector()).Build();
+
+ var resourceAttributes = resource.Attributes.ToDictionary(x => x.Key, x => x.Value);
+
+ Assert.Single(resourceAttributes);
+
+ Assert.IsType(resourceAttributes[ProcessSemanticConventions.AttributeProcessPid]);
+ }
+}