Пример #1
0
        private static void CalculateLatencyProperties(MessageTrackingEvent mte)
        {
            string messageInfo = mte.MessageInfo;

            if (string.IsNullOrEmpty(messageInfo) || (mte.EventId != "DELIVER" && mte.EventId != "SEND" && mte.EventId != "SUBMIT" && (mte.EventId != "RESUBMIT" || mte.Source != "STOREDRIVER")))
            {
                mte.MessageLatency     = null;
                mte.MessageLatencyType = MessageLatencyType.None;
                return;
            }
            GetMessageTrackingLog.MessageLatencyParser messageLatencyParser = new GetMessageTrackingLog.MessageLatencyParser();
            if (messageLatencyParser.TryParse(messageInfo))
            {
                if (messageLatencyParser.OriginalArrivalTime != DateTime.MinValue)
                {
                    mte.MessageLatency = new EnhancedTimeSpan?((mte.Timestamp.ToUniversalTime() > messageLatencyParser.OriginalArrivalTime.ToUniversalTime()) ? (mte.Timestamp.ToUniversalTime() - messageLatencyParser.OriginalArrivalTime.ToUniversalTime()) : TimeSpan.Zero);
                }
                else
                {
                    mte.MessageLatency = null;
                }
                mte.MessageLatencyType = messageLatencyParser.MessageLatencyType;
                return;
            }
            mte.MessageLatency     = null;
            mte.MessageLatencyType = MessageLatencyType.None;
        }
Пример #2
0
        protected override void WriteResult(LogSearchCursor cursor)
        {
            object field = cursor.GetField(0);

            if (!(field is DateTime))
            {
                return;
            }
            MessageTrackingEvent messageTrackingEvent = new MessageTrackingEvent();

            messageTrackingEvent.Timestamp         = ((DateTime)field).ToLocalTime();
            messageTrackingEvent.ClientIp          = (cursor.GetField(1) as string);
            messageTrackingEvent.ClientHostname    = (string)cursor.GetField(2);
            messageTrackingEvent.ServerIp          = (cursor.GetField(3) as string);
            messageTrackingEvent.ServerHostname    = (cursor.GetField(4) as string);
            messageTrackingEvent.SourceContext     = (cursor.GetField(5) as string);
            messageTrackingEvent.ConnectorId       = (cursor.GetField(6) as string);
            messageTrackingEvent.Source            = (cursor.GetField(7) as string);
            messageTrackingEvent.EventId           = (cursor.GetField(8) as string);
            messageTrackingEvent.InternalMessageId = (cursor.GetField(9) as string);
            messageTrackingEvent.MessageId         = (cursor.GetField(10) as string);
            messageTrackingEvent.Recipients        = (cursor.GetField(12) as string[]);
            this.RedactPiiStringArrayIfNeeded(messageTrackingEvent.Recipients);
            messageTrackingEvent.RecipientStatus = (cursor.GetField(13) as string[]);
            if (messageTrackingEvent.EventId == "DELIVER" || messageTrackingEvent.EventId == "DUPLICATEDELIVER")
            {
                this.RedactPiiStringArrayIfNeeded(messageTrackingEvent.RecipientStatus);
            }
            messageTrackingEvent.TotalBytes              = GetMessageTrackingLog.Unbox <int>(cursor.GetField(14));
            messageTrackingEvent.RecipientCount          = GetMessageTrackingLog.Unbox <int>(cursor.GetField(15));
            messageTrackingEvent.RelatedRecipientAddress = this.RedactPiiStringIfNeeded(cursor.GetField(16) as string, false);
            messageTrackingEvent.Reference = (cursor.GetField(17) as string[]);
            if (messageTrackingEvent.Reference != null && messageTrackingEvent.Reference.Length == 1 && string.IsNullOrEmpty(messageTrackingEvent.Reference[0]))
            {
                messageTrackingEvent.Reference = null;
            }
            messageTrackingEvent.MessageSubject   = this.RedactPiiStringIfNeeded(cursor.GetField(18) as string, true);
            messageTrackingEvent.Sender           = this.RedactPiiStringIfNeeded(cursor.GetField(19) as string, false);
            messageTrackingEvent.ReturnPath       = this.RedactPiiStringIfNeeded(cursor.GetField(20) as string, false);
            messageTrackingEvent.Directionality   = (cursor.GetField(22) as string);
            messageTrackingEvent.TenantId         = (cursor.GetField(23) as string);
            messageTrackingEvent.OriginalClientIp = (cursor.GetField(24) as string);
            messageTrackingEvent.MessageInfo      = (cursor.GetField(21) as string);
            messageTrackingEvent.EventData        = (cursor.GetField(26) as KeyValuePair <string, object>[]);
            if (base.NeedSuppressingPiiData)
            {
                Utils.RedactEventData(messageTrackingEvent.EventData, GetMessageTrackingLog.EventDataKeyToRedact, this);
            }
            GetMessageTrackingLog.CalculateLatencyProperties(messageTrackingEvent);
            base.WriteObject(messageTrackingEvent);
        }
Пример #3
0
 public static IEnumerable <MessageTrackingLatency> GetLatencies(MessageTrackingEvent mte)
 {
     if (mte != null)
     {
         ComponentLatencyParser parser = new ComponentLatencyParser();
         if (parser.TryParse(mte.MessageInfo))
         {
             foreach (LatencyComponent component in parser.Components)
             {
                 yield return(new MessageTrackingLatency(mte, component));
             }
         }
     }
     yield break;
 }
Пример #4
0
 private MessageTrackingLatency(MessageTrackingEvent mte, LatencyComponent component)
 {
     this.mte       = mte;
     this.component = component;
 }