コード例 #1
0
        // Token: 0x0600124C RID: 4684 RVA: 0x00069300 File Offset: 0x00067500
        public AssistantTaskContext BeginProcessingOAB(AssistantTaskContext assistantTaskContext)
        {
            OABGeneratorTaskContext oabgeneratorTaskContext = assistantTaskContext as OABGeneratorTaskContext;
            AssistantStep           assistantStep           = null;

            OABLogger.LogRecord(TraceType.FunctionTrace, "OABGeneratorAssistant.BeginProcessingOAB: start", new object[0]);
            OABGeneratorMailboxData oabgeneratorMailboxData = (OABGeneratorMailboxData)oabgeneratorTaskContext.Args.MailboxData;

            try
            {
                lock (this.currentOABsInProcessing)
                {
                    if (this.currentOABsInProcessing.Contains(oabgeneratorTaskContext.CurrentOAB.Id.ObjectGuid))
                    {
                        OABGeneratorAssistant.Tracer.TraceDebug <ADObjectId>((long)this.GetHashCode(), "OABGeneratorAssistant.BeginProcessingOAB: ignoring on-demand request requested OAB is already in processing: {0}.", oabgeneratorTaskContext.CurrentOAB.Id);
                        return(null);
                    }
                    this.currentOABsInProcessing.Add(oabgeneratorTaskContext.CurrentOAB.Id.ObjectGuid);
                }
                OABGeneratorTaskContext oabgeneratorTaskContext2 = oabgeneratorTaskContext;
                oabgeneratorTaskContext2.Cleanup     = (Action <OABGeneratorTaskContext>)Delegate.Combine(oabgeneratorTaskContext2.Cleanup, new Action <OABGeneratorTaskContext>(this.RemoveCurrentOABFromInProcessingList));
                oabgeneratorTaskContext.OABGenerator = new OABGenerator(oabgeneratorTaskContext.PerOrgAdSystemConfigSession, oabgeneratorTaskContext.CurrentOAB, oabgeneratorMailboxData.MailboxSid, oabgeneratorMailboxData.MailboxDomain, new Action(this.AbortProcessingOnShutdown));
                OABLogger.LogEvent(InfoWorkerEventLogConstants.Tuple_OABGenerationStartGeneration, new object[]
                {
                    oabgeneratorTaskContext.CurrentOAB,
                    oabgeneratorTaskContext.CurrentOAB.DistinguishedName,
                    oabgeneratorTaskContext.CurrentOAB.Id.ObjectGuid
                });
                oabgeneratorTaskContext.OABGenerator.Initialize();
                oabgeneratorTaskContext.ReturnStep.Push(new AssistantStep(this.FinishProcessingOAB));
                assistantStep = new AssistantStep(oabgeneratorTaskContext.OABGenerator.PrepareFilesForOABGeneration);
            }
            finally
            {
                OABLogger.LogRecord(TraceType.FunctionTrace, "OABGeneratorAssistant.BeginProcessingOAB: finish", new object[0]);
                if (assistantStep != null)
                {
                    oabgeneratorTaskContext.OABStep = assistantStep;
                }
            }
            return(OABGeneratorTaskContext.FromOABGeneratorTaskContext(oabgeneratorTaskContext));
        }
