Example #1
0
        private Entity CreateNewEnrichedData(TextEntities emailEntities)
        {
            EntitySchema enrchEmailDataSchema = _userConnection.EntitySchemaManager.GetInstanceByName("EnrchEmailData");
            Entity       newEnrichedData      = enrchEmailDataSchema.CreateEntity(_userConnection);

            newEnrichedData.SetDefColumnValues();
            newEnrichedData.SetColumnValue("JsonData", JsonConvert.SerializeObject(emailEntities));
            newEnrichedData.SetColumnValue("Hash", emailEntities.GetHash());
            newEnrichedData.Save();
            return(newEnrichedData);
        }
Example #2
0
 private void ActualizeTextEntityHash(List <TextEntityData> textEntityDatas, Type type)
 {
     foreach (TextEntityData textEntityData in textEntityDatas)
     {
         var entity = (MiningEntity)JsonConvert.DeserializeObject(textEntityData.EteJsonData, type);
         if (entity != null)
         {
             textEntityData.EteUpdatedHash = entity.GetHash();
         }
         TextEntities textEntities = JsonConvert.DeserializeObject <TextEntities>(textEntityData.EedJsonData);
         if (textEntities != null)
         {
             textEntityData.EedUpdatedHash = textEntities.GetHash();
         }
     }
 }
Example #3
0
        private List <MiningResult> ProcessEntities(Dictionary <Entity, GetEmailEntitiesResponse> minedInfo)
        {
            var results = new List <MiningResult>();

            foreach (KeyValuePair <Entity, GetEmailEntitiesResponse> pairs in minedInfo)
            {
                Entity activity = pairs.Key;
                GetEmailEntitiesResponse response = pairs.Value;
                try {
                    if (response.IsFailure)
                    {
                        SetAcivityIsEnriched(activity.PrimaryColumnValue, Guid.Empty, EnrichStatus.Error);
                        continue;
                    }
                    TextEntities          emailEntities     = response.TextEntities;
                    string                entitiesHash      = emailEntities.GetHash();
                    Entity                enrichedRecord    = FindEnrichedData(entitiesHash);
                    bool                  isNewEnrichedData = enrichedRecord == null;
                    Guid                  enrchEmailDataId;
                    EnrichEmailDataStatus status;
                    if (isNewEnrichedData)
                    {
                        enrichedRecord   = CreateNewEnrichedData(emailEntities);
                        enrchEmailDataId = enrichedRecord.PrimaryColumnValue;
                        status           = EnrichEmailDataStatus.Mined;
                        CreateEnrichedTextEntities(enrchEmailDataId, emailEntities);
                    }
                    else
                    {
                        enrchEmailDataId = enrichedRecord.PrimaryColumnValue;
                        status           = enrichedRecord.GetTypedColumnValue <string>("Status");
                    }
                    Guid primaryContactTextEntityId =
                        FindPrimaryContact(emailEntities, enrchEmailDataId, isNewEnrichedData);
                    string sender      = activity.GetTypedColumnValue <string>("Sender");
                    string senderEmail = sender.ExtractEmailAddress();
                    Dictionary <Guid, Guid> identifiedContacts = UpdateContactIdentificationInfo(enrchEmailDataId,
                                                                                                 emailEntities, senderEmail, isNewEnrichedData);
                    UpdateAccountIdentificationInfo(enrchEmailDataId, emailEntities, isNewEnrichedData);
                    if (senderEmail.IsNotNullOrEmpty())
                    {
                        AppendSenderEmail(enrchEmailDataId, senderEmail, response.IsSenderEmailDomainFree,
                                          primaryContactTextEntityId, emailEntities);
                    }
                    _deduplicator.DeduplicateContactData(identifiedContacts, emailEntities);
                    results.Add(new MiningResult {
                        ActivityId           = activity.PrimaryColumnValue,
                        EnrchEmailDataId     = enrchEmailDataId,
                        EnrichStatus         = EnrichStatus.Done,
                        EnrchEmailDataStatus = status
                    });
                    SetAcivityIsEnriched(activity.PrimaryColumnValue, enrichedRecord.PrimaryColumnValue,
                                         EnrichStatus.Done);
                    PublishEmailEnrichmentMetrics(activity);
                } catch (Exception ex) {
                    _log.ErrorFormat("Cannot save enriched data for email id = {0}. Error: {1}",
                                     activity.PrimaryColumnValue, ex);
                }
            }
            return(results);
        }