Exemplo n.º 1
0
        public void MultiAttachmentPersistorActiveAttachmentsPersisted()
        {
            A.CallTo(() => _mimeMessageFactory.Create(A <Stream> ._)).Returns(CreateEmailMessage());
            A.CallTo(() => _aggregateReportDeserialiser.Deserialise(A <AttachmentInfo> ._, A <EmailMetadata> ._)).Returns(CreateAggregateReportInfo());
            A.CallTo(() => _multiAttachmentPersistor.Active).Returns(true);

            _aggregateReportParser.Parse(new EmailMessageInfo(new EmailMetadata("", "", "", "", 100), Stream.Null));

            A.CallTo(() => _multiAttachmentPersistor.Persist(A <AttachmentInfo> ._)).MustHaveHappened(Repeated.Exactly.Once);
        }
        public void NoPersistorsActiveNoProcessingOccursUserIsWarned()
        {
            A.CallTo(() => _multiAttachmentPersistor.Active).Returns(false);
            A.CallTo(() => _multiDenormalisedRecordPersistor.Active).Returns(false);
            A.CallTo(() => _mulitAggregateReportPersistor.Active).Returns(false);
            A.CallTo(() => _mimeMessageFactory.Create(A <Stream> ._)).Returns(CreateEmailMessage());

            _aggregateReportParser.Parse(new EmailMessageInfo(new EmailMetadata("", "", "", 100), Stream.Null));

            A.CallTo(() => _attachmentStreamNormaliser.Normalise(A <MimePart> ._)).MustNotHaveHappened();
            A.CallTo(() => _aggregateReportDeserialiser.Deserialise(A <AttachmentInfo> ._, A <EmailMetadata> ._)).MustNotHaveHappened();
            A.CallTo(() => _log.Warn(A <string> ._)).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => _denormalisedRecordConverter.ToDenormalisedRecord(A <Domain.Dmarc.AggregateReport> ._, A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _multiAttachmentPersistor.Persist(A <List <AttachmentInfo> > ._)).MustNotHaveHappened();
            A.CallTo(() => _multiDenormalisedRecordPersistor.Persist(A <IEnumerable <DenormalisedRecord> > ._)).MustNotHaveHappened();
            A.CallTo(() => _mulitAggregateReportPersistor.Persist(A <IEnumerable <AggregateReportInfo> > ._)).MustNotHaveHappened();
        }
Exemplo n.º 3
0
        public AggregateReportInfo Parse(EmailMessageInfo messageInfo)
        {
            Stopwatch stopwatch = Stopwatch.StartNew();

            _log.Debug($"Processing {messageInfo.EmailMetadata.OriginalUri}.");

            List <AttachmentInfo> attachments = _mimeMessageFactory
                                                .Create(messageInfo.EmailStream)
                                                .BodyParts.OfType <MimePart>()
                                                .Select(_attachmentStreamNormaliser.Normalise)
                                                .Where(_ => !_.Equals(AttachmentInfo.EmptyAttachmentInfo))
                                                .ToList();

            _log.Debug($"Aggregate report attachment processing took {stopwatch.Elapsed}");
            stopwatch.Reset();

            AttachmentInfo attachment = attachments.Single();

            stopwatch.Start();
            AggregateReportInfo aggregateReport = _aggregateReportDeserialiser.Deserialise(attachment, messageInfo.EmailMetadata);

            _log.Debug($"Deserialising aggregate report took {stopwatch.Elapsed}");
            stopwatch.Reset();

            _log.Debug($"Found {aggregateReport.AggregateReport.Records.Length} records in {aggregateReport.AttachmentMetadata.Filename}");

            if (_multiAttachmentPersistor.Active)
            {
                stopwatch.Start();
                _multiAttachmentPersistor.Persist(attachment);
                _log.Debug($"Persisting attachments took {stopwatch.Elapsed}");
                stopwatch.Reset();
            }

            attachment?.Dispose();

            return(aggregateReport);
        }
