private void DiagnosticsWriteDetails(OrderTransactionBL transaction) { StringBuilder sb = new StringBuilder(); sb.Append("Order details:\n"); transaction.Orders.ForEach(order => sb.Append(" " + order.ToString() + "\n")); sb.Append("Transaction details:\n"); transaction.Transactions.ForEach(transaction => sb.Append(" " + transaction.ToString() + "\n")); sb.Append("\n SPREAD: " + QuoteToString(Quote)); sb.Append("\n LEVEL 2:\n" + Level2ToString(Level2)); Logger.Here().Verbose(sb.ToString()); }
private OrderTransactionResponseBL SaveOrderTransaction(IOrderContext context, ISubscriber subscriber, OrderTransactionBL data) { data.Orders.ForEach(order => { context.Orders.Add((OrderEntity)order); context.Entry(order).State = EntityState.Modified; }); data.Transactions.ForEach(transaction => { context.Transactions.Add((TransactionEntity)transaction); }); try { context.SaveChanges(); } catch (Exception e) { // QUESTION: What to do here in terms of transaction integrity? Logger.Here().Warning("SaveOrderTransaction failed", e); return(new OrderTransactionResponseBL(Constants.Response.INTERNAL_SERVER_ERROR, data, new Error { Description = e.Message })); } data.Transactions.ForEach(transaction => { TransactionProcessed message = new TransactionProcessed { TransactionId = transaction.TransactionId, CreatedTimestamp = transaction.CreatedTimestamp, Ticker = transaction.Ticker, Last = Convert.ToDouble(transaction.Price), Volume = transaction.Quantity, Level2 = Level2 }; Logger.Here().Debug("Publishing to " + Constants.PubSub.TOPIC_TRANSACTION_PROCESSED); subscriber.Publish(Constants.PubSub.TOPIC_TRANSACTION_PROCESSED, message.ToByteArray()); }); return(new OrderTransactionResponseBL(data)); }