protected virtual List<KeyValuePair<string, List<Check>>> GenerateCommonChecks()
{
List<KeyValuePair<string, List<Check>>> checks = new List<KeyValuePair<string, List<Check>>>();
//HostLivenessCheck checks
checks.Add(new KeyValuePair<string, List<Check>>(Messages.CHECKING_HOST_LIVENESS_STATUS, new List<Check>()));
List<Check> checkGroup = checks[checks.Count - 1].Value;
foreach (Host host in SelectedServers)
{
checkGroup.Add(new HostLivenessCheck(host));
}
//HA checks
checks.Add(new KeyValuePair<string, List<Check>>(Messages.CHECKING_HA_STATUS, new List<Check>()));
checkGroup = checks[checks.Count - 1].Value;
foreach (Host host in SelectedServers)
{
if (Helpers.HostIsMaster(host))
checkGroup.Add(new HAOffCheck(host));
}
//PBDsPluggedCheck
checks.Add(new KeyValuePair<string, List<Check>>(Messages.CHECKING_STORAGE_CONNECTIONS_STATUS, new List<Check>()));
checkGroup = checks[checks.Count - 1].Value;
foreach (Host host in SelectedServers)
{
checkGroup.Add(new PBDsPluggedCheck(host));
}
//Disk space check for automated updates
if (IsInAutomatedUpdatesMode)
{
checks.Add(new KeyValuePair<string, List<Check>>(Messages.PATCHINGWIZARD_PRECHECKPAGE_CHECKING_DISK_SPACE, new List<Check>()));
checkGroup = checks[checks.Count - 1].Value;
foreach (Pool pool in SelectedPools)
{
var us = Updates.GetUpgradeSequence(pool.Connection);
bool elyOrGreater = Helpers.ElyOrGreater(pool.Connection);
foreach (Host host in us.Keys)
{
checkGroup.Add(
new DiskSpaceForAutomatedUpdatesCheck(
host,
elyOrGreater
? us[host].Sum(p => p.InstallationSize) // all updates on this host
: host.IsMaster()
? us[host].Sum(p => p.InstallationSize) + us.Values.SelectMany(a => a).Max(p => p.InstallationSize) // master: all updates on master + largest update in pool
: us[host].Sum(p => p.InstallationSize) + us[host].Max(p => p.InstallationSize) // non-master: all updates on this host + largest on this host
));
}
}
}
return checks;
}