Пример #1
0
        private ClusterNodeChecklistModel NodeStatus(ClusterNode node)
        {
            //ConsoleLogger.Log($"[hb] check node {node.Hostname} {node.MachineUid}");
            var status = new ClusterNodeChecklistModel();

            status.TargetNodeMachineUid = node.MachineUid;
            status.Hostname             = node.Hostname;

            //controllo l'IP pubblico
            status.KnownPublicIpReach = PingStatus(node.PublicIp);
            if (status.KnownPublicIpReach == 1)
            {
                //ConsoleLogger.Warn($"[hb] {node.Hostname} is unreachable at its known public ip");
                return(status);
            }

            //controllo antd
            var serviceStatus = ApiConsumer.Post(CommonString.Append(node.EntryPoint, serviceStatusPath));

            if (serviceStatus == Nancy.HttpStatusCode.OK)
            {
                status.ServiceReach = 0;
            }

            //controllo se ho già salvato delle informazioni
            var storedNodeIps = Application.ClusterChecklist?.FirstOrDefault(_ => _.TargetNodeMachineUid == node.MachineUid)?.DiscoveredIpsReach?.Select(_ => _.IpAddress) ?? new string[0];

            //controllo gli IP scoperti
            var nodeIps = ApiConsumer.Get <string[]>(CommonString.Append(node.EntryPoint, networkAddressPath)) ?? new string[0];

            nodeIps = storedNodeIps.Union(nodeIps).Where(_ => _ != localIp).ToArray();

            var ipStatusList = new ClusterNodeIpStatusModel[nodeIps.Length];

            for (var n = 0; n < nodeIps.Length; n++)
            {
                var ipStatus = new ClusterNodeIpStatusModel();
                ipStatus.IpAddress = nodeIps[n];
                ipStatus.Status    = PingStatus(nodeIps[n]);
                ipStatusList[n]    = ipStatus;
            }
            status.DiscoveredIpsReach = ipStatusList;

            var uptime = ApiConsumer.GetString(CommonString.Append(node.EntryPoint, appUptimePath));

            status.ApplicationUptime = uptime;

            //controllo stato nodo
            var nodeChecklist = ApiConsumer.Get <MachineStatusChecklistModel>(CommonString.Append(node.EntryPoint, machineChecklistPath)) ?? new MachineStatusChecklistModel();

            status.InternetReach    = nodeChecklist.InternetReach;
            status.InternetDnsReach = nodeChecklist.InternetDnsReach;

            //controllo servizio: virsh
            var virshStatus = ApiConsumer.Get <VirshModel>(CommonString.Append(node.EntryPoint, virshStatusPath)) ?? new VirshModel();

            status.VirshService = virshStatus;

            return(status);
        }
Пример #2
0
        /// <summary>
        /// flusso
        /// - controllo lista ip pubblici noti (ping)
        ///     - KO -> esco
        ///     - OK ->
        ///         - controllo servizio (antd)
        ///             - KO -> esco: la macchina è raggiungibile ma antd no
        ///             - OK ->
        ///                 - controllo stato macchina (antd)
        ///                     - KO ->
        ///                         - applico correzioni
        ///                     - OK ->
        ///                         - salvo stato macchina
        ///                         - aggiungo tutti gli ip alla lista ip pubblici noti
        /// </summary>
        public override void DoJob()
        {
            if (Application.CurrentConfiguration.Cluster.Active == false)
            {
                return;
            }
            var nodes      = Application.CurrentConfiguration.Cluster.Nodes;
            var statusList = new ClusterNodeChecklistModel[nodes.Length];

            for (var i = 0; i < nodes.Length; i++)
            {
                statusList[i] = NodeStatus(nodes[i]);
            }
            Application.ClusterChecklist = statusList;
        }