in src/ccf/ccf-provider-common/AciUtils.cs [32:111]
public static NodeHealth ToNodeHealth(ContainerGroupData data)
{
if (!data.Tags.TryGetValue(AciConstants.CcfNetworkResourceNameTag, out var nodeName))
{
nodeName = data.Name;
}
NodeStatus status = NodeStatus.Ok;
var reasons = new List<Reason>();
var restartedContainers = data.Containers.Where(
c => c.InstanceView?.RestartCount > 0);
var terminatedContainers = data.Containers.Where(
c => c.InstanceView?.CurrentState?.State == "Terminated");
var multipleStartedEventContainers = data.Containers.Where(
c => c.InstanceView?.Events?.Count(e => e.Name == "Started") > 1);
if (restartedContainers.Any())
{
status = NodeStatus.NeedsReplacement;
var code = "ContainerRestarted";
var message = "Following container(s) are reporting a restart count > 0.";
foreach (var c in restartedContainers)
{
message += $" {c.Name}: {c.InstanceView.RestartCount}.";
}
reasons.Add(new() { Code = code, Message = message });
}
if (terminatedContainers.Any())
{
status = NodeStatus.NeedsReplacement;
var code = "ContainerTerminated";
var message = "Following container(s) are reporting as terminated.";
foreach (var c in terminatedContainers)
{
message += $" {c.Name}.";
}
reasons.Add(new() { Code = code, Message = message });
}
if (data.ProvisioningState == "Failed")
{
status = NodeStatus.NeedsReplacement;
var code = "ProvisioningFailed";
var message = $"The container group {data.Name} is reporting provisioning failure.";
reasons.Add(new() { Code = code, Message = message });
}
if (data.InstanceView?.State == "Stopped")
{
status = NodeStatus.NeedsReplacement;
var code = "ContainerGroupStopped";
var message = $"The container group {data.Name} is reporting state as stopped.";
reasons.Add(new() { Code = code, Message = message });
}
if (multipleStartedEventContainers.Any())
{
status = NodeStatus.NeedsReplacement;
var code = "MultipleStartedEvents";
var message = "Following container(s) are reporting multiple Started events.";
foreach (var c in multipleStartedEventContainers)
{
message += $" {c.Name}: {c.InstanceView.Events.Count(e => e.Name == "Started")}.";
}
reasons.Add(new() { Code = code, Message = message });
}
var ep = ToNodeEndpoint(data);
return new NodeHealth
{
Name = nodeName,
Endpoint = ep.ClientRpcAddress,
Status = status.ToString(),
Reasons = reasons
};
}