in Source/Actions/Microsoft.Deployment.Actions.AzureCustom/Functions/CheckFunctionStatus.cs [45:111]
private async Task<bool> IsReady(AzureHttpClient client, string sitename)
{
bool isReady = false;
for (int i = 0; i < ATTEMPTS && !isReady; i++)
{
FunctionStatusWrapper statusWrapper = await client.RequestAzure<FunctionStatusWrapper>(HttpMethod.Get, $"/providers/Microsoft.Web/sites/{sitename}/deployments", "2016-08-01");
if (statusWrapper != null && !statusWrapper.Value.IsNullOrEmpty())
{
bool hasFinishedDeployment = true;
for (int j = 0; j < statusWrapper.Value.Count && hasFinishedDeployment; j++)
{
FunctionStatus status = statusWrapper.Value[j];
hasFinishedDeployment = status != null && status.Properties != null && !string.IsNullOrEmpty(status.Properties.LogUrl);
if (hasFinishedDeployment)
{
List<FunctionStatusLog> logs = await client.Request<List<FunctionStatusLog>>(HttpMethod.Get, status.Properties.LogUrl);
hasFinishedDeployment = !logs.IsNullOrEmpty();
if (hasFinishedDeployment)
{
bool isDeployed = false;
for (int k = 0; k < logs.Count && !isDeployed; k++)
{
isDeployed = logs[k].Message.Contains(SUCCESS);
}
hasFinishedDeployment = isDeployed && status.Properties.Active && status.Properties.Complete &&
status.Properties.EndTime != null && status.Properties.Status == STATUS;
}
}
}
if (hasFinishedDeployment)
{
FunctionWrapper functionWrapper = await client.RequestAzure<FunctionWrapper>(HttpMethod.Get, $"/providers/Microsoft.Web/sites/{sitename}/functions", "2016-08-01");
if (functionWrapper != null && !functionWrapper.Value.IsNullOrEmpty())
{
bool areFunctionsReady = true;
for (int j = 0; j < functionWrapper.Value.Count && areFunctionsReady; j++)
{
Function function = functionWrapper.Value[j];
areFunctionsReady = function != null && function.Properties != null && function.Properties.Config != null && !function.Properties.Config.Disabled;
}
isReady = areFunctionsReady;
}
}
}
if (!isReady)
{
await Task.Delay(WAIT);
}
}
return isReady;
}