/// <summary> /// Begins logging exchanges - writes errors to console. You should block the app using Console.ReadLine. /// </summary> /// <param name="path">Path to write files to</param> /// <param name="intervalSeconds">Interval in seconds in between each log calls for each exchange</param> /// <param name="terminateAction">Call this when the process is about to exit, like a WM_CLOSE message on Windows.</param> /// <param name="compress">Whether to compress the log files</param> /// <param name="exchangeNamesAndSymbols">Exchange names and symbols to log</param> public static void LogExchanges(string path, float intervalSeconds, out Action terminateAction, bool compress, params string[] exchangeNamesAndSymbols) { bool terminating = false; Action terminator = null; path = (string.IsNullOrWhiteSpace(path) ? "./" : path); Dictionary <ExchangeLogger, int> errors = new Dictionary <ExchangeLogger, int>(); List <ExchangeLogger> loggers = new List <ExchangeLogger>(); for (int i = 0; i < exchangeNamesAndSymbols.Length;) { loggers.Add(new ExchangeLogger(ExchangeAPI.GetExchangeAPI(exchangeNamesAndSymbols[i++]), exchangeNamesAndSymbols[i++], intervalSeconds, path, compress)); } ; foreach (ExchangeLogger logger in loggers) { logger.Start(); logger.Error += (log, ex) => { int errorCount; lock (errors) { if (!errors.TryGetValue(log, out errorCount)) { errorCount = 0; } errors[log] = ++errorCount; } Logger.Info("Errors for {0}: {1}", log.API.Name, errorCount); }; } terminator = () => { if (!terminating) { terminating = true; foreach (ExchangeLogger logger in loggers.ToArray()) { logger.Stop(); logger.Dispose(); } loggers.Clear(); } }; terminateAction = terminator; // make sure to close properly Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e) { terminator(); }; AppDomain.CurrentDomain.ProcessExit += (object sender, EventArgs e) => { terminator(); }; Logger.Info("Loggers \"{0}\" started, press ENTER or CTRL-C to terminate.", string.Join(", ", loggers.Select(l => l.API.Name))); }
public static void RunExportData(Dictionary <string, string> dict) { RequireArgs(dict, "exchange", "symbol", "path", "sinceDateTime"); string exchange = dict["exchange"]; long total = 0; TraderExchangeExport.ExportExchangeTrades(ExchangeAPI.GetExchangeAPI(exchange), dict["symbol"], dict["path"], DateTime.Parse(dict["sinceDateTime"]), (long count) => { total = count; Console.Write("Exporting {0}: {1} \r", exchange, total); }); Console.WriteLine("{0}Finished Exporting {1}: {2} \r", Environment.NewLine, exchange, total); }