Exemple #1
0
        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);
        }