コード例 #2
0
        // Token: 0x06001338 RID: 4920 RVA: 0x0006FD1C File Offset: 0x0006DF1C
        public AssistantTaskContext ProduceSortedFlatFile(AssistantTaskContext assistantTaskContext)
        {
            OABGeneratorTaskContext oabgeneratorTaskContext = assistantTaskContext as OABGeneratorTaskContext;
            AssistantStep           oabstep = oabgeneratorTaskContext.ReturnStep.Pop();

            OABLogger.LogRecord(TraceType.FunctionTrace, "AddressListFileGenerator.ProduceSortedFlatFile: start", new object[0]);
            try
            {
                using (new StopwatchPerformanceTracker("Total", this.stats))
                {
                    using (new CpuPerformanceTracker("Total", this.stats))
                    {
                        using (new StopwatchPerformanceTracker("ProduceSortedFlatFile", this.stats))
                        {
                            using (new CpuPerformanceTracker("ProduceSortedFlatFile", this.stats))
                            {
                                this.stats.DomainControllersUsed.Add(this.adAddressListEnumerator.LastUsedDc);
                                this.uncompressedSortedFlatFile = this.fileSet.Create("OAB");
                                if (this.allResultsInSinglePage)
                                {
                                    this.CreateFlatFileFromSinglePageOfResults(this.uncompressedSortedFlatFile, this.sortedEntries);
                                }
                                else
                                {
                                    this.CreateFlatFileFromMultiplePagesOfResults(this.uncompressedSortedFlatFile, this.tempFiles);
                                }
                            }
                        }
                    }
                }
            }
            finally
            {
                OABLogger.LogRecord(TraceType.FunctionTrace, "AddressListFileGenerator.ProduceSortedFlatFile: finish", new object[0]);
                oabgeneratorTaskContext.OABStep = oabstep;
            }
            return(OABGeneratorTaskContext.FromOABGeneratorTaskContext(oabgeneratorTaskContext));
        }
コード例 #3
0
        // Token: 0x0600118E RID: 4494 RVA: 0x000668D4 File Offset: 0x00064AD4
        public override AssistantTaskContext InitialStep(AssistantTaskContext context)
        {
            DateTime             utcNow    = DateTime.UtcNow;
            DateTime?            dateTime  = null;
            DateTime?            dateTime2 = null;
            DateTime?            dateTime3 = null;
            DateTime?            dateTime4 = null;
            Guid                 guid      = Guid.Empty;
            AssistantTaskContext result;

            try
            {
                this.ValidateContext(context);
                guid = context.Args.StoreSession.MailboxGuid;
                ExDateTime?valueOrDefault = context.Args.StoreSession.Mailbox.GetValueOrDefault <ExDateTime?>(MailboxSchema.InferenceTrainingLastAttemptTimestamp, null);
                if (valueOrDefault != null)
                {
                    dateTime = new DateTime?(valueOrDefault.Value.UniversalTime);
                }
                valueOrDefault = context.Args.StoreSession.Mailbox.GetValueOrDefault <ExDateTime?>(MailboxSchema.InferenceTrainingLastSuccessTimestamp, null);
                if (valueOrDefault != null)
                {
                    dateTime2 = new DateTime?(valueOrDefault.Value.UniversalTime);
                }
                valueOrDefault = context.Args.StoreSession.Mailbox.GetValueOrDefault <ExDateTime?>(MailboxSchema.InferenceTruthLoggingLastAttemptTimestamp, null);
                if (valueOrDefault != null)
                {
                    dateTime3 = new DateTime?(valueOrDefault.Value.UniversalTime);
                }
                valueOrDefault = context.Args.StoreSession.Mailbox.GetValueOrDefault <ExDateTime?>(MailboxSchema.InferenceTruthLoggingLastSuccessTimestamp, null);
                if (valueOrDefault != null)
                {
                    dateTime4 = new DateTime?(valueOrDefault.Value.UniversalTime);
                }
                MailboxSession mailboxSession = context.Args.StoreSession as MailboxSession;
                if (mailboxSession == null)
                {
                    string text = "Reason=NonMailboxSession";
                    this.trainingStatusLogger.LogStatus(guid, 4, new DateTime?(utcNow), dateTime, dateTime2, text);
                    this.truthLabelsStatusLogger.LogStatus(mailboxSession.MailboxGuid, 4, new DateTime?(utcNow), dateTime3, dateTime4, text);
                    this.groupingModelTrainingStatusLogger.LogStatus(guid, 4, text);
                    result = null;
                }
                else if (mailboxSession.MailboxOwner.RecipientTypeDetails != RecipientTypeDetails.UserMailbox && mailboxSession.MailboxOwner.RecipientTypeDetails != RecipientTypeDetails.LinkedMailbox)
                {
                    string text2 = string.Format("Reason=NonUserMailbox#Name={0}#Type={1}", mailboxSession.MailboxOwner.MailboxInfo.DisplayName, mailboxSession.MailboxOwner.RecipientTypeDetails.ToString());
                    this.trainingStatusLogger.LogStatus(mailboxSession.MailboxGuid, 4, new DateTime?(utcNow), dateTime, dateTime2, text2);
                    this.truthLabelsStatusLogger.LogStatus(mailboxSession.MailboxGuid, 4, new DateTime?(utcNow), dateTime3, dateTime4, text2);
                    this.groupingModelTrainingStatusLogger.LogStatus(mailboxSession.MailboxGuid, 4, text2);
                    result = null;
                }
                else
                {
                    VariantConfigurationSnapshot flightFeatures = FlightModule.GetFlightFeatures(mailboxSession);
                    Exception           ex;
                    OrganizationContext organizationInformation = this.orgContentExtractor.GetOrganizationInformation(mailboxSession.MailboxOwner, new ADRecipientInfo.TraceDelegate(this.DiagnosticsSession.TraceDebug), new ADRecipientInfo.TraceDelegate(this.DiagnosticsSession.TraceError), ref ex);
                    FolderDataSelectionConfig.RefreshSettings();
                    List <Exception> list = new List <Exception>();
                    if (ex != null)
                    {
                        list.Add(ex);
                    }
                    OutlookActivityManager.SafeProcess(mailboxSession);
                    ActivityHistory      activityHistory      = new ActivityHistory(mailboxSession, utcNow);
                    ModelVersionSelector modelVersionSelector = InferenceXsoUtil.CreateModelVersionSelector(ServerModelConfigurationWrapper.CurrentWrapper, mailboxSession, delegate(string str)
                    {
                        this.DiagnosticsSession.TraceDebug(str, new object[0]);
                    });
                    result = new InferenceTrainingTaskContext(context.MailboxData, context.Job, new AssistantStep(this.TrainStep), new MailboxTrainingState(modelVersionSelector, organizationInformation, activityHistory, utcNow, dateTime, dateTime2, flightFeatures, list), new MailboxTruthLoggingState(utcNow, dateTime3, dateTime4, activityHistory));
                }
            }
            catch (Exception ex2)
            {
                string text3 = string.Format("Reason=InitialStepFailed#Exception={0}", InferenceCommonUtility.StringizeException(ex2));
                this.trainingStatusLogger.LogStatus(guid, 3, new DateTime?(utcNow), dateTime, dateTime2, text3);
                this.truthLabelsStatusLogger.LogStatus(guid, 3, new DateTime?(utcNow), dateTime3, dateTime4, text3);
                this.groupingModelTrainingStatusLogger.LogStatus(guid, 3, text3);
                throw;
            }
            return(result);
        }
