Skip to content

Commit

Permalink
add httpmanagementpayload class
Browse files Browse the repository at this point in the history
  • Loading branch information
nytian committed Oct 21, 2024
1 parent 221138f commit 33dbd20
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ private class OrchestrationClientInputData
/// <summary>
/// The base URL of the Azure Functions host, used in the out-of-proc model.
/// This URL is sent by the client binding object to the Durable Worker extension,
/// allowing the extension to know the host's base URL for constructing complete URLs.
/// allowing the extension to know the host's base URL for constructing management URLs.
/// </summary>
[JsonProperty("HttpBaseUrl")]
public string? HttpBaseUrl { get; set; }
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 10 additions & 10 deletions src/Worker.Extensions.DurableTask/DurableTaskClientExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ public static HttpResponseData CreateCheckStatusResponse(
/// <returns>An object containing instance control URLs.</returns>
/// <exception cref="ArgumentException">Thrown when instanceId is null or empty.</exception>
/// <exception cref="InvalidOperationException">Thrown when a valid base URL cannot be determined.</exception>
public static object CreateHttpManagementPayload(
public static HttpManagementPayload CreateHttpManagementPayload(
this DurableTaskClient client,
string instanceId,
HttpRequestData? request = null)
Expand All @@ -149,7 +149,7 @@ public static object CreateHttpManagementPayload(
}
}

private static object SetHeadersAndGetPayload(
private static HttpManagementPayload SetHeadersAndGetPayload(
DurableTaskClient client, HttpRequestData? request, HttpResponseData? response, string instanceId)
{
static string BuildUrl(string url, params string?[] queryValues)
Expand Down Expand Up @@ -198,15 +198,15 @@ static string BuildUrl(string url, params string?[] queryValues)
response.Headers.Add("Content-Type", "application/json");
}

return new
return new HttpManagementPayload
{
id = instanceId,
purgeHistoryDeleteUri = BuildUrl(instanceUrl, commonQueryParameters),
sendEventPostUri = BuildUrl($"{instanceUrl}/raiseEvent/{{eventName}}", commonQueryParameters),
statusQueryGetUri = BuildUrl(instanceUrl, commonQueryParameters),
terminatePostUri = BuildUrl($"{instanceUrl}/terminate", "reason={{text}}", commonQueryParameters),
suspendPostUri = BuildUrl($"{instanceUrl}/suspend", "reason={{text}}", commonQueryParameters),
resumePostUri = BuildUrl($"{instanceUrl}/resume", "reason={{text}}", commonQueryParameters)
Id = instanceId,
PurgeHistoryDeleteUri = BuildUrl(instanceUrl, commonQueryParameters),
SendEventPostUri = BuildUrl($"{instanceUrl}/raiseEvent/{{eventName}}", commonQueryParameters),
StatusQueryGetUri = BuildUrl(instanceUrl, commonQueryParameters),
TerminatePostUri = BuildUrl($"{instanceUrl}/terminate", "reason={{text}}", commonQueryParameters),
SuspendPostUri = BuildUrl($"{instanceUrl}/suspend", "reason={{text}}", commonQueryParameters),
ResumePostUri = BuildUrl($"{instanceUrl}/resume", "reason={{text}}", commonQueryParameters)
};
}

Expand Down
96 changes: 96 additions & 0 deletions src/Worker.Extensions.DurableTask/HttpManagementPayload.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;

namespace Microsoft.Azure.Functions.Worker;

/// <summary>
/// Data structure containing status, terminate and send external event HTTP endpoints.
/// </summary>
public class HttpManagementPayload
{
/// <summary>
/// Gets the ID of the orchestration instance.
/// </summary>
/// <value>
/// The ID of the orchestration instance.
/// </value>
[JsonProperty("id")]
public string Id { get; internal set; }

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 23 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Id' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

/// <summary>
/// Gets the HTTP GET status query endpoint URL.
/// </summary>
/// <value>
/// The HTTP URL for fetching the instance status.
/// </value>
[JsonProperty("statusQueryGetUri")]
public string StatusQueryGetUri { get; internal set; }

Check warning on line 32 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'StatusQueryGetUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 32 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'StatusQueryGetUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 32 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'StatusQueryGetUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 32 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'StatusQueryGetUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 32 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'StatusQueryGetUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

/// <summary>
/// Gets the HTTP POST external event sending endpoint URL.
/// </summary>
/// <value>
/// The HTTP URL for posting external event notifications.
/// </value>
[JsonProperty("sendEventPostUri")]
public string SendEventPostUri { get; internal set; }

Check warning on line 41 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'SendEventPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 41 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'SendEventPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 41 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'SendEventPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 41 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'SendEventPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 41 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'SendEventPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

/// <summary>
/// Gets the HTTP POST instance termination endpoint.
/// </summary>
/// <value>
/// The HTTP URL for posting instance termination commands.
/// </value>
[JsonProperty("terminatePostUri")]
public string TerminatePostUri { get; internal set; }

Check warning on line 50 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'TerminatePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 50 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'TerminatePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 50 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'TerminatePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 50 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'TerminatePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 50 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'TerminatePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

/// <summary>
/// Gets the HTTP POST instance rewind endpoint.
/// </summary>
/// <value>
/// The HTTP URL for rewinding orchestration instances.
/// </value>
[JsonProperty("rewindPostUri")]
public string RewindPostUri { get; internal set; }

Check warning on line 59 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'RewindPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 59 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'RewindPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 59 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'RewindPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 59 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'RewindPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 59 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'RewindPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

/// <summary>
/// Gets the HTTP DELETE purge instance history by instance ID endpoint.
/// </summary>
/// <value>
/// The HTTP URL for purging instance history by instance ID.
/// </value>
[JsonProperty("purgeHistoryDeleteUri")]
public string PurgeHistoryDeleteUri { get; internal set; }

Check warning on line 68 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'PurgeHistoryDeleteUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 68 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'PurgeHistoryDeleteUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 68 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'PurgeHistoryDeleteUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 68 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'PurgeHistoryDeleteUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 68 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'PurgeHistoryDeleteUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

/// <summary>
/// Gets the HTTP POST instance restart endpoint.
/// </summary>
/// <value>
/// The HTTP URL for restarting an orchestration instance.
/// </value>
[JsonProperty("restartPostUri")]
public string RestartPostUri { get; internal set; }

Check warning on line 77 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'RestartPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 77 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'RestartPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 77 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'RestartPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 77 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'RestartPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 77 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'RestartPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

/// <summary>
/// Gets the HTTP POST instance suspend endpoint.
/// </summary>
/// <value>
/// The HTTP URL for suspending an orchestration instance.
/// </value>
[JsonProperty("suspendPostUri")]
public string SuspendPostUri { get; internal set; }

Check warning on line 86 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'SuspendPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 86 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'SuspendPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 86 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'SuspendPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 86 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'SuspendPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 86 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'SuspendPostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

/// <summary>
/// Gets the HTTP POST instance resume endpoint.
/// </summary>
/// <value>
/// The HTTP URL for resuming an orchestration instance.
/// </value>
[JsonProperty("resumePostUri")]
public string ResumePostUri { get; internal set; }

Check warning on line 95 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'ResumePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 95 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'ResumePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 95 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'ResumePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 95 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

Non-nullable property 'ResumePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.

Check warning on line 95 in src/Worker.Extensions.DurableTask/HttpManagementPayload.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'ResumePostUri' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,13 @@ public void CreateHttpManagementPayload_WithHttpRequestData()

private static void AssertHttpManagementPayload(dynamic payload, string BaseUrl, string instanceId)
{
Assert.Equal(instanceId, payload.id);
Assert.Equal($"{BaseUrl}/instances/{instanceId}", payload.purgeHistoryDeleteUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}/raiseEvent/{{eventName}}", payload.sendEventPostUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}", payload.statusQueryGetUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}/terminate?reason={{{{text}}}}", payload.terminatePostUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}/suspend?reason={{{{text}}}}", payload.suspendPostUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}/resume?reason={{{{text}}}}", payload.resumePostUri);
Assert.Equal(instanceId, payload.Id);
Assert.Equal($"{BaseUrl}/instances/{instanceId}", payload.PurgeHistoryDeleteUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}/raiseEvent/{{eventName}}", payload.SendEventPostUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}", payload.StatusQueryGetUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}/terminate?reason={{{{text}}}}", payload.TerminatePostUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}/suspend?reason={{{{text}}}}", payload.SuspendPostUri);
Assert.Equal($"{BaseUrl}/instances/{instanceId}/resume?reason={{{{text}}}}", payload.ResumePostUri);
}
}
}

0 comments on commit 33dbd20

Please sign in to comment.