diff --git a/CHANGELOG.md b/CHANGELOG.md
index 091538213..9bc71ef15 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,7 @@
- Add automatic retry on gateway timeout in `GrpcDurableTaskClient.WaitForInstanceCompletionAsync` in ([#412](https://github.com/microsoft/durabletask-dotnet/pull/412))
- Add specific logging for NotFound error on worker connection by @halspang in ([#413](https://github.com/microsoft/durabletask-dotnet/pull/413))
- Add user agent header to gRPC called in ([#417](https://github.com/microsoft/durabletask-dotnet/pull/417))
-
+- Enrich User-Agent Header in gRPC Metadata to indicate Client or Worker as caller ([#421](https://github.com/microsoft/durabletask-dotnet/pull/421))
## v1.10.0
- Update DurableTask.Core to v3.1.0 and Bump version to v1.10.0 by @nytian in ([#411](https://github.com/microsoft/durabletask-dotnet/pull/411))
diff --git a/src/Client/AzureManaged/DurableTaskSchedulerClientOptions.cs b/src/Client/AzureManaged/DurableTaskSchedulerClientOptions.cs
index 352d04aad..41eacc663 100644
--- a/src/Client/AzureManaged/DurableTaskSchedulerClientOptions.cs
+++ b/src/Client/AzureManaged/DurableTaskSchedulerClientOptions.cs
@@ -7,6 +7,7 @@
using Grpc.Core;
using Grpc.Net.Client;
using Microsoft.DurableTask;
+using Microsoft.DurableTask.Client;
namespace Microsoft.DurableTask;
@@ -98,7 +99,7 @@ this.Credential is not null
metadata.Add("taskhub", taskHubName);
// Add user agent header with durabletask-dotnet and DLL version from util
- metadata.Add("user-agent", $"{DurableTaskUserAgentUtil.GetUserAgent()}");
+ metadata.Add("user-agent", $"{DurableTaskUserAgentUtil.GetUserAgent(nameof(DurableTaskClient))}");
if (cache == null)
{
return;
diff --git a/src/Shared/AzureManaged/DurableTaskVersionUtil.cs b/src/Shared/AzureManaged/DurableTaskVersionUtil.cs
index 174333d42..7ad3bc47c 100644
--- a/src/Shared/AzureManaged/DurableTaskVersionUtil.cs
+++ b/src/Shared/AzureManaged/DurableTaskVersionUtil.cs
@@ -21,11 +21,12 @@ public static class DurableTaskUserAgentUtil
static readonly string PackageVersion = FileVersionInfo.GetVersionInfo(typeof(DurableTaskUserAgentUtil).Assembly.Location).FileVersion;
///
- /// Generates the user agent string for the Durable Task SDK based on a fixed name and the package version.
+ /// Generates the user agent string for the Durable Task SDK based on a fixed name, the package version, and the caller type.
///
+ /// The type of caller (Client or Worker).
/// The user agent string.
- public static string GetUserAgent()
+ public static string GetUserAgent(string callerType)
{
- return $"{SdkName}/{PackageVersion?.ToString() ?? "unknown"}";
+ return $"{SdkName}/{PackageVersion?.ToString() ?? "unknown"} ({callerType})";
}
}
\ No newline at end of file
diff --git a/src/Worker/AzureManaged/DurableTaskSchedulerWorkerOptions.cs b/src/Worker/AzureManaged/DurableTaskSchedulerWorkerOptions.cs
index c789e0a19..e435e54e5 100644
--- a/src/Worker/AzureManaged/DurableTaskSchedulerWorkerOptions.cs
+++ b/src/Worker/AzureManaged/DurableTaskSchedulerWorkerOptions.cs
@@ -7,6 +7,7 @@
using Grpc.Core;
using Grpc.Net.Client;
using Microsoft.DurableTask;
+using Microsoft.DurableTask.Worker.Hosting;
namespace Microsoft.DurableTask;
@@ -103,7 +104,7 @@ this.Credential is not null
{
metadata.Add("taskhub", taskHubName);
// Add user agent header with durabletask-dotnet and DLL version from util
- metadata.Add("user-agent", $"{DurableTaskUserAgentUtil.GetUserAgent()}");
+ metadata.Add("user-agent", $"{DurableTaskUserAgentUtil.GetUserAgent(nameof(DurableTaskWorker))}");
metadata.Add("workerid", this.WorkerId);
if (cache == null)
{