using System; using System.Collections.Generic; using System.Linq; using System.Data.Linq; using DataAccessLayer.MySql; using DataAccessLayer.TradingDB; using DataAccessLayer.Utils; using iMonitorAPI; using iMonitorApp.Properties; using TradingReference.DAL; namespace iMonitorApp.Classes { // Token: 0x0200002B RID: 43 public class TradeAlerts { // Token: 0x060001B5 RID: 437 RVA: 0x0000DDB4 File Offset: 0x0000BFB4 public static string CheckNewOrders() { string result; try { string text = "New Orders OK"; IQueryable source = from p in new TradingDataClassesDataContext { CommandTimeout = 5 }.DBTrades where p.source == "ORDERS" && p.cdateonly == (DateTime?)DateTime.Now.AddHours(-7.0).Date select p; string[] array = Settings.Default.StatusKeywordsNewOrders.Split(new char[] { ',' }); for (int i = 0; i < array.Length; i++) { string item = array[i]; bool flag = !TradeAlerts.dick_new_orders.ContainsKey(item); if (flag) { TradeAlerts.dick_new_orders.Add(item, 0); } int num = (from t in source where t.status.ToUpper().Contains(item.Trim().ToUpper()) && !t.status.Contains("NEWEDGE") select t).Count(); bool flag2 = num > 0; if (flag2) { bool email = false; string phone = "FALSE"; TradeAlerts.dick_new_orders[item] = TradeAlerts.dick_new_orders[item] + 1; bool flag3 = TradeAlerts.dick_new_orders[item] > Settings.Default.TradeEmailCounter; if (flag3) { email = true; bool flag4 = item == "PENDING"; if (flag4) { phone = "AUTO-h"; } } iMonitor.SendAlarm(num.ToString() + " " + item + " orders in i-Trade", new List { "etrading" }, "", "l", true, email, phone, 5, 15, "http://10.153.64.31:5001/iMonitor/Responder.aspx"); } else { TradeAlerts.dick_new_orders[item] = 0; } } result = text; } catch (Exception ex) { result = "Error: " + ex.Message; } return result; } // Token: 0x060001B6 RID: 438 RVA: 0x0000E190 File Offset: 0x0000C390 public static string CheckWorkingOrders() { return TradeAlerts.CheckWorkingOrders2(); } // Token: 0x060001B7 RID: 439 RVA: 0x0000E1A8 File Offset: 0x0000C3A8 public static string CheckWorkingOrders2() { bool flag = TradeAlerts.IsWeekend(); string result; if (flag) { result = "Working Orders-Weekend"; } else { try { IQueryable source = from p in new TradingDBDataContext { CommandTimeout = 10 }.DBTrades where p.source == "ORDERS" && p.status.Contains("WORKING") && p.cdateonly == (DateTime?)DateTime.Now.AddHours(-7.0).Date select p; string text = "No orders Disabled."; string[] array = Settings.Default.StatusKeywordsWorkingOrders.Split(new char[] { ',' }); for (int i = 0; i < array.Length; i++) { string item = array[i]; bool flag2 = !TradeAlerts.dick_working_orders2.ContainsKey(item); if (flag2) { TradeAlerts.dick_working_orders2.Add(item, 0); } int num = (from t in source where t.validity.ToUpper().Contains(item.Trim().ToUpper()) select t).Count(); bool flag3 = num > 0; if (flag3) { bool email = false; string phone = "FALSE"; string overridealarmlevel = "l"; TradeAlerts.dick_working_orders2[item] = TradeAlerts.dick_working_orders2[item] + 1; bool flag4 = TradeAlerts.dick_working_orders2[item] >= Convert.ToInt32(Settings.Default[item + "EmailCounter"]); if (flag4) { email = true; } bool flag5 = TradeAlerts.dick_working_orders2[item] >= Convert.ToInt32(Settings.Default[item + "PhoneCounter"]); if (flag5) { phone = "TRUE"; } bool flag6 = TradeAlerts.dick_working_orders2[item] >= Convert.ToInt32(Settings.Default[item + "EscalationCounter"]); if (flag6) { overridealarmlevel = "m"; } bool flag7 = TradeAlerts.dick_working_orders2[item] >= 2 * Convert.ToInt32(Settings.Default[item + "EscalationCounter"]); if (flag7) { overridealarmlevel = "h"; } string text2 = ""; List list = new List(); foreach (TradingReference.DAL.DBTrade dbtrade in from t in source where t.validity.ToUpper().Contains(item.Trim().ToUpper()) select t) { text2 = string.Concat(new string[] { text2, "Contract: ", dbtrade.contract, " Strategy: ", dbtrade.strategy, " Account: ", dbtrade.account, " Basket: ", dbtrade.high_low_price, "
" }); list.Add(dbtrade.high_low_price); } iMonitor.SendAlarm(string.Concat(new string[] { num.ToString(), " Orders are ", item, " on ", string.Join(",", list.Distinct().ToList()) }), new List { "etrading" }, "", overridealarmlevel, true, email, phone, 5, 15, "http://10.153.64.31:5001/iMonitor/Responder.aspx"); text = num.ToString() + " Working Orders are " + item; } else { TradeAlerts.dick_working_orders2[item] = 0; } } result = text; } catch (Exception ex) { result = "Error: " + ex.Message; } } return result; } // Token: 0x060001B8 RID: 440 RVA: 0x0000E84C File Offset: 0x0000CA4C public static string CheckOutbox() { bool flag = TradeAlerts.IsWeekend(); string result; if (flag) { result = "Order Outbox-Weekend"; } else { try { IQueryable source = from p in new TradingDataClassesDataContext { CommandTimeout = 10 }.Outboxes where p.createdOn >= (DateTime?)DateTime.Now.AddHours(-7.0).Date && (!p.isSent.HasValue || !p.isSent.Value) select p; bool flag2 = source.Count() > 0; if (flag2) { iMonitor.SendAlarm(source.Count().ToString() + " Unsent emails in the outbox.", new List { "etrading" }, "", "NULL", true, true, "AUTO-m", 5, 15, "http://10.153.64.31:5001/iMonitor/Responder.aspx"); } result = "No Emails in Outbox"; } catch (Exception ex) { result = "Error: " + ex.Message; } } return result; } // Token: 0x060001B9 RID: 441 RVA: 0x0000EA58 File Offset: 0x0000CC58 public static string CheckDataRecorders() { bool flag = TradeAlerts.IsWeekend(); string result; if (flag) { result = "Data Recorders-Weekend"; } else { string text = ""; bool flag2 = false; try { ConnectionHandler connectionHandler = new ConnectionHandler(Settings.Default.IntradayDatabaseName, Settings.Default.IntradayDatabase); connectionHandler.Open(); bool flag3 = !DataLogger.IsAlive(connectionHandler, TimeSpan.FromMinutes(Settings.Default.DataRecorderLatencyMinutes), Settings.Default.PrimaryDataRecorder); if (flag3) { string alarmXML = ParseStackAlarms.GetAlarmXML("Primary Data Recorder not working", new List { "mktdata" }, "", "NULL", true, true, "AUTO-h", 20, 60, "http://4ecappcsg11:5001/Convertor.aspx"); ParseStackAlarms parseStackAlarms = new ParseStackAlarms(alarmXML); parseStackAlarms.Process(); text = " Primary "; flag2 = true; } bool flag4 = !DataLogger.IsAlive(connectionHandler, TimeSpan.FromMinutes(Settings.Default.DataRecorderLatencyMinutes), Settings.Default.SecondaryDataRecorder); if (flag4) { string alarmXML2 = ParseStackAlarms.GetAlarmXML("Secondary Data Recorder not working", new List { "mktdata" }, "", "NULL", true, true, "FALSE", 20, 60, "http://4ecappcsg11:5001/Convertor.aspx"); ParseStackAlarms parseStackAlarms2 = new ParseStackAlarms(alarmXML2); parseStackAlarms2.Process(); text += " Secondary "; flag2 = true; } connectionHandler.Close(); bool flag5 = flag2; if (flag5) { result = text.Trim() + " Data Recorders not working"; } else { result = "Data Recorders OK"; } } catch (Exception ex) { result = "Error Checking DataRecorder Activity:" + ex.Message; } } return result; } // Token: 0x060001BA RID: 442 RVA: 0x0000EC00 File Offset: 0x0000CE00 public static string CheckBaskets() { bool flag = TradeAlerts.IsWeekend(); string result; if (flag) { result = "Basket Check-Weekend"; } else { try { Dictionary basketListComplete = Baskets.GetBasketListComplete(); List list = new List(); double num = 0.0; foreach (BasketConfig basketConfig in basketListComplete.Keys) { bool flag2 = basketConfig.enabled != null; if (flag2) { bool value = basketConfig.enabled.Value; if (value) { TimeSpan timeSpan = DateTime.Now - basketConfig.heartbeat.Value; bool flag3 = timeSpan.TotalMinutes > Settings.Default.BasketSyncThresholdMinutes; if (flag3) { list.Add(basketConfig.name); bool flag4 = num < timeSpan.TotalMinutes; if (flag4) { num = timeSpan.TotalMinutes; } } } } } bool flag5 = list.Count > 0; if (flag5) { iMonitor.SendAlarm(string.Concat(new string[] { "Baskets ", string.Join(",", list), " is not enabled for the last ", Settings.Default.BasketSyncThresholdMinutes.ToString(), " minutes" }), new List { "etrading" }, "Not enabled for the last " + num.ToString() + " minutes", "NULL", true, true, "AUTO-h", 10, 20, "http://10.153.64.31:5001/iMonitor/Responder.aspx"); result = string.Join(",", list); } else { result = "Baskets OK."; } } catch (Exception ex) { result = "Error: " + ex.Message; } } return result; } // Token: 0x060001BB RID: 443 RVA: 0x0000EE04 File Offset: 0x0000D004 public static string CheckGun() { string result; try { IQueryable queryable = from p in new TradingDataClassesDataContext { CommandTimeout = 5 }.DBTrades where p.source == "ORDERS" && p.cdateonly == (DateTime?)DateTime.Now.AddHours(-7.0).Date && (p.status.ToLower().Contains("w automate") || p.status.ToLower().Contains("working fidessa")) && Math.Abs(p.qty) <= 1m select p; List list = (from t in Settings.Default.EmptyGunStrategues.Split(new char[] { ',' }) select t.Trim()).ToList(); foreach (DataAccessLayer.TradingDB.DBTrade dbtrade in queryable) { bool flag = list.Contains(dbtrade.tblAllOrders.order1); if (flag) { string subject = string.Concat(new string[] { "Attention! Please fill the gun for ", dbtrade.contract, " strategy ", dbtrade.tblAllOrders.order1, " account ", dbtrade.account }); iMonitor.SendAlarm(subject, new List { "etrading" }, "", "l", true, true, "TRUE", 10, 20, "http://10.153.64.31:5001/iMonitor/Responder.aspx"); } } result = "Check Gun OK."; } catch (Exception ex) { result = "Error: " + ex.Message; } return result; } // Token: 0x060001BC RID: 444 RVA: 0x0000F1A8 File Offset: 0x0000D3A8 public static bool IsWeekend() { return DateTime.Now.AddHours(-7.0).DayOfWeek == DayOfWeek.Saturday || DateTime.Now.AddHours(-7.0).DayOfWeek == DayOfWeek.Sunday; } // Token: 0x040000E8 RID: 232 private static Dictionary dick_new_orders = new Dictionary(); // Token: 0x040000E9 RID: 233 private static Dictionary dick_working_orders2 = new Dictionary(); } }