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)); } }
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); }
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); } }
public static bool IsConsumer(this OpDataRecord record) { return(record.SecurityServerType.Equals("Client")); }
public static bool IsProducer(this OpDataRecord record) { return(record.SecurityServerType.Equals("Producer")); }