public Message FindMessage(OpDataRecord dataRecord)
        {
            using (var dbContext = _dbContextProvider.CreateDbContext())
            {
                dbContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

                if (dataRecord.XRequestId != null)
                {
                    var result = dbContext.Messages.FirstOrDefault(it => it.XRequestId == dataRecord.XRequestId);
                    if (result != null)
                    {
                        return(result);
                    }
                }

                var searchInProducerRecords = dataRecord.SecurityServerType.Equals("Client");

                var targetMessageState =
                    searchInProducerRecords ? MessageState.MergedProducer : MessageState.MergedConsumer;

                var messageIdFilter = PredicateBuilder.New <Message>()
                                      .And(it => it.MessageState.Equals(targetMessageState))
                                      .And(it => it.MessageId == dataRecord.MessageId)
                                      .And(it => it.ConsumerInstance == dataRecord.ClientXRoadInstance)
                                      .And(it => it.ConsumerMemberClass == dataRecord.ClientMemberClass)
                                      .And(it => it.ConsumerSubSystemCode == dataRecord.ClientSubsystemCode)
                                      .And(it => it.ProducerInstance == dataRecord.ServiceXRoadInstance)
                                      .And(it => it.ProducerMemberClass == dataRecord.ServiceMemberClass)
                                      .And(it => it.ProducerMemberCode == dataRecord.ServiceMemberCode)
                                      .And(it => it.ProducerServiceCode == dataRecord.ServiceCode);

                return(dbContext.Messages.FirstOrDefault(messageIdFilter));
            }
        }
Exemplo n.º 2
0
        public static Message CreateMessage(this OpDataRecord record)
        {
            var message = new Message
            {
                CreatedAt              = DateTime.Now,
                MessageId              = record.MessageId,
                XRequestId             = record.XRequestId,
                MessageProtocolVersion = record.MessageProtocolVersion,
                MessageIssue           = record.MessageIssue,
                MessageUserId          = record.MessageUserId,
                MessageState           = record.IsConsumer() ? MessageState.MergedConsumer : MessageState.MergedProducer,

                ConsumerInstance      = record.ClientXRoadInstance,
                ConsumerMemberClass   = record.ClientMemberClass,
                ConsumerMemberCode    = record.ClientMemberCode,
                ConsumerSubSystemCode = record.ClientSubsystemCode,

                ProducerInstance       = record.ServiceXRoadInstance,
                ProducerMemberClass    = record.ServiceMemberClass,
                ProducerMemberCode     = record.ServiceMemberCode,
                ProducerSubSystemCode  = record.ServiceSubsystemCode,
                ProducerServiceCode    = record.ServiceCode,
                ProducerServiceVersion = record.ServiceVersion,
                ConsumerSecurityServerInternalIpAddress = record.IsConsumer() ? record.SecurityServerInternalIp : null,
                ConsumerSecurityServerAddress           = record.ClientSecurityServerAddress,
                ProducerSecurityServerInternalIpAddress = record.IsProducer() ? record.SecurityServerInternalIp : null,
                ProducerSecurityServerAddress           = record.ServiceSecurityServerAddress,
                RepresentedPartyClass = record.RepresentedPartyClass,
                RepresentedPartyCode  = record.RepresentedPartyCode,

                RequestAttachmentsCount  = record.RequestAttachmentCount,
                RequestSoapSize          = record.RequestSoapSize,
                RequestMimeSize          = record.RequestMimeSize,
                ResponseAttachmentsCount = record.ResponseAttachmentCount,
                ResponseSoapSize         = record.ResponseSoapSize,
                ResponseMimeSize         = record.ResponseMimeSize,
                IsSucceeded = record.Succeeded ?? false,
                FaultCode   = record.SoapFaultCode,
                FaultString = record.SoapFaultString
            };

            if (record.IsConsumer())
            {
                message.ConsumerServerRequestIn   = record.RequestInTs?.ToDateTime(TemporalType.Milliseconds);
                message.ConsumerServerRequestOut  = record.RequestOutTs?.ToDateTime(TemporalType.Milliseconds);
                message.ConsumerServerResponseIn  = record.ResponseInTs?.ToDateTime(TemporalType.Milliseconds);
                message.ConsumerServerResponseOut = record.ResponseOutTs?.ToDateTime(TemporalType.Milliseconds);
            }
            else
            {
                message.ProducerServerRequestIn   = record.RequestInTs?.ToDateTime(TemporalType.Milliseconds);
                message.ProducerServerRequestOut  = record.RequestOutTs?.ToDateTime(TemporalType.Milliseconds);
                message.ProducerServerResponseIn  = record.ResponseInTs?.ToDateTime(TemporalType.Milliseconds);
                message.ProducerServerResponseOut = record.ResponseOutTs?.ToDateTime(TemporalType.Milliseconds);
            }

            return(message);
        }
