public void OnPromotedMessageHandler(StoreDriverEventSource source, StoreDriverDeliveryEventArgs args) { WorkingSetAgent.tracer.TraceDebug((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler: entering"); StoreDriverDeliveryEventArgsImpl storeDriverDeliveryEventArgsImpl = args as StoreDriverDeliveryEventArgsImpl; if (storeDriverDeliveryEventArgsImpl == null) { WorkingSetAgent.tracer.TraceError((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler: args is null or not a StoreDriverDeliveryEventArgsImpl; exiting"); return; } if (!this.Validate(storeDriverDeliveryEventArgsImpl)) { return; } string arg = storeDriverDeliveryEventArgsImpl.MailboxSession.MdbGuid.ToString(); WorkingSetAgent.tracer.TraceDebug <string>((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler: mdbGuid is {0}", arg); WorkingSetAgentPerfLogging logger = new WorkingSetAgentPerfLogging(); DateTime utcNow = DateTime.UtcNow; bool workingSetSignalMailProcessed = false; try { WorkingSet.ProcessingAccepted.Increment(); using (new StopwatchPerformanceTracker("OnPromotedMessageHandler", logger)) { using (new CpuPerformanceTracker("OnPromotedMessageHandler", logger)) { using (new StorePerformanceTracker("OnPromotedMessageHandler", logger)) { this.Process(storeDriverDeliveryEventArgsImpl); workingSetSignalMailProcessed = true; } } } } catch (Exception ex) { if (ex is OutOfMemoryException || ex is StackOverflowException || ex is ThreadAbortException) { throw; } if (ex is SmtpResponseException) { workingSetSignalMailProcessed = true; throw; } WorkingSetAgent.tracer.TraceError <Exception>((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler encountered an exception: {0}", ex); StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_WorkingSetAgentException, ex.Message, new object[] { ex }); storeDriverDeliveryEventArgsImpl.MailRecipient.DsnRequested = DsnRequestedFlags.Never; throw new SmtpResponseException(WorkingSetAgent.UnprocessedSignalMailResponse, base.Name); } finally { this.UpdatePerfCounters(utcNow, workingSetSignalMailProcessed, logger); WorkingSetAgent.tracer.TraceDebug((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler: exiting"); } }
private void UpdatePerfCounters(DateTime startTime, bool workingSetSignalMailProcessed, WorkingSetAgentPerfLogging logger) { WorkingSetAgent.tracer.TraceDebug((long)this.traceId, "WorkingSetAgent.UpdatePerfCounters: entering"); TimeSpan timeSpan = DateTime.UtcNow.Subtract(startTime); WorkingSet.LastSignalProcessingTime.RawValue = (long)timeSpan.TotalMilliseconds; WorkingSet.AverageSignalProcessingTime.IncrementBy((long)timeSpan.TotalMilliseconds); WorkingSet.AverageSignalProcessingTimeBase.Increment(); if (workingSetSignalMailProcessed) { WorkingSet.ProcessingSuccess.Increment(); } else { WorkingSet.ProcessingFailed.Increment(); } WorkingSetAgent.tracer.TraceDebug <TimeSpan>((long)this.traceId, "WorkingSetAgent.UpdatePerfCounters: StopwatchTime = {0}", logger.StopwatchTime); WorkingSetAgent.tracer.TraceDebug <TimeSpan>((long)this.traceId, "WorkingSetAgent.UpdatePerfCounters: CpuTime = {0}", logger.CpuTime); WorkingSetAgent.tracer.TraceDebug <uint>((long)this.traceId, "WorkingSetAgent.UpdatePerfCounters: StoreRPCs = {0}", logger.StoreRPCs); WorkingSet.AverageStopWatchTime.IncrementBy(logger.StopwatchTime.Ticks); WorkingSet.AverageStopWatchTimeBase.Increment(); WorkingSet.AverageCpuTime.IncrementBy(logger.CpuTime.Ticks); WorkingSet.AverageCpuTimeBase.Increment(); WorkingSet.AverageStoreRPCs.IncrementBy((long)((ulong)logger.StoreRPCs)); WorkingSet.AverageStoreRPCsBase.Increment(); }