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)); }
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); }
/// <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); }
/// <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); }