Esempio n. 1
0
 public static IDisposable SetTestHook(ComplianceBindingType bindingType, IComplianceTaskCreator testHook)
 {
     if (bindingType == ComplianceBindingType.ExchangeBinding)
     {
         return(ComplianceTaskCreatorFactory.exchangeBindingTaskCreatorInstance.SetTestHook(testHook));
     }
     throw new NotImplementedException();
 }
        protected override void InternalProcessRecord()
        {
            TaskLogger.LogEnter();
            if (this.DataObject == null)
            {
                return;
            }
            if (base.ExchangeRunspaceConfig == null)
            {
                base.WriteError(new ComplianceJobTaskException(Strings.UnableToDetermineExecutingUser), ErrorCategory.InvalidOperation, null);
            }
            TDataObject dataObject = this.DataObject;

            switch (dataObject.JobStatus)
            {
            case ComplianceJobStatus.Starting:
            case ComplianceJobStatus.InProgress:
            {
                TDataObject dataObject2 = this.DataObject;
                base.WriteError(new ComplianceJobTaskException(Strings.CannotStartRunningJob(dataObject2.Name)), ErrorCategory.InvalidOperation, this.DataObject);
                break;
            }
            }
            TDataObject dataObject3 = this.DataObject;

            dataObject3.Resume = this.Resume;
            TDataObject dataObject4 = this.DataObject;

            dataObject4.RunBy = ((ADObjectId)base.ExchangeRunspaceConfig.ExecutingUserIdentity).Name;
            TDataObject dataObject5 = this.DataObject;

            dataObject5.JobStartTime = DateTime.UtcNow;
            TDataObject dataObject6 = this.DataObject;

            dataObject6.JobRunId = CombGuidGenerator.NewGuid();
            TDataObject dataObject7 = this.DataObject;

            dataObject7.JobStatus = ComplianceJobStatus.Starting;
            base.DataSession.Save(this.DataObject);
            TDataObject dataObject8 = this.DataObject;
            MultiValuedProperty <string> exchangeBindings = dataObject8.ExchangeBindings;

            if (exchangeBindings != null && exchangeBindings.Count > 0)
            {
                try
                {
                    Dictionary <string, ComplianceBindingErrorType> invalidBindings = new Dictionary <string, ComplianceBindingErrorType>();
                    TDataObject dataObject9 = this.DataObject;
                    dataObject9.Bindings[ComplianceBindingType.ExchangeBinding].JobMaster = base.ExchangeRunspaceConfig.IdentityName;
                    TDataObject dataObject10 = this.DataObject;
                    dataObject10.Bindings[ComplianceBindingType.ExchangeBinding].JobStartTime = DateTime.UtcNow;
                    base.DataSession.Save(this.DataObject);
                    ComplianceMessage           item = this.CreateStartJobMessage();
                    InterExchangeWorkloadClient interExchangeWorkloadClient = new InterExchangeWorkloadClient();
                    Task <bool[]> task = interExchangeWorkloadClient.SendMessageAsync(new List <ComplianceMessage>
                    {
                        item
                    });
                    IComplianceTaskCreator instance        = ComplianceTaskCreatorFactory.GetInstance(ComplianceBindingType.ExchangeBinding);
                    IEnumerable <CompositeTask> enumerable = instance.CreateTasks(base.DataSession, this.DataObject, CreateTaskOptions.None, delegate(string invalidBinding, ComplianceBindingErrorType errorType)
                    {
                        invalidBindings.Add(invalidBinding, errorType);
                    });
                    int num = 0;
                    foreach (CompositeTask compositeTask in enumerable)
                    {
                        num++;
                        int percentCompleted = (num > 99) ? 99 : num;
                        base.WriteProgress(Strings.ComplianceSearchCreateTaskActivity, Strings.ComplianceSearchTasksCreated(num), percentCompleted);
                    }
                    TimeSpan timeout = TimeSpan.FromSeconds(5.0);
                    bool     flag    = true;
                    for (int i = 0; i < 6; i++)
                    {
                        if (System.Threading.Tasks.Task.WaitAll(new System.Threading.Tasks.Task[]
                        {
                            task
                        }, timeout))
                        {
                            flag = false;
                            break;
                        }
                        base.WriteVerbose(Strings.ComplianceSearchInitializingMessage);
                    }
                    if (flag)
                    {
                        TDataObject dataObject11 = this.DataObject;
                        dataObject11.JobStatus = ComplianceJobStatus.Failed;
                        base.ThrowTerminatingError(new ComplianceJobTaskException(Strings.ComplianceSearchTimeoutError), ErrorCategory.ConnectionError, this.DataObject);
                    }
                    else if (!task.Result[0])
                    {
                        TDataObject dataObject12 = this.DataObject;
                        dataObject12.JobStatus = ComplianceJobStatus.Failed;
                        base.ThrowTerminatingError(new ComplianceJobTaskException(Strings.ComplianceSearchSendStartMessageError("Exchange")), ErrorCategory.ConnectionError, this.DataObject);
                    }
                    this.CreateWarningMessageForInvalidBindings(invalidBindings);
                    TDataObject dataObject13 = this.DataObject;
                    dataObject13.Bindings[ComplianceBindingType.ExchangeBinding].JobStatus = ComplianceJobStatus.InProgress;
                    ComplianceJobProvider complianceJobProvider = (ComplianceJobProvider)base.DataSession;
                    TDataObject           dataObject14          = this.DataObject;
                    complianceJobProvider.UpdateWorkloadResults(dataObject14.JobRunId, null, ComplianceBindingType.ExchangeBinding, ComplianceJobStatus.InProgress);
                }
                catch (Exception ex)
                {
                    TDataObject dataObject15 = this.DataObject;
                    dataObject15.JobStatus = ComplianceJobStatus.Failed;
                    base.DataSession.Save(this.DataObject);
                    throw ex;
                }
            }
            TDataObject dataObject16 = this.DataObject;

            dataObject16.Bindings[ComplianceBindingType.PublicFolderBinding].JobStatus = ComplianceJobStatus.Succeeded;
            ComplianceJobProvider complianceJobProvider2 = (ComplianceJobProvider)base.DataSession;
            TDataObject           dataObject17           = this.DataObject;

            complianceJobProvider2.UpdateWorkloadResults(dataObject17.JobRunId, null, ComplianceBindingType.PublicFolderBinding, ComplianceJobStatus.Succeeded);
            TDataObject dataObject18 = this.DataObject;

            dataObject18.Bindings[ComplianceBindingType.SharePointBinding].JobStatus = ComplianceJobStatus.Succeeded;
            ComplianceJobProvider complianceJobProvider3 = (ComplianceJobProvider)base.DataSession;
            TDataObject           dataObject19           = this.DataObject;

            complianceJobProvider3.UpdateWorkloadResults(dataObject19.JobRunId, null, ComplianceBindingType.SharePointBinding, ComplianceJobStatus.Succeeded);
            TaskLogger.LogExit();
        }