private void PopulateSingleServerMetrics(ADServerMetrics dcMetrics) { Exception ex = null; try { ExTraceGlobals.ResourceHealthManagerTracer.TraceDebug <string>((long)this.GetHashCode(), "[ADMetrics::PopulateSingleServerMetrics] Reading metrics for {0}.", dcMetrics.DnsHostName); string text; LocalizedString localizedString; if (!SuitabilityVerifier.IsServerSuitableIgnoreExceptions(dcMetrics.DnsHostName, false, null, out text, out localizedString)) { ExTraceGlobals.ResourceHealthManagerTracer.TraceError <string, LocalizedString>((long)this.GetHashCode(), "[ADMetrics::PopulateSingleServerMetrics] Suitability checks failed for {0}: {1}", dcMetrics.DnsHostName, localizedString); dcMetrics.ErrorMessage = localizedString; return; } ITopologyConfigurationSession topologyConfigurationSession = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(dcMetrics.DnsHostName, true, ConsistencyMode.PartiallyConsistent, null, ADSessionSettings.FromAccountPartitionRootOrgScopeSet(new PartitionId(this.forestFqdn)), 470, "PopulateSingleServerMetrics", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\throttling\\ResourceHealth\\ADMetrics.cs"); topologyConfigurationSession.UseGlobalCatalog = false; ExDateTime utcNow = ExDateTime.UtcNow; RootDse rootDse = topologyConfigurationSession.GetRootDse(); dcMetrics.IsSynchronized = rootDse.IsSynchronized; if (!dcMetrics.IsSynchronized) { ExTraceGlobals.ResourceHealthManagerTracer.TraceError <string>((long)this.GetHashCode(), "[ADMetrics::PopulateSingleServerMetrics] {0} is not synchronized yet.", dcMetrics.DnsHostName); return; } MultiValuedProperty <ReplicationCursor> source; MultiValuedProperty <ReplicationNeighbor> neighbors; topologyConfigurationSession.ReadReplicationData(topologyConfigurationSession.ConfigurationNamingContext, out source, out neighbors); IEnumerable <ReplicationCursor> replicationCursors = from cursor in source where neighbors.Any((ReplicationNeighbor neighbor) => this.NotNullAndEquals(neighbor.SourceDsa, cursor.SourceDsa)) select cursor; ICollection <ADReplicationLinkMetrics> configReplicationMetrics = this.ReadReplicationMetrics(replicationCursors); topologyConfigurationSession.UseConfigNC = false; topologyConfigurationSession.ReadReplicationData(dcMetrics.ServerId.DomainId, out source, out neighbors); replicationCursors = from cursor in source where neighbors.Any((ReplicationNeighbor neighbor) => this.NotNullAndEquals(neighbor.SourceDsa, cursor.SourceDsa)) select cursor; ICollection <ADReplicationLinkMetrics> domainReplicationMetrics = this.ReadReplicationMetrics(replicationCursors); dcMetrics.Initialize(utcNow, rootDse.HighestCommittedUSN, configReplicationMetrics, domainReplicationMetrics); dcMetrics.IsSuitable = true; ExTraceGlobals.ResourceHealthManagerTracer.TraceDebug <string>((long)this.GetHashCode(), "[ADMetrics::PopulateSingleServerMetrics] Finished reading metrics for {0}.", dcMetrics.DnsHostName); } catch (ADTransientException ex2) { ex = ex2; } catch (ADOperationException ex3) { ex = ex3; } catch (OperationCanceledException ex4) { ex = ex4; } if (ex != null) { ExTraceGlobals.ResourceHealthManagerTracer.TraceError <string, Exception>((long)this.GetHashCode(), "[ADMetrics::PopulateSingleServerMetrics] Failed to get read AD metrics from {0}: {1}", dcMetrics.DnsHostName, ex); dcMetrics.ErrorMessage = new LocalizedString(ex.Message); } }
private static ReconciliationCookie GetReconciliationCookieForDomainController(Fqdn fqdn, ITopologyConfigurationSession configSession, Task.TaskErrorLoggingDelegate errorLogger) { ADServer adserver = configSession.FindDCByFqdn(fqdn); if (adserver != null) { LocalizedString empty = LocalizedString.Empty; string text; if (SuitabilityVerifier.IsServerSuitableIgnoreExceptions(adserver.DnsHostName, true, null, out text, out empty)) { ITopologyConfigurationSession sessionForDC = ProvisioningReconciliationHelper.GetSessionForDC(adserver); RootDse rootDse = sessionForDC.GetRootDse(); Guid invocationIdByDC = sessionForDC.GetInvocationIdByDC(adserver); return(new ReconciliationCookie(ProvisioningReconciliationHelper.CurrentCookieVersion, adserver.DnsHostName, invocationIdByDC, rootDse.HighestCommittedUSN)); } } return(null); }