Beispiel #1
0
        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());
        }
Beispiel #2
0
        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));
        }