in src/WebJobs.Extensions.DurableTask/HttpApiHandler.cs [455:514]
private async Task<HttpResponseMessage> HandleGetStatusRequestAsync(
HttpRequestMessage request)
{
IDurableOrchestrationClient client = this.GetClient(request);
var queryNameValuePairs = request.GetQueryNameValuePairs();
var condition = new OrchestrationStatusQueryCondition();
if (TryGetStringQueryParameterValue(queryNameValuePairs, InstanceIdPrefixParameter, out string instanceIdPrefix))
{
condition.InstanceIdPrefix = instanceIdPrefix;
}
if (TryGetDateTimeQueryParameterValue(queryNameValuePairs, CreatedTimeFromParameter, out DateTime createdTimeFrom))
{
condition.CreatedTimeFrom = createdTimeFrom;
}
if (TryGetDateTimeQueryParameterValue(queryNameValuePairs, CreatedTimeToParameter, out DateTime createdTimeTo))
{
condition.CreatedTimeTo = createdTimeTo;
}
if (TryGetIEnumerableQueryParameterValue<OrchestrationRuntimeStatus>(queryNameValuePairs, RuntimeStatusParameter, out IEnumerable<OrchestrationRuntimeStatus> runtimeStatus))
{
condition.RuntimeStatus = runtimeStatus;
}
if (TryGetBooleanQueryParameterValue(queryNameValuePairs, ShowInputParameter, out bool showInput))
{
condition.ShowInput = showInput;
}
if (TryGetIntQueryParameterValue(queryNameValuePairs, PageSizeParameter, out int pageSize))
{
condition.PageSize = pageSize;
}
if (request.Headers.TryGetValues("x-ms-continuation-token", out var headerValues))
{
condition.ContinuationToken = headerValues.FirstOrDefault();
}
IList<DurableOrchestrationStatus> statusForAllInstances;
var context = await client.ListInstancesAsync(condition, CancellationToken.None);
statusForAllInstances = context.DurableOrchestrationState.ToList();
var nextContinuationToken = context.ContinuationToken;
var results = new List<StatusResponsePayload>(statusForAllInstances.Count);
foreach (var state in statusForAllInstances)
{
results.Add(ConvertFrom(state));
}
var response = request.CreateResponse(HttpStatusCode.OK, results);
response.Headers.Add("x-ms-continuation-token", nextContinuationToken);
return response;
}