private void UpdateServices(InfrastructureDto dto)
        {
            lblStatus.Text      = dto.Active ? Constants.Active : Constants.InActive;
            lblStatus.ForeColor = HealthHelper.GetHealthColor(dto.Active);
            var description = CdcDcStateHelper.GetActiveServiceDesc(dto);

            toolTip1.SetToolTip(lblStatus, description);
            lstServices.Items.Clear();
            foreach (ServiceDto service in dto.Services)
            {
                var status  = service.Alive ? Constants.Active : Constants.InActive;
                var message = string.Format("Last Heartbeat for server {0} service {1} is {2}, UTC: {3}", dto.Name, service.ServiceName, service.LastHeartbeat.ToString("dd-MMM-yyyy HH:mm:ss"), DateTime.UtcNow.ToString("dd-MMM-yyyy HH:mm:ss"));
                PscHighAvailabilityAppEnvironment.Instance.Logger.Log(message, LogLevel.Info);
                var hb = DateTimeConverter.ToDurationAgo(service.LastHeartbeat);
                message = string.Format("Last Heartbeat shown on UI for server {0} service {1} is {2}", dto.Name, service.ServiceName, hb);
                PscHighAvailabilityAppEnvironment.Instance.Logger.Log(message, LogLevel.Info);
                var          port   = service.Port == 0 ? string.Empty : service.Port.ToString();
                var          values = new string[] { service.ServiceName, service.Description, port, status, hb };
                ListViewItem item   = new ListViewItem(values)
                {
                    ImageIndex = (int)ImageIndex.Service
                };
                item.BackColor = service.Alive ? Color.LightGreen : Color.Pink;
                lstServices.Items.Add(item);
            }
            lstServices.Refresh();
        }
 private static string GetStatus(InfrastructureDto dc)
 {
     return(dc.IsRemote ? Constants.UnKnown
                         : (dc.Active
                         ? Constants.Active
                         : Constants.InActive));
 }
Example #3
0
        public static string GetActiveServiceDesc(InfrastructureDto dc)
        {
            var activeServices = dc.Services.Count(x => x.Alive);
            var totalServices  = dc.Services.Count();
            var status         = string.Format("{0} out of {1} services are {2}", activeServices, totalServices, Constants.Active);

            return(status);
        }
Example #4
0
 /// <summary>
 /// Gets the services status.
 /// </summary>
 /// <returns>The services status.</returns>
 /// <param name="obj">Object.</param>
 private static string GetServicesStatus(InfrastructureDto obj)
 {
     return(obj.IsRemote ? string.Empty :
            (obj.Services != null && obj.Services.Count > 0
                         ? string.Format("{0} of {1} " + Constants.Active,
                                         obj.Services.Count(x => x.Alive),
                                         obj.Services.Count())
                         : Constants.NoServicesAvailable));
 }
        private void AddNewDomainController(InfrastructureDto dc)
        {
            var          affinitized = _dto.DomainController.Name == dc.Name ? "Yes" : string.Empty;
            var          services    = GetServiceDescription(dc);
            var          status      = GetStatus(dc);
            var          location    = GetLocation(dc);
            var          values      = new string[] { dc.Name, affinitized, location, services, status };
            ListViewItem item        = new ListViewItem(values)
            {
                Tag = dc, ImageIndex = (int)ImageIndex.Infrastructure
            };

            item.BackColor = GetRowColor(dc);
            lstdcs.Items.Add(item);
        }
        private void AddAfdAndDirServiceStatus(ServerDto serverDto, InfrastructureDto infra)
        {
            var afdService = new ServiceDto()
            {
                HostName      = serverDto.Server,
                ServiceName   = Constants.AuthFrameworkServiceName,
                Description   = Constants.AuthFrameworkServiceDesc,
                Alive         = false,
                LastHeartbeat = System.DateTime.UtcNow
            };

            AddService(infra, afdService);
            var vmdirService = GetVmDirServiceStatus(serverDto);

            AddService(infra, vmdirService);
        }
        /// <summary>
        /// Adds the service.
        /// </summary>
        /// <param name="infra">Infra.</param>
        /// <param name="service">Service.</param>
        private static void AddService(InfrastructureDto infra, ServiceDto service)
        {
            var index = infra.Services.FindIndex(x => x.ServiceName == service.ServiceName);

            if (index > -1)
            {
                if (index < infra.Services.Count)
                {
                    infra.Services[index] = service;
                }
            }
            else
            {
                infra.Services.Add(service);
            }
        }
        /// <summary>
        /// Awakes from nib.
        /// </summary>
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();
            IpAddressTextField.StringValue = Network.GetIpAddress(_nodeName);
            _infrastructureDto             = (InfrastructureDto)_rootNode.Hosts.First(x => x.Name == _nodeName);
            HotnametextField.StringValue   = _infrastructureDto.Name;
            SitenameTextField.StringValue  = SiteName;
            var health = _infrastructureDto.Active ? Constants.Active : Constants.InActive;
            var color  = _infrastructureDto.Active
                                ? NSColor.FromSrgb((nfloat)3.0 / 255, (nfloat)161 / 255, (nfloat)27 / 255, 1)
                                : NSColor.Red;

            HealthTextField.StringValue = health.ToUpper();
            HealthTextField.TextColor   = color;
            SetServicesTableView(_infrastructureDto.Services);
        }
        /// <summary>
        /// Gets the infrastructure nodes.
        /// </summary>
        /// <returns>The infrastructure nodes.</returns>
        /// <param name="serverDto">Server dto.</param>
        /// <param name="dcName">Dc name.</param>
        private List <NodeDto> GetInfrastructureNodes(ServerDto serverDto, string dcName)
        {
            var message = "GetInfrastructureNodes method for Server: " + serverDto.Server;

            _logger.Log(message, LogLevel.Info);

            var nodes = new List <NodeDto>();

            // Get Infrastructure nodes
            try
            {
                message = "VmDirGetDCInfos API call for Server: " + serverDto.Server;
                _logger.Log(message, LogLevel.Info);
                var entries = vmdirClient.Client.VmDirGetDCInfos(dcName, serverDto.UserName, serverDto.Password);

                message = string.Format("VmDirGetDCInfos API Server: {0} complete. Entries retrieved: {1}", serverDto.Server, entries.Count.ToString());
                _logger.Log(message, LogLevel.Info);

                foreach (vmdirClient.VmDirDCInfo entry in entries)
                {
                    var infraNode = new InfrastructureDto()
                    {
                        Name     = entry.pszDCName,
                        Sitename = entry.pszSiteName,
                        Partners = entry.partners,
                        NodeType = NodeType.Infrastructure,
                        Ip       = Network.GetIpAddress(entry.pszDCName)
                    };
                    nodes.Add(infraNode);
                }
            }
            catch (Exception exc)
            {
                message = "VmDirGetDCInfos API returned error for Server: " + serverDto.Server;
                _logger.Log(message, LogLevel.Error);
                var custom = new CustomExceptionExtractor().GetCustomMessage(exc);
                _logger.LogException(exc, custom);
            }
            return(nodes);
        }
