public bool WriteOrderLog(int aOrderID, string aMessage, OrderMessage.OrderMessageLevel aMessageLevel) { if (!Initialized && !FReadOnly) { throw new Exception("Save manager not initialized"); } using (SQLiteConnection lConnection = new SQLiteConnection(FConnectionString)) { lConnection.Open(); SQLiteCommand lCommand = new SQLiteCommand("INSERT OR REPLACE INTO ExchangeLog (TransactionID, TransactionTime, Message, MessageLevel) VALUES (@Id, @Time, @Message, @MessageLevel)", lConnection); lCommand.Parameters.Add(new SQLiteParameter("@Id", aOrderID)); lCommand.Parameters.Add(new SQLiteParameter("@Time", DateTime.UtcNow)); lCommand.Parameters.Add(new SQLiteParameter("@Message", aMessage)); lCommand.Parameters.Add(new SQLiteParameter("@MessageLevel", aMessageLevel)); try { lCommand.ExecuteNonQuery(); return(true); } catch (Exception ex) { Universal.Log.Write(Universal.LogLevel.Error, $"Error writing order logs from db. Exception {ex}"); return(false); } finally { lConnection.Close(); } } }
public void WriteTransactionLogEntry(UserTradeOrder aOrder, OrderMessage.OrderMessageLevel aLevel = OrderMessage.OrderMessageLevel.Info, string aMessage = null) { if (string.IsNullOrEmpty(aMessage)) { switch (aOrder.Status) { case OrderStatus.Initial: FSaveManager.WriteOrderLog(aOrder.InternalID, "Starting transaction process.", OrderMessage.OrderMessageLevel.Info); FSaveManager.WriteOrderLog(aOrder.InternalID, "Waiting for market stop price to place order.", OrderMessage.OrderMessageLevel.StageChange); break; case OrderStatus.Waiting: FSaveManager.WriteOrderLog(aOrder.InternalID, "Price reached specified stop price.", OrderMessage.OrderMessageLevel.Info); FSaveManager.WriteOrderLog(aOrder.InternalID, string.Format("{0} coins sent to exchange account. Tx ID: {1}.", aOrder.SentQuantity, aOrder.CoinTxID), OrderMessage.OrderMessageLevel.Info); FSaveManager.WriteOrderLog(aOrder.InternalID, "Waiting for confirmations to place the order.", OrderMessage.OrderMessageLevel.StageChange); break; case OrderStatus.Placed: FSaveManager.WriteOrderLog(aOrder.InternalID, string.Format("Transaction id {0} has enough confirmations to place the order.", aOrder.CoinTxID), OrderMessage.OrderMessageLevel.Info); FSaveManager.WriteOrderLog(aOrder.InternalID, string.Format("Placed order in exchange. Uuid: {0}. Waiting for order to fulfill.", aOrder.ID.ToString()), OrderMessage.OrderMessageLevel.StageChange); break; case OrderStatus.Interrupted: FSaveManager.WriteOrderLog(aOrder.InternalID, "Transaction cancelled or not found on the exchange.", OrderMessage.OrderMessageLevel.FatalError); break; case OrderStatus.Completed: FSaveManager.WriteOrderLog(aOrder.InternalID, "Transaction completed. Waiting for withdrawal.", OrderMessage.OrderMessageLevel.StageChange); break; case OrderStatus.Withdrawn: FSaveManager.WriteOrderLog(aOrder.InternalID, "Cryptocurrencies succesfully withdrawn to Pandora's Wallet.", OrderMessage.OrderMessageLevel.Finisher); break; } } else { FSaveManager.WriteOrderLog(aOrder.InternalID, aMessage, aLevel); } if (FSaveManager.ReadOrderLogs(aOrder.InternalID, out List <OrderMessage> lOrderMessages)) { OnNewOrderLogsAdded?.BeginInvoke(aOrder.InternalID, lOrderMessages, null, null); } }