コード例 #4
0
 // Token: 0x06001193 RID: 4499 RVA: 0x00067300 File Offset: 0x00065500
 private void ValidateContext(AssistantTaskContext context)
 {
     this.ValidateContext(context, null);
 }
コード例 #5
0
 // Token: 0x060000E1 RID: 225 RVA: 0x00005763 File Offset: 0x00003963
 public virtual AssistantTaskContext InitialStep(AssistantTaskContext context)
 {
     this.Invoke(context.Args, context.CustomDataToLog);
     return(null);
 }
コード例 #6
0
        // Token: 0x06001337 RID: 4919 RVA: 0x0006F84C File Offset: 0x0006DA4C
        public AssistantTaskContext ProcessOnePageOfADResults(AssistantTaskContext assistantTaskContext)
        {
            OABGeneratorTaskContext oabgeneratorTaskContext = assistantTaskContext as OABGeneratorTaskContext;
            AssistantStep           oabstep = new AssistantStep(this.ProduceSortedFlatFile);

            OABLogger.LogRecord(TraceType.FunctionTrace, "AddressListFileGenerator.ProcessOnePageOfADResults: start", new object[0]);
            try
            {
                using (new StopwatchPerformanceTracker("Total", this.stats))
                {
                    using (new CpuPerformanceTracker("Total", this.stats))
                    {
                        using (new StopwatchPerformanceTracker("ProcessOnePageOfADResults", this.stats))
                        {
                            using (new CpuPerformanceTracker("ProcessOnePageOfADResults", this.stats))
                            {
                                if (this.adAddressListEnumerator.RetrievedAllData == null || !this.adAddressListEnumerator.RetrievedAllData.Value)
                                {
                                    this.sortedEntries          = this.adAddressListEnumerator.GetNextPageSorted();
                                    this.allResultsInSinglePage = (this.firstPage && this.adAddressListEnumerator.RetrievedAllData != null && this.adAddressListEnumerator.RetrievedAllData.Value);
                                    this.firstPage = false;
                                    if (!this.allResultsInSinglePage)
                                    {
                                        using (new StopwatchPerformanceTracker("ProcessOnePageOfADResults.ResolveLinks", this.stats))
                                        {
                                            using (new CpuPerformanceTracker("ProcessOnePageOfADResults.ResolveLinks", this.stats))
                                            {
                                                using (new ADPerformanceTracker("ProcessOnePageOfADResults.ResolveLinks", this.stats))
                                                {
                                                    using (new ActiveManagerPerformanceTracker("ProcessOnePageOfADResults.ResolveLinks", this.stats))
                                                    {
                                                        this.propertyManager.ResolveLinks(this.sortedEntries);
                                                    }
                                                }
                                            }
                                        }
                                        FileStream fileStream = this.fileSet.Create("TMP");
                                        this.tempFiles.Add(fileStream);
                                        this.stats.TotalNumberOfTempFiles++;
                                        using (new StopwatchPerformanceTracker("ProcessOnePageOfADResults.WriteTempFiles", this.stats))
                                        {
                                            using (new CpuPerformanceTracker("ProcessOnePageOfADResults.WriteTempFiles", this.stats))
                                            {
                                                using (IOCostStream iocostStream = new IOCostStream(new NoCloseStream(fileStream)))
                                                {
                                                    using (new FileSystemPerformanceTracker("ProcessOnePageOfADResults.WriteTempFiles", iocostStream, this.stats))
                                                    {
                                                        using (BinaryWriter binaryWriter = new BinaryWriter(iocostStream))
                                                        {
                                                            foreach (ADRawEntry adrawEntry in this.sortedEntries)
                                                            {
                                                                this.abortProcessingOnShutdown();
                                                                OABFileRecord oabfileRecord = this.CreateDetailsRecord(adrawEntry);
                                                                binaryWriter.Write(((Guid)adrawEntry[ADObjectSchema.ExchangeObjectId]).ToByteArray());
                                                                oabfileRecord.WriteTo(binaryWriter);
                                                            }
                                                            this.stats.IODuration += iocostStream.Writing;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                if (this.adAddressListEnumerator.RetrievedAllData == null || !this.adAddressListEnumerator.RetrievedAllData.Value)
                                {
                                    oabstep = new AssistantStep(this.ProcessOnePageOfADResults);
                                }
                            }
                        }
                    }
                }
            }
            finally
            {
                OABLogger.LogRecord(TraceType.FunctionTrace, "AddressListFileGenerator.ProcessOnePageOfADResults: finish", new object[0]);
                oabgeneratorTaskContext.OABStep = oabstep;
            }
            return(OABGeneratorTaskContext.FromOABGeneratorTaskContext(oabgeneratorTaskContext));
        }
コード例 #7
0
 // Token: 0x060015A1 RID: 5537 RVA: 0x0007A7FA File Offset: 0x000789FA
 public override AssistantTaskContext InitialStep(AssistantTaskContext context)
 {
     this.TraceDebugExecuting(ExTraceGlobals.ProbeTimeBasedAssistantTracer.IsTraceEnabled(TraceType.DebugTrace) ? MethodBase.GetCurrentMethod().Name : string.Empty);
     return(base.InitialStep(context));
 }
        // Token: 0x0600145A RID: 5210 RVA: 0x0007583C File Offset: 0x00073A3C
        private AssistantTaskContext CollectionStep(AssistantTaskContext context)
        {
            this.tracer.TraceFunction((long)this.GetHashCode(), "InferenceDataCollectionAssistant.CollectionStep");
            ExAssert.RetailAssert(context != null, "Collection step invoked with a null task context");
            StoreSession storeSession = context.Args.StoreSession;
            InferenceDataCollectionTaskContext inferenceDataCollectionTaskContext = context as InferenceDataCollectionTaskContext;

            ExAssert.RetailAssert(inferenceDataCollectionTaskContext != null, "Collection step invoked with an invalid task context. {0}", new object[]
            {
                context.GetType().FullName
            });
            this.diagnosticLogger.LogInformation("Starting collection task. CollectionGuid={0}, Init={1}, Watermark={2}, MailboxGuid={3}, Name={4}", new object[]
            {
                inferenceDataCollectionTaskContext.MailboxProcessingState.CollectionGuid,
                inferenceDataCollectionTaskContext.MailboxProcessingState.IsInitialized,
                (inferenceDataCollectionTaskContext.MailboxProcessingState.Watermark == null) ? "None" : inferenceDataCollectionTaskContext.MailboxProcessingState.Watermark.DocumentId.ToString(),
                storeSession.MailboxGuid,
                storeSession.MailboxOwner.MailboxInfo.DisplayName
            });
            Exception exception = null;

            MailboxProcessor.ProcessingResult processingResult;
            try
            {
                MailboxProcessor mailboxProcessor = new MailboxProcessor(this.collectionContext, storeSession, inferenceDataCollectionTaskContext.MailboxProcessingState);
                processingResult = mailboxProcessor.Process();
            }
            catch (NonUniqueRecipientException ex)
            {
                processingResult = 1;
                exception        = ex;
            }
            AssistantTaskContext result;

            if (processingResult == 2)
            {
                this.diagnosticLogger.LogInformation("Yielding collection task. CollectionGuid={0}, Init={1}, Watermark={2}, MailboxGuid={3}, Name={4}", new object[]
                {
                    inferenceDataCollectionTaskContext.MailboxProcessingState.CollectionGuid,
                    inferenceDataCollectionTaskContext.MailboxProcessingState.IsInitialized,
                    (inferenceDataCollectionTaskContext.MailboxProcessingState.Watermark == null) ? "None" : inferenceDataCollectionTaskContext.MailboxProcessingState.Watermark.DocumentId.ToString(),
                    storeSession.MailboxGuid,
                    storeSession.MailboxOwner.MailboxInfo.DisplayName
                });
                result = new InferenceDataCollectionTaskContext(context.MailboxData, context.Job, new AssistantStep(this.CollectionStep), inferenceDataCollectionTaskContext.MailboxProcessingState);
            }
            else
            {
                storeSession.Mailbox[MailboxSchema.InferenceDataCollectionProcessingState] = new byte[]
                {
                    1
                };
                storeSession.Mailbox.Save();
                if (processingResult == 1)
                {
                    this.diagnosticLogger.LogError("Failed collection task. CollectionGuid={0}, Init={1}, Watermark={2}, MailboxGuid={3}, Name={4}, Exception={5}", new object[]
                    {
                        inferenceDataCollectionTaskContext.MailboxProcessingState.CollectionGuid,
                        inferenceDataCollectionTaskContext.MailboxProcessingState.IsInitialized,
                        (inferenceDataCollectionTaskContext.MailboxProcessingState.Watermark == null) ? "None" : inferenceDataCollectionTaskContext.MailboxProcessingState.Watermark.DocumentId.ToString(),
                        storeSession.MailboxGuid,
                        storeSession.MailboxOwner.MailboxInfo.DisplayName,
                        Util.StringizeException(exception)
                    });
                }
                else
                {
                    this.diagnosticLogger.LogInformation("Finished collection task. CollectionGuid={0}, Init={1}, Watermark={2}, MailboxGuid={3}, Name={4}", new object[]
                    {
                        inferenceDataCollectionTaskContext.MailboxProcessingState.CollectionGuid,
                        inferenceDataCollectionTaskContext.MailboxProcessingState.IsInitialized,
                        (inferenceDataCollectionTaskContext.MailboxProcessingState.Watermark == null) ? "None" : inferenceDataCollectionTaskContext.MailboxProcessingState.Watermark.DocumentId.ToString(),
                        storeSession.MailboxGuid,
                        storeSession.MailboxOwner.MailboxInfo.DisplayName
                    });
                }
                result = null;
            }
            InferenceDataCollectionAssistant.PostInferenceDataCollectionProgressNotification(storeSession.MailboxGuid, processingResult.ToString());
            if (processingResult == null)
            {
                InferenceDataCollectionAssistant.PostInferenceDataCollectionSuccessNotification(storeSession.MailboxGuid);
            }
            return(result);
        }
コード例 #9
0
        // Token: 0x0600124B RID: 4683 RVA: 0x00069084 File Offset: 0x00067284
        public AssistantTaskContext InitializeOABGeneration(AssistantTaskContext assistantTaskContext)
        {
            OABGeneratorTaskContext oabgeneratorTaskContext = assistantTaskContext as OABGeneratorTaskContext;
            AssistantStep           oabstep = new AssistantStep(this.BeginProcessingOAB);

            OABLogger.LogRecord(TraceType.FunctionTrace, "OABGeneratorAssistant.InitialStep: start", new object[0]);
            OABGeneratorMailboxData oabgeneratorMailboxData = (OABGeneratorMailboxData)oabgeneratorTaskContext.Args.MailboxData;

            try
            {
                OrganizationId organizationId = oabgeneratorMailboxData.OrganizationId;
                if (organizationId == null)
                {
                    throw new ArgumentException("unable to determine organization Id");
                }
                oabgeneratorTaskContext.PerOrgAdSystemConfigSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(false, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(organizationId), 502, "InitializeOABGeneration", "f:\\15.00.1497\\sources\\dev\\MailboxAssistants\\src\\assistants\\OABGenerator\\OABGeneratorAssistant.cs");
                if (oabgeneratorMailboxData.OfflineAddressBook == Guid.Empty)
                {
                    OABLogger.LogRecord(TraceType.InfoTrace, "OABGenerator invoked for scheduled generation of OABs for Org '{0}' on DatabaseGuid={1}", new object[]
                    {
                        organizationId,
                        oabgeneratorTaskContext.Args.MailboxData.DatabaseGuid
                    });
                    oabgeneratorTaskContext.OABsToGenerate = this.GetOABsFromAD(oabgeneratorTaskContext, Guid.Empty);
                }
                else
                {
                    OABLogger.LogRecord(TraceType.InfoTrace, "OABGenerator invoked {0} for on-demand generation of OAB {1} for Org {2} DatabaseGuid={3}, MailboxGuid={4}", new object[]
                    {
                        oabgeneratorMailboxData.JobDescription,
                        oabgeneratorMailboxData.OfflineAddressBook,
                        organizationId,
                        oabgeneratorTaskContext.Args.MailboxData.DatabaseGuid,
                        oabgeneratorMailboxData.MailboxGuid
                    });
                    oabgeneratorTaskContext.OABsToGenerate = this.GetOABsFromAD(oabgeneratorTaskContext, oabgeneratorMailboxData.OfflineAddressBook);
                    if (oabgeneratorTaskContext.OABsToGenerate == null || oabgeneratorTaskContext.OABsToGenerate.Count != 1)
                    {
                        OABLogger.LogEvent(InfoWorkerEventLogConstants.Tuple_CannotFindOAB, new object[]
                        {
                            oabgeneratorMailboxData.OfflineAddressBook
                        });
                    }
                }
                if (oabgeneratorTaskContext.OABsToGenerate == null || oabgeneratorTaskContext.OABsToGenerate.Count == 0)
                {
                    OABLogger.LogRecord(TraceType.InfoTrace, "InvokeInternal. No OABs found to generate for DatabaseGuid={0}, MailboxGuid={1}", new object[]
                    {
                        oabgeneratorMailboxData.DatabaseGuid,
                        oabgeneratorMailboxData.MailboxGuid.ToString(),
                        oabgeneratorMailboxData.Guid
                    });
                    if (oabgeneratorTaskContext.Cleanup != null)
                    {
                        oabgeneratorTaskContext.Cleanup(oabgeneratorTaskContext);
                    }
                    return(null);
                }
                OABLogger.LogRecord(TraceType.InfoTrace, "Found {0} OAB(s) to generate", new object[]
                {
                    oabgeneratorTaskContext.OABsToGenerate.Count
                });
                oabgeneratorTaskContext.CurrentOAB = oabgeneratorTaskContext.OABsToGenerate.Dequeue();
            }
            finally
            {
                OABLogger.LogRecord(TraceType.FunctionTrace, "OABGeneratorAssistant.InitialStep: finish", new object[0]);
                oabgeneratorTaskContext.OABStep = oabstep;
            }
            return(OABGeneratorTaskContext.FromOABGeneratorTaskContext(oabgeneratorTaskContext));
        }
コード例 #10
0
        // Token: 0x0600101C RID: 4124 RVA: 0x0005E0C8 File Offset: 0x0005C2C8
        public override AssistantTaskContext InitialStep(AssistantTaskContext context)
        {
            Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "Entering DirectoryProcessorAssistant.InitialStep", new object[0]);
            DirectoryProcessorMailboxData directoryProcessorMailboxData = context.MailboxData as DirectoryProcessorMailboxData;
            AssistantTaskContext          result;

            try
            {
                Queue <TaskQueueItem> queue = new Queue <TaskQueueItem>();
                RunData runData             = this.CreateRunData(directoryProcessorMailboxData);
                GrammarGenerator.CleanUpOldGrammarRuns(runData, DirectoryProcessorAssistant.Tracer);
                UmGlobals.ExEvent.LogEvent(UMEventLogConstants.Tuple_DirectoryProcessorStarted, null, new object[]
                {
                    runData.TenantId,
                    runData.MailboxGuid,
                    runData.RunId
                });
                List <DirectoryProcessorBaseTask> generators = this.GetGenerators(runData);
                List <DirectoryProcessorBaseTask> list       = this.FilterGenerators(generators, runData, RecipientType.User);
                List <DirectoryProcessorBaseTask> list2      = this.FilterGenerators(generators, runData, RecipientType.Group);
                if (list.Count > 0)
                {
                    queue.Enqueue(new TaskQueueItem(ADCrawler.Create(runData, RecipientType.User), RecipientType.User));
                }
                foreach (DirectoryProcessorBaseTask task in list)
                {
                    queue.Enqueue(new TaskQueueItem(task, RecipientType.User));
                }
                if (list2.Count > 0)
                {
                    queue.Enqueue(new TaskQueueItem(ADCrawler.Create(runData, RecipientType.Group), RecipientType.Group));
                }
                foreach (DirectoryProcessorBaseTask task2 in list2)
                {
                    queue.Enqueue(new TaskQueueItem(task2, RecipientType.Group));
                }
                DirectoryProcessorBaseTaskContext directoryProcessorBaseTaskContext = new DirectoryProcessorBaseTaskContext(context.MailboxData, context.Job, queue, new AssistantStep(this.DoTask), TaskStatus.NoError, runData, new List <DirectoryProcessorBaseTask>());
                result = directoryProcessorBaseTaskContext;
            }
            catch (Exception ex)
            {
                string tenantIdentifiableDN = RunData.GetTenantIdentifiableDN(directoryProcessorMailboxData.OrgId);
                Utilities.ErrorTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant.InitialStep, Exception='{0}' for '{1}' in database '{2}'", new object[]
                {
                    ex,
                    tenantIdentifiableDN,
                    directoryProcessorMailboxData.DatabaseGuid
                });
                UmGlobals.ExEvent.LogEvent(UMEventLogConstants.Tuple_DirectoryProcessorInitialStepEncounteredException, null, new object[]
                {
                    tenantIdentifiableDN,
                    directoryProcessorMailboxData.DatabaseGuid,
                    CommonUtil.ToEventLogString(ex)
                });
                if (ex is IOException)
                {
                    throw new SkipException(ex);
                }
                throw;
            }
            return(result);
        }
コード例 #11
0
        // Token: 0x0600101D RID: 4125 RVA: 0x0005E330 File Offset: 0x0005C530
        public AssistantTaskContext DoTask(AssistantTaskContext context)
        {
            DirectoryProcessorBaseTaskContext directoryProcessorBaseTaskContext = context as DirectoryProcessorBaseTaskContext;

            ExAssert.RetailAssert(null != directoryProcessorBaseTaskContext, "Check InitialStep that it returns DirectoryProcessorBaseTaskContext. ");
            ExAssert.RetailAssert(null != directoryProcessorBaseTaskContext.TaskQueue, "Check InitialStep that it assigns TaskQueue to DirectoryProcessorBaseTaskContext. ");
            Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "Entering DirectoryProcessorAssistant.DoTask. taskContext='{0}' taskQueue size='{1}'", new object[]
            {
                directoryProcessorBaseTaskContext.ClassName,
                directoryProcessorBaseTaskContext.TaskQueue.Count
            });
            if (directoryProcessorBaseTaskContext.TaskQueue.Count > 0)
            {
                TaskQueueItem taskQueueItem = directoryProcessorBaseTaskContext.TaskQueue.Peek();
                ExAssert.RetailAssert(null != taskQueueItem, "Should not have added null taskQueueItem into queue. Check enqueue logic. ");
                ExAssert.RetailAssert(null != taskQueueItem.Task, "Should not have added null task into queue. Check enqueue logic. ");
                ExAssert.RetailAssert(taskQueueItem.Task.RunData == directoryProcessorBaseTaskContext.RunData, "They should reference to same RunData object. Check DirectoryProcessorAssistant.InitialStep. ");
                AssistantTaskContext assistantTaskContext = null;
                try
                {
                    Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant.DoTask calls Task.DoChunkWork Task='{0}' TaskRecipientType='{1}'", new object[]
                    {
                        taskQueueItem.Task.ClassName,
                        taskQueueItem.TaskRecipientType.ToString()
                    });
                    assistantTaskContext = taskQueueItem.Task.DoChunk(directoryProcessorBaseTaskContext, taskQueueItem.TaskRecipientType);
                }
                catch (Exception e)
                {
                    this.LogException(taskQueueItem.Task.RunData, e, taskQueueItem.Task, directoryProcessorBaseTaskContext);
                    if (taskQueueItem.Task.ShouldWatson(e))
                    {
                        throw;
                    }
                    assistantTaskContext = null;
                }
                if (assistantTaskContext == null)
                {
                    Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant.DoTask Task='{0}' TaskRecipientType='{1}' is done. ", new object[]
                    {
                        taskQueueItem.Task.ClassName,
                        taskQueueItem.TaskRecipientType.ToString()
                    });
                    if (taskQueueItem.Task.ShouldDeferFinalize)
                    {
                        if (!directoryProcessorBaseTaskContext.DeferredFinalizeTasks.Contains(taskQueueItem.Task))
                        {
                            directoryProcessorBaseTaskContext.DeferredFinalizeTasks.Add(taskQueueItem.Task);
                            Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "Task {0} TaskRecipientType='{1}' is added to deferred finalize list. ", new object[]
                            {
                                taskQueueItem.Task.ClassName,
                                taskQueueItem.TaskRecipientType.ToString()
                            });
                        }
                    }
                    else
                    {
                        this.FinalizeTask(taskQueueItem.Task, directoryProcessorBaseTaskContext);
                    }
                    directoryProcessorBaseTaskContext.TaskQueue.Dequeue();
                    assistantTaskContext = new DirectoryProcessorBaseTaskContext(directoryProcessorBaseTaskContext.MailboxData, directoryProcessorBaseTaskContext.Job, directoryProcessorBaseTaskContext.TaskQueue, directoryProcessorBaseTaskContext.Step, directoryProcessorBaseTaskContext.TaskStatus, directoryProcessorBaseTaskContext.RunData, directoryProcessorBaseTaskContext.DeferredFinalizeTasks);
                }
                return(assistantTaskContext);
            }
            Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant has {0} deferred finalize tasks. Finalize them. ", new object[]
            {
                directoryProcessorBaseTaskContext.DeferredFinalizeTasks.Count
            });
            foreach (DirectoryProcessorBaseTask task in directoryProcessorBaseTaskContext.DeferredFinalizeTasks)
            {
                this.FinalizeTask(task, directoryProcessorBaseTaskContext);
            }
            directoryProcessorBaseTaskContext.DeferredFinalizeTasks.Clear();
            Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant has done all tasks. ", new object[0]);
            UmGlobals.ExEvent.LogEvent(UMEventLogConstants.Tuple_DirectoryProcessorCompleted, null, new object[]
            {
                directoryProcessorBaseTaskContext.RunData.TenantId,
                directoryProcessorBaseTaskContext.RunData.MailboxGuid,
                directoryProcessorBaseTaskContext.RunData.RunId
            });
            return(null);
        }