Exemplo n.º 3
0
 public static bool IsValid(this OpDataRecord record)
 {
     return(record.Succeeded != null &&
            record.MessageId != null &&
            record.ClientXRoadInstance != null &&
            record.ClientMemberClass != null &&
            record.ClientMemberCode != null &&
            record.ServiceXRoadInstance != null &&
            record.ServiceMemberClass != null &&
            record.ServiceMemberCode != null &&
            record.ServiceCode != null);
 }
        private void ProcessRecord(OpDataRecord opDataRecord)
        {
            var dbContext = _dbContextProvider.CreateDbContext();

            try
            {
                if (!opDataRecord.IsValid())
                {
                    return;
                }

                var message = _messagePairMatcher.FindMessage(opDataRecord);
                if (message == null)
                {
                    message = opDataRecord.CreateMessage();
                    dbContext.Messages.Add(message);
                }
                else
                {
                    if (message.MessageState == MessageState.MergedAll)
                    {
                        return;
                    }

                    var consumerAlreadyMerged =
                        message.MessageState == MessageState.MergedConsumer && opDataRecord.IsConsumer();
                    var producerAlreadyMerged =
                        message.MessageState == MessageState.MergedProducer && opDataRecord.IsProducer();

                    if (consumerAlreadyMerged || producerAlreadyMerged)
                    {
                        return;
                    }

                    message.Merge(opDataRecord);
                    dbContext.Messages.Update(message);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
                Console.WriteLine(exception.StackTrace);
            }
            finally
            {
                opDataRecord.IsProcessed = true;
                dbContext.OpDataRecords.Update(opDataRecord);
                dbContext.SaveChanges();
                dbContext.Dispose();
            }
        }
        public static void Merge(this Message message, OpDataRecord record)
        {
            var isConsumer = record.SecurityServerType.Equals("Client");

            message.ModifiedAt   = DateTime.Now;
            message.MessageState = MessageState.MergedAll;

            if (isConsumer)
            {
                message.ConsumerServerRequestIn   = record.RequestInTs?.ToDateTime(TemporalType.Milliseconds);
                message.ConsumerServerRequestOut  = record.RequestOutTs?.ToDateTime(TemporalType.Milliseconds);
                message.ConsumerServerResponseIn  = record.ResponseInTs?.ToDateTime(TemporalType.Milliseconds);
                message.ConsumerServerResponseOut = record.ResponseOutTs?.ToDateTime(TemporalType.Milliseconds);
            }
            else
            {
                message.ProducerServerRequestIn   = record.RequestInTs?.ToDateTime(TemporalType.Milliseconds);
                message.ProducerServerRequestOut  = record.RequestOutTs?.ToDateTime(TemporalType.Milliseconds);
                message.ProducerServerResponseIn  = record.ResponseInTs?.ToDateTime(TemporalType.Milliseconds);
                message.ProducerServerResponseOut = record.ResponseOutTs?.ToDateTime(TemporalType.Milliseconds);
            }
        }
Exemplo n.º 6
0
 public static bool IsConsumer(this OpDataRecord record)
 {
     return(record.SecurityServerType.Equals("Client"));
 }
Exemplo n.º 7
0
 public static bool IsProducer(this OpDataRecord record)
 {
     return(record.SecurityServerType.Equals("Producer"));
 }