internal static string CreateAttachmentsSignal(MessageItem messageItem, List <Dictionary <string, string> > attachmentsProperties, string receiverEmail, Guid tenantId)
        {
            List <AnalyticsSignal>      list        = new List <AnalyticsSignal>();
            Dictionary <string, string> properties  = new Dictionary <string, string>();
            Dictionary <string, string> properties2 = new Dictionary <string, string>
            {
                {
                    "Context",
                    "ReceivedRegularAttachment"
                }
            };

            AnalyticsSignal.AnalyticsActor actor = new AnalyticsSignal.AnalyticsActor
            {
                Id         = receiverEmail,
                Properties = SharePointSignalRestDataProvider.CreateSignalProperties(properties),
                TenantId   = tenantId
            };
            AnalyticsSignal.AnalyticsAction action = new AnalyticsSignal.AnalyticsAction
            {
                ActionType = "Received",
                Properties = SharePointSignalRestDataProvider.CreateSignalProperties(properties2)
            };
            StringBuilder stringBuilder = new StringBuilder();

            for (int i = 0; i < messageItem.Recipients.Count; i++)
            {
                stringBuilder.AppendFormat("{0}|{1}", messageItem.Recipients[i].Participant.DisplayName, messageItem.Recipients[i].Participant.SmtpEmailAddress);
                if (i < messageItem.Recipients.Count - 1)
                {
                    stringBuilder.Append(",");
                }
            }
            Dictionary <string, string> dictionary = new Dictionary <string, string>
            {
                {
                    "ConversationId",
                    OfficeGraphAgentUtils.GetCoversationIdBase64(messageItem)
                },
                {
                    "ConversationTopic",
                    messageItem.ConversationTopic
                },
                {
                    "CreationTime",
                    messageItem.CreationTime.ToISOString()
                },
                {
                    "FromDisplayName",
                    messageItem.From.DisplayName
                },
                {
                    "FromEmail",
                    messageItem.From.SmtpEmailAddress
                },
                {
                    "Subject",
                    messageItem.Subject
                },
                {
                    "Importance",
                    messageItem.Importance.ToString()
                },
                {
                    "MailPreview",
                    messageItem.Preview
                },
                {
                    "Recipients",
                    stringBuilder.ToString()
                },
                {
                    "StoreObjectId",
                    messageItem.StoreObjectId.ToBase64String()
                }
            };

            foreach (Dictionary <string, string> dictionary2 in attachmentsProperties)
            {
                Dictionary <string, string> dictionary3 = new Dictionary <string, string>();
                foreach (KeyValuePair <string, string> keyValuePair in dictionary)
                {
                    dictionary3.Add(keyValuePair.Key, keyValuePair.Value);
                }
                foreach (KeyValuePair <string, string> keyValuePair2 in dictionary2)
                {
                    dictionary3.Add(keyValuePair2.Key, keyValuePair2.Value);
                }
                AnalyticsSignal.AnalyticsItem item = new AnalyticsSignal.AnalyticsItem
                {
                    Id         = dictionary2["AttachmentId"],
                    Properties = SharePointSignalRestDataProvider.CreateSignalProperties(dictionary3)
                };
                AnalyticsSignal item2 = new AnalyticsSignal
                {
                    Actor  = actor,
                    Action = action,
                    Item   = item,
                    Source = "Exchange Office Graph Delivery Agent"
                };
                list.Add(item2);
            }
            Dictionary <string, object> dictionary4 = new Dictionary <string, object>();

            dictionary4["signals"] = list;
            return(new JavaScriptSerializer().Serialize(dictionary4));
        }
        internal static string GetCoversationIdBase64(MessageItem messageItem)
        {
            ConversationId conversationId = (ConversationId)OfficeGraphAgentUtils.GetPropertyFromMessage(messageItem, ItemSchema.ConversationId, string.Empty);

            return(conversationId.ToBase64String());
        }
 public void DeliveredMessageEventHandler(StoreDriverEventSource source, StoreDriverDeliveryEventArgs args)
 {
     try
     {
         StoreDriverDeliveryEventArgsImpl storeDriverDeliveryEventArgsImpl = args as StoreDriverDeliveryEventArgsImpl;
         if (storeDriverDeliveryEventArgsImpl != null && this.IsInputValid(storeDriverDeliveryEventArgsImpl))
         {
             VariantConfigurationSnapshot snapshot = VariantConfiguration.GetSnapshot(storeDriverDeliveryEventArgsImpl.MailboxOwner.GetContext(null), null, null);
             if (snapshot.OfficeGraph.OfficeGraphAgent.Enabled)
             {
                 OfficeGraph.ItemsSeen.Increment();
                 bool flag = false;
                 OfficeGraphSignalType signalType = OfficeGraphSignalType.Attachment;
                 string   signal  = string.Empty;
                 bool     enabled = snapshot.OfficeGraph.OfficeGraphGenerateSignals.Enabled;
                 DateTime utcNow  = DateTime.UtcNow;
                 storeDriverDeliveryEventArgsImpl.MessageItem.Load();
                 string sharePointUrl;
                 List <Dictionary <string, string> > attachmentsProperties;
                 if (this.IsInterestingMailWithAttachments(storeDriverDeliveryEventArgsImpl.MessageItem, storeDriverDeliveryEventArgsImpl.MailboxSession, out sharePointUrl, out attachmentsProperties))
                 {
                     OfficeGraph.ItemsFilteredTotal.Increment();
                     if (enabled)
                     {
                         signal     = OfficeGraphAgentUtils.CreateAttachmentsSignal(storeDriverDeliveryEventArgsImpl.MessageItem, attachmentsProperties, storeDriverDeliveryEventArgsImpl.MailboxOwner.PrimarySmtpAddress.ToString(), storeDriverDeliveryEventArgsImpl.MailItem.TenantId);
                         signalType = OfficeGraphSignalType.Attachment;
                         flag       = true;
                     }
                     else
                     {
                         OfficeGraphAgent.tracer.TraceDebug((long)this.traceId, "Skipped generating signal since feature disabled.");
                     }
                 }
                 else
                 {
                     OfficeGraphAgent.tracer.TraceDebug((long)this.traceId, "Skipped item since it did not pass filter criteria.");
                 }
                 if (flag)
                 {
                     TimeSpan timeSpan = DateTime.UtcNow - utcNow;
                     OfficeGraph.LastSignalCreationTime.RawValue = (long)timeSpan.TotalMilliseconds;
                     OfficeGraph.AverageSignalCreationTime.IncrementBy((long)timeSpan.TotalMilliseconds);
                     OfficeGraph.AverageSignalCreationTimeBase.Increment();
                     utcNow = DateTime.UtcNow;
                     byte[] bytes          = storeDriverDeliveryEventArgsImpl.MailboxSession.OrganizationId.GetBytes(Encoding.ASCII);
                     string organizationId = Convert.ToBase64String(bytes);
                     OfficeGraphLog.LogSignal(signalType, signal, organizationId, sharePointUrl);
                     timeSpan = DateTime.UtcNow - utcNow;
                     OfficeGraph.LastSignalPersistingTime.RawValue = (long)timeSpan.TotalMilliseconds;
                     OfficeGraph.AverageSignalPersistingTime.IncrementBy((long)timeSpan.TotalMilliseconds);
                     OfficeGraph.AverageSignalPersistingTimeBase.Increment();
                     OfficeGraph.SignalPersisted.Increment();
                 }
             }
             else
             {
                 OfficeGraphAgent.tracer.TraceDebug((long)this.traceId, "Skipped item since agent is disabled.");
             }
         }
     }
     catch (Exception ex)
     {
         OfficeGraph.TotalExceptions.Increment();
         OfficeGraphAgent.tracer.TraceError <Exception>((long)this.traceId, "OfficeGraphAgent.DeliveredMessageEventHandler encountered an exception: {0}", ex);
         StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_OfficeGraphAgentException, ex.Message, new object[]
         {
             ex
         });
     }
 }