Example #10
0
 /// <summary>
 /// Gets the heart beat date time.
 /// </summary>
 /// <returns>The heart beat date time.</returns>
 /// <param name="obj">Object.</param>
 private static string GetHeartBeatDateTime(InfrastructureDto obj)
 {
     return(obj.LastHeartBeat.HasValue ? DateTimeConverter.ToDurationAgo(obj.LastHeartBeat.Value) : string.Empty);
 }
 private static string GetLocation(InfrastructureDto dc)
 {
     return(dc.IsRemote ? Constants.RemoteSite : Constants.SameSite);
 }
 private static string GetServiceDescription(InfrastructureDto dc)
 {
     return(dc.IsRemote ? string.Empty : CdcDcStateHelper.GetActiveServiceDesc(dc));
 }
 private static Color GetRowColor(InfrastructureDto dc)
 {
     return(dc.IsRemote ? Color.LightGray : (dc.Active ? Color.LightGreen : Color.Pink));
 }
        /// <summary>
        /// Gets the management node details.
        /// </summary>
        /// <returns>The management node details.</returns>
        /// <param name="serverDto">Server dto.</param>
        public ManagementDto GetManagementNodeDetails(ServerDto serverDto)
        {
            var dto = new ManagementDto()
            {
                State = new StateDescriptionDto(), Name = serverDto.Server, Domain = serverDto.DomainName
            };

            using (Client client = new Client(serverDto.Server, serverDto.Upn, serverDto.Password))
            {
                var message = string.Format("Method: GetManagementNodeDetails - CdcGetCurrentState API call for Server: {0}", serverDto.Server);
                _logger.Log(message, LogLevel.Info);

                try
                {
                    var state = client.CdcGetCurrentState();
                    dto.Legacy = (state == CDC_DC_STATE.CDC_DC_STATE_LEGACY);
                    dto.State  = CdcDcStateHelper.GetStateDescription(state);
                    message    = string.Format("Method: GetManagementNodeDetails - CdcGetCurrentState API call for Server: {0} complete", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);
                }
                catch (Exception exc)
                {
                    message = string.Format("Method: GetManagementNodeDetails - CdcGetCurrentState API call for Server: {0} failed", serverDto.Server);
                    _logger.Log(message, LogLevel.Error);
                    _logger.LogException(exc);
                }

                try
                {
                    message = string.Format("Method: GetManagementNodeDetails - VmAfdGetSiteName API call for Server: {0}", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);

                    dto.Sitename = client.VmAfdGetSiteName();

                    message = string.Format("Method: GetManagementNodeDetails - VmAfdGetSiteName API call for Server: {0} complete", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);
                }
                catch (Exception exc)
                {
                    message = string.Format("Method: GetManagementNodeDetails - VmAfdGetSiteName API call for Server: {0} failed", serverDto.Server);
                    _logger.Log(message, LogLevel.Error);
                    _logger.LogException(exc);
                }
                dto.Active = true;
                dto.Ip     = Network.GetIpAddress(dto.Name);

                message = string.Format("Method: GetManagementNodeDetails - CdcGetDCName API call for Server: {0}", serverDto.Server);
                _logger.Log(message, LogLevel.Info);

                try
                {
                    var dcInfo = client.CdcGetDCName(serverDto.DomainName, dto.Sitename, 0);

                    message = string.Format("Method: GetManagementNodeDetails - CdcGetDCName API call for Server: {0} complete", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);

                    dto.DomainController = new InfrastructureDto
                    {
                        Name     = dcInfo.pszDCName,
                        NodeType = NodeType.Infrastructure,
                        Domain   = dcInfo.pszDomainName
                    };
                }
                catch (Exception exc)
                {
                    message = string.Format("Method: GetManagementNodeDetails - CdcGetDCName API call for Server: {0} failed", serverDto.Server);
                    _logger.Log(message, LogLevel.Error);
                    _logger.LogException(exc);
                    dto.DomainController = new InfrastructureDto
                    {
                        Name     = string.Empty,
                        NodeType = NodeType.Infrastructure,
                        Domain   = string.Empty
                    };
                }
                dto.DomainControllers = new List <InfrastructureDto>();

                try
                {
                    message = string.Format("Method: GetManagementNodeDetails - CdcEnumDCEntries API call for Server: {0}", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);
                    IList <string> entries = client.CdcEnumDCEntries();
                    message = string.Format("Method: GetManagementNodeDetails - CdcEnumDCEntries API call for Server: {0} complete. DCs returned: {1}", serverDto.Server, entries.Count());
                    _logger.Log(message, LogLevel.Info);
                    foreach (var entry in entries)
                    {
                        CDC_DC_STATUS_INFO     info;
                        VMAFD_HEARTBEAT_STATUS hbStatus;

                        try
                        {
                            message = string.Format("Method: GetManagementNodeDetails - CdcGetDCStatus API call for Server: {0}", serverDto.Server);
                            _logger.Log(message, LogLevel.Info);

                            client.CdcGetDCStatus(entry, string.Empty, out info, out hbStatus);
                            message = string.Format("Method: GetManagementNodeDetails - CdcGetDCStatus API call for Server: {0} complete", serverDto.Server);
                            _logger.Log(message, LogLevel.Info);

                            var infraDto = new InfrastructureDto()
                            {
                                Name     = entry,
                                Active   = info.bIsAlive == 1,
                                Sitename = info.pszSiteName,
                                LastPing = DateTimeConverter.FromUnixToDateTime(info.dwLastPing),
                                Services = new List <ServiceDto>()
                            };

                            if (hbStatus.info != null)
                            {
                                foreach (var serviceInfo in hbStatus.info)
                                {
                                    var service = new ServiceDto
                                    {
                                        ServiceName   = ServiceHelper.GetServiceName(serviceInfo.pszServiceName),
                                        Description   = ServiceHelper.GetServiceDescription(serviceInfo.pszServiceName),
                                        Alive         = serviceInfo.bIsAlive == 1,
                                        LastHeartbeat = DateTimeConverter.FromUnixToDateTime(serviceInfo.dwLastHeartbeat),
                                        Port          = serviceInfo.dwPort,
                                    };
                                    infraDto.Services.Add(service);
                                }
                            }
                            dto.DomainControllers.Add(infraDto);
                        }
                        catch (Exception exc)
                        {
                            message = string.Format("Method: GetManagementNodeDetails - CdcGetDCStatus API call for Server: {0} failed", serverDto.Server);
                            _logger.Log(message, LogLevel.Error);
                            _logger.LogException(exc);
                            dto.DomainController = new InfrastructureDto
                            {
                                Name     = string.Empty,
                                NodeType = NodeType.Infrastructure,
                                Domain   = string.Empty
                            };
                        }
                    }
                }
                catch (Exception exc)
                {
                    message = string.Format("Method: GetManagementNodeDetails - CdcEnumDCEntries API call for Server: {0} failed", serverDto.Server);
                    _logger.Log(message, LogLevel.Error);
                    _logger.LogException(exc);
                    dto.DomainController = new InfrastructureDto
                    {
                        Name     = string.Empty,
                        NodeType = NodeType.Infrastructure,
                        Domain   = string.Empty
                    };
                }
            }
            return(dto);
        }