private void ComputeAndPublishPeopleIKnow(MailboxProcessorRequest request) { this.tracer.TraceDebug <MailboxProcessorRequest>((long)this.GetHashCode(), "MailboxProcessor: computing and publishing people I know collection for {0}", request); using (new StopwatchPerformanceTracker("ComputeAndPublishPeopleIKnow", this.perfLogger)) { using (new StorePerformanceTracker("ComputeAndPublishPeopleIKnow", this.perfLogger)) { using (new CpuPerformanceTracker("ComputeAndPublishPeopleIKnow", this.perfLogger)) { try { this.publisherFactory.Create().Publish((IMailboxSession)request.MailboxSession); } catch (DefaultFolderNameClashException arg) { this.tracer.TraceError <MailboxProcessorRequest, DefaultFolderNameClashException>((long)this.GetHashCode(), "MailboxProcessor: computation and/or publishing of people I know for {0} FAILED at initialization of a default folder. Exception: {1}", request, arg); } catch (StoragePermanentException arg2) { this.tracer.TraceError <MailboxProcessorRequest, StoragePermanentException>((long)this.GetHashCode(), "MailboxProcessor: computation and/or publishing of people I know for {0} FAILED with a PERMANENT storage exception. Exception: {1}", request, arg2); throw; } catch (StorageTransientException arg3) { this.tracer.TraceError <MailboxProcessorRequest, StorageTransientException>((long)this.GetHashCode(), "MailboxProcessor: computation and/or publishing of people I know for {0} FAILED with a TRANSIENT storage exception. Exception: {1}", request, arg3); throw; } } } } }
public void Process(MailboxProcessorRequest request) { ArgumentValidator.ThrowIfNull("request", request); if (!this.IsMailboxInterestingAdditionalTests(request)) { return; } this.ComputeAndPublishPeopleIKnow(request); }
private bool IsMailboxInterestingAdditionalTests(MailboxProcessorRequest request) { if (request.MailboxSession == null) { this.tracer.TraceError <MailboxProcessorRequest>((long)this.GetHashCode(), "MailboxProcessor: NOT processing {0} because session has not been initialized.", request); return(false); } IMailboxSession mailboxSession = request.MailboxSession as IMailboxSession; if (mailboxSession == null) { this.tracer.TraceDebug <MailboxProcessorRequest>((long)this.GetHashCode(), "MailboxProcessor: NOT processing {0} because it's not attached to a mailbox session.", request); return(false); } if (mailboxSession.MailboxOwner == null) { this.tracer.TraceDebug <MailboxProcessorRequest>((long)this.GetHashCode(), "MailboxProcessor: NOT processing {0} because owner has not been initialized.", request); return(false); } if (!request.IsFlightEnabled) { this.tracer.TraceDebug <MailboxProcessorRequest>((long)this.GetHashCode(), "MailboxProcessor: NOT processing {0} because it's not enabled in flight.", request); return(false); } RecipientTypeDetails recipientTypeDetails = mailboxSession.MailboxOwner.RecipientTypeDetails; if (recipientTypeDetails <= RecipientTypeDetails.DiscoveryMailbox) { if (recipientTypeDetails <= RecipientTypeDetails.LinkedMailbox) { if (recipientTypeDetails < RecipientTypeDetails.UserMailbox) { goto IL_FC; } switch ((int)(recipientTypeDetails - RecipientTypeDetails.UserMailbox)) { case 0: case 1: return(true); } } if (recipientTypeDetails != RecipientTypeDetails.ArbitrationMailbox && recipientTypeDetails != RecipientTypeDetails.DiscoveryMailbox) { } } else if (recipientTypeDetails != RecipientTypeDetails.MonitoringMailbox && recipientTypeDetails != RecipientTypeDetails.GroupMailbox && recipientTypeDetails != RecipientTypeDetails.AuditLogMailbox) { } IL_FC: this.tracer.TraceDebug <MailboxProcessorRequest, RecipientTypeDetails>((long)this.GetHashCode(), "MailboxProcessor: NOT processing {0} because {1} is not a supported type.", request, mailboxSession.MailboxOwner.RecipientTypeDetails); return(false); }
public bool IsInteresting(MailboxProcessorRequest request, DateTime utcNow) { ArgumentValidator.ThrowIfNull("request", request); if (this.MailboxTypeNotInteresting(request)) { this.tracer.TraceDebug <MailboxProcessorRequest>((long)this.GetHashCode(), "MailboxProcessor: {0} has a type that is NOT interesting.", request); return(false); } if (this.LastLogonTooLongAgo(request, utcNow)) { this.tracer.TraceDebug <MailboxProcessorRequest>((long)this.GetHashCode(), "MailboxProcessor: {0} is NOT interesting because it's never been logged on or last logon happened too long ago.", request); return(false); } return(true); }
private bool MailboxTypeNotInteresting(MailboxProcessorRequest request) { return(request.IsGroupMailbox || request.IsPublicFolderMailbox || request.IsSharedMailbox || request.IsTeamSiteMailbox); }
private bool LastLogonTooLongAgo(MailboxProcessorRequest request, DateTime utcNow) { return(request.LastLogonTime == null || request.LastLogonTime < utcNow - this.configuration.SkipMailboxInactivityThreshold); }