Exemplo n.º 4
0
        public void Parse(EmailMessageInfo messageInfo)
        {
            try
            {
                Stopwatch             stopwatch   = new Stopwatch();
                List <AttachmentInfo> attachments = null;
                if (_multiAttachmentPersistor.Active ||
                    _multiDenormalisedRecordPersistor.Active ||
                    _multiAggregateReportPersistor.Active)
                {
                    _log.Debug($"Processing {messageInfo.EmailMetadata.OriginalUri}.");
                    stopwatch.Start();

                    attachments = _mimeMessageFactory
                                  .Create(messageInfo.EmailStream)
                                  .BodyParts.OfType <MimePart>()
                                  .Select(_attachmentStreamNormaliser.Normalise)
                                  .Where(_ => !_.Equals(AttachmentInfo.EmptyAttachmentInfo))
                                  .ToList();

                    if (attachments.Count == 0)
                    {
                        _log.Warn($"Didnt find any aggregate report attachments for {messageInfo.EmailMetadata.OriginalUri}.");
                    }
                    else
                    {
                        _log.Debug($"Found {attachments.Count} aggregate report attachment(s) for {messageInfo.EmailMetadata.OriginalUri}.");
                    }
                    _log.Debug($"Aggregate report attachment processing took {stopwatch.Elapsed}");
                    stopwatch.Reset();
                }
                else
                {
                    _log.Warn($"Not Processing {messageInfo.EmailMetadata.OriginalUri} as no persistors found.");
                }

                List <AggregateReportInfo> aggregateReports = null;
                if (_multiDenormalisedRecordPersistor.Active ||
                    _multiAggregateReportPersistor.Active)
                {
                    stopwatch.Start();
                    aggregateReports = attachments
                                       .Select(_ => _aggregateReportDeserialiser.Deserialise(_, messageInfo.EmailMetadata))
                                       .ToList();
                    _log.Debug($"Deserialising aggregate reports took {stopwatch.Elapsed}");
                    stopwatch.Reset();

                    aggregateReports.ForEach(_ => _log.Debug($"Found {_.AggregateReport.Records.Length} records in {_.AttachmentMetadata.Filename}"));
                }

                List <DenormalisedRecord> denormalisedRecords = null;
                if (_multiDenormalisedRecordPersistor.Active)
                {
                    stopwatch.Start();
                    denormalisedRecords = aggregateReports
                                          .Select(_ => _denormalisedRecordConverter.ToDenormalisedRecord(_.AggregateReport, messageInfo.EmailMetadata.OriginalUri))
                                          .SelectMany(_ => _)
                                          .ToList();
                    _log.Debug($"Denormalised record processing took {stopwatch.Elapsed}");
                    stopwatch.Reset();
                }

                if (_multiAttachmentPersistor.Active)
                {
                    stopwatch.Start();
                    _multiAttachmentPersistor.Persist(attachments);
                    _log.Debug($"Persisting attachments took {stopwatch.Elapsed}");
                    stopwatch.Reset();
                }

                if (_multiDenormalisedRecordPersistor.Active)
                {
                    stopwatch.Start();
                    _multiDenormalisedRecordPersistor.Persist(denormalisedRecords);
                    _log.Debug($"Persisting denormalised records took {stopwatch.Elapsed}");
                    stopwatch.Reset();
                }

                if (_multiAggregateReportPersistor.Active)
                {
                    stopwatch.Start();
                    _multiAggregateReportPersistor.Persist(aggregateReports);
                    _log.Debug($"Persisting denormalised records took {stopwatch.Elapsed}");
                    stopwatch.Reset();
                }

                attachments?.ForEach(_ => _.Dispose());
            }
            catch (Exception e)
            {
                _log.Error($"An error occurred processing {messageInfo.EmailMetadata.OriginalUri}{Environment.NewLine}{e.Message}{Environment.NewLine}{Environment.NewLine}{e.StackTrace}");
            }
        }