public void Run(string[] args) { var(app, buildConfigProvider, getDbBasePath) = BuildCommandLineApp(); ManualResetEvent appClosed = new ManualResetEvent(false); app.OnExecute(async() => { var configProvider = buildConfigProvider(); var initConfig = configProvider.GetConfig <IInitConfig>(); if (initConfig.RemovingLogFilesEnabled) { RemoveLogFiles(initConfig.LogDirectory); } Logger = new NLogLogger(initConfig.LogFileName, initConfig.LogDirectory); var pathDbPath = getDbBasePath(); if (!string.IsNullOrWhiteSpace(pathDbPath)) { var newDbPath = Path.Combine(pathDbPath, initConfig.BaseDbPath); Logger.Info($"Adding prefix to baseDbPath, new value: {newDbPath}, old value: {initConfig.BaseDbPath}"); initConfig.BaseDbPath = newDbPath; } Console.Title = initConfig.LogFileName; var serializer = new UnforgivingJsonSerializer(); Logger.Info($"Running Nethermind Runner, parameters:\n{serializer.Serialize(initConfig, true)}\n"); Task userCancelTask = Task.Factory.StartNew(() => { Console.WriteLine("Enter 'e' to exit"); while (true) { ConsoleKeyInfo keyInfo = Console.ReadKey(); if (keyInfo.KeyChar == 'e') { break; } } }); await StartRunners(configProvider); await userCancelTask; Console.WriteLine("Closing, please wait until all functions are stopped properly..."); StopAsync().Wait(); Console.WriteLine("All done, goodbye!"); appClosed.Set(); return(0); }); app.Execute(args); appClosed.WaitOne(); }
public static int Main(string[] args) { _logger = new NLogLogger("spawner.logs.txt"); if (args.Length > 1) { _logger.Error("Expecting at most one argument - the name of the config file (default when empty)."); Console.ReadLine(); return(1); } string configFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, args.Length == 1 ? args[0] : "spawner.json"); string jsonText = File.ReadAllText(configFileName); IJsonSerializer serializer = new UnforgivingJsonSerializer(); SpawnerConfig spawnerConfig = serializer.Deserialize <SpawnerConfig>(jsonText); foreach ((string name, InitParams parameters) in spawnerConfig.Runners) { string serialized = serializer.Serialize(parameters, true); string singleConfigPath = Path.Combine(Path.GetTempPath(), $"nethermind.runner.{name}.config.json"); File.WriteAllText(singleConfigPath, serialized); CreateAppConsole(spawnerConfig.ReleasePath, name, new[] { singleConfigPath }); } _logger.Info("Press ENTER to close all the spawned processes."); Console.ReadLine(); foreach ((string name, Process process) in Processes) { _logger.Info($"Closing {name}..."); if (!process.HasExited) { process.Kill(); process.WaitForExit(5000); if (process.HasExited) { _logger.Info($"{name} closed."); } else { _logger.Error($"{name} could not be closed."); } } else { _logger.Info($"{name} already exited."); } process.Close(); } _logger.Info("Press ENTER to exit."); Console.ReadKey(); return(0); }
public void Run(string[] args) { var(app, buildConfigProvider, getDbBasePath) = BuildCommandLineApp(); ManualResetEvent appClosed = new ManualResetEvent(false); app.OnExecute(async() => { var configProvider = buildConfigProvider(); var initConfig = configProvider.GetConfig <IInitConfig>(); if (initConfig.RemovingLogFilesEnabled) { RemoveLogFiles(initConfig.LogDirectory); } Logger = new NLogLogger(initConfig.LogFileName, initConfig.LogDirectory); LogMemoryConfiguration(); var pathDbPath = getDbBasePath(); if (!string.IsNullOrWhiteSpace(pathDbPath)) { var newDbPath = Path.Combine(pathDbPath, initConfig.BaseDbPath); if (Logger.IsInfo) { Logger.Info( $"Adding prefix to baseDbPath, new value: {newDbPath}, old value: {initConfig.BaseDbPath}"); } initConfig.BaseDbPath = newDbPath ?? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "db"); } Console.Title = initConfig.LogFileName; Console.CancelKeyPress += ConsoleOnCancelKeyPress; var serializer = new UnforgivingJsonSerializer(); if (Logger.IsInfo) { Logger.Info($"Running Nethermind Runner, parameters:\n{serializer.Serialize(initConfig, true)}\n"); } _cancelKeySource = new TaskCompletionSource <object>(); await StartRunners(configProvider); await _cancelKeySource.Task; Console.WriteLine("Closing, please wait until all functions are stopped properly..."); StopAsync().Wait(); Console.WriteLine("All done, goodbye!"); appClosed.Set(); return(0); }); app.Execute(args); appClosed.WaitOne(); }
new public void Run(string[] args) { var(app, buildConfigProvider, getDbBasePath) = BuildCommandLineApp(); ManualResetEventSlim appClosed = new ManualResetEventSlim(false); app.OnExecute(async() => { var configProvider = buildConfigProvider(); var initConfig = configProvider.GetConfig <IInitConfig>(); if (initConfig.RemovingLogFilesEnabled) { RemoveLogFiles(initConfig.LogDirectory); } Logger = new NLogLogger(initConfig.LogFileName, initConfig.LogDirectory); LogMemoryConfiguration(); var pathDbPath = getDbBasePath(); if (!string.IsNullOrWhiteSpace(pathDbPath)) { var newDbPath = Path.Combine(pathDbPath, initConfig.BaseDbPath); if (Logger.IsDebug) { Logger.Debug($"Adding prefix to baseDbPath, new value: {newDbPath}, old value: {initConfig.BaseDbPath}"); } initConfig.BaseDbPath = newDbPath ?? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "db"); } Console.Title = initConfig.LogFileName; var serializer = new UnforgivingJsonSerializer(); if (Logger.IsInfo) { Logger.Info($"Nethermind config:\n{serializer.Serialize(initConfig, true)}\n"); } await StartRunners(configProvider); Console.WriteLine("All done, goodbye!"); appClosed.Set(); return(0); }); app.Execute(args); appClosed.Wait(); }
protected override (CommandLineApplication, Func <InitParams>) BuildCommandLineApp() { var app = new CommandLineApplication { Name = "Nethermind.Runner" }; app.HelpOption("-?|-h|--help"); var configFile = app.Option("-c|--config <configFile>", "config file path", CommandOptionType.SingleValue); InitParams InitParams() { IJsonSerializer serializer = new UnforgivingJsonSerializer(); return(serializer.Deserialize <InitParams>(File.ReadAllText(configFile.HasValue() ? configFile.Value() : DefaultConfigFile))); }; return(app, InitParams); }
protected async Task StartRunners(IConfigProvider configProvider) { var initParams = configProvider.GetConfig <IInitConfig>(); var logManager = new NLogManager(initParams.LogFileName, initParams.LogDirectory); IRpcModuleProvider rpcModuleProvider = initParams.JsonRpcEnabled ? new RpcModuleProvider(configProvider.GetConfig <IJsonRpcConfig>()) : (IRpcModuleProvider)NullModuleProvider.Instance; _ethereumRunner = new EthereumRunner(rpcModuleProvider, configProvider, logManager); await _ethereumRunner.Start().ContinueWith(x => { if (x.IsFaulted && Logger.IsError) { Logger.Error("Error during ethereum runner start", x.Exception); } }); if (initParams.JsonRpcEnabled) { var serializer = new UnforgivingJsonSerializer(); rpcModuleProvider.Register <IShhModule>(new ShhModule(configProvider, logManager, serializer)); rpcModuleProvider.Register <IWeb3Module>(new Web3Module(configProvider, logManager, serializer)); Bootstrap.Instance.JsonRpcService = new JsonRpcService(rpcModuleProvider, configProvider, logManager); Bootstrap.Instance.LogManager = logManager; Bootstrap.Instance.JsonSerializer = serializer; _jsonRpcRunner = new JsonRpcRunner(configProvider, rpcModuleProvider, logManager); await _jsonRpcRunner.Start().ContinueWith(x => { if (x.IsFaulted && Logger.IsError) { Logger.Error("Error during jsonRpc runner start", x.Exception); } }); } else { if (Logger.IsInfo) { Logger.Info("Json RPC is disabled"); } } }
public static async Task Main(params string[] args) { HttpClient client = new HttpClient(); string[] transactionHashes = Directory.GetFiles(@"D:\tx_traces\nethermind").Select(Path.GetFileNameWithoutExtension).ToArray(); for (int i = 0; i < transactionHashes.Length; i++) { try { string gethPath = "D:\\tx_traces\\geth_" + transactionHashes[i] + ".txt"; string nethPath = "D:\\tx_traces\\nethermind\\" + transactionHashes[i] + ".txt"; Console.WriteLine($"Downloading {i} of {transactionHashes.Length}"); HttpRequestMessage msg = new HttpRequestMessage(HttpMethod.Post, "http://10.0.1.6:8545"); msg.Content = new StringContent($"{{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceTransaction\",\"params\":[\"{transactionHashes[i]}\"],\"id\":42}}"); msg.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); HttpResponseMessage rsp = await client.SendAsync(msg); string text = await rsp.Content.ReadAsStringAsync(); File.WriteAllText(gethPath, text); IJsonSerializer serializer = new UnforgivingJsonSerializer(); WrappedTransactionTrace gethTrace = serializer.Deserialize <WrappedTransactionTrace>(text); string nethText = File.ReadAllText(nethPath); TransactionTrace nethTrace = serializer.Deserialize <TransactionTrace>(nethText); if (gethTrace.Result.Gas != nethTrace.Gas) { Console.WriteLine($"Gas difference in {transactionHashes[i]} - neth {nethTrace.Gas} vs geth {gethTrace.Result.Gas}"); } } catch (Exception e) { Console.WriteLine($"Failed at {i} with {e}"); } } Console.WriteLine("Complete"); Console.ReadLine(); }
public static int Main(string[] args) { _logger = new SimpleConsoleLogger(); if (args.Length > 1) { _logger.Error("Expecting at most one argument - the name of the config file (default when empty)."); Console.ReadLine(); return(1); } string configFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, args.Length == 1 ? args[0] : "spawner_discovery_large.json"); string jsonText = File.ReadAllText(configFileName); IJsonSerializer serializer = new UnforgivingJsonSerializer(); SpawnerConfig spawnerConfig = serializer.Deserialize <SpawnerConfig>(jsonText); var configTempDir = Path.Combine(Path.GetTempPath(), "SpawnerConfigs"); if (!Directory.Exists(configTempDir)) { Directory.CreateDirectory(configTempDir); } var files = Directory.GetFiles(configTempDir); foreach (var file in files) { File.Delete(file); } _logger.Info($"Storing all runner configs in: {configTempDir}"); List <ProcessWrapper> wrappers = new List <ProcessWrapper>(); foreach ((string name, JToken parameters) in spawnerConfig.Runners) { string serialized = serializer.Serialize(parameters, true); string singleConfigPath = Path.Combine(configTempDir, $"nethermind.runner.{name}.cfg"); File.WriteAllText(singleConfigPath, serialized); try { wrappers.Add(CreateAppConsole(spawnerConfig.ReleasePath, spawnerConfig.DbBasePath, name, new[] { singleConfigPath })); } catch (Exception e) { Console.WriteLine(e); } } ChaosMonkey chaosMonkey = new ChaosMonkey(_logger, new ChaosMonkey.ChaosMonkeyOptions { IntervalSeconds = 0, AllDownIntervalSeconds = 0 }, wrappers.ToArray()); chaosMonkey.Start(); _logger.Info("Press ENTER to close all the spawned processes."); Console.ReadLine(); chaosMonkey.Stop(); _logger.Info("Press ENTER to exit."); Console.ReadKey(); return(0); }
public void Run(string[] args) { var(app, buildConfigProvider, getDbBasePath) = BuildCommandLineApp(); ManualResetEvent appClosed = new ManualResetEvent(false); app.OnExecute(async() => { var configProvider = buildConfigProvider(); var initConfig = configProvider.GetConfig <IInitConfig>(); if (initConfig.RemovingLogFilesEnabled) { RemoveLogFiles(initConfig.LogDirectory); } Logger = new NLogLogger(initConfig.LogFileName, initConfig.LogDirectory); LogMemoryConfiguration(); var pathDbPath = getDbBasePath(); if (!string.IsNullOrWhiteSpace(pathDbPath)) { var newDbPath = Path.Combine(pathDbPath, initConfig.BaseDbPath); if (Logger.IsInfo) { Logger.Info( $"Adding prefix to baseDbPath, new value: {newDbPath}, old value: {initConfig.BaseDbPath}"); } initConfig.BaseDbPath = newDbPath ?? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "db"); } Console.Title = initConfig.LogFileName; Console.CancelKeyPress += ConsoleOnCancelKeyPress; var serializer = new UnforgivingJsonSerializer(); if (Logger.IsInfo) { Logger.Info($"Running Nethermind Runner, parameters:\n{serializer.Serialize(initConfig, true)}\n"); } _cancelKeySource = new TaskCompletionSource <object>(); Task userCancelTask = Task.Factory.StartNew(() => { var detached = Environment.GetEnvironmentVariable("NETHERMIND_DETACHED_MODE")?.ToLowerInvariant() == "true"; Console.WriteLine("Enter 'e' to exit, 'q' to exit and log session details."); while (true) { if (detached) { var line = Console.ReadLine(); if (line == "e" || line == "E") { _exitType = ExitType.LightExit; break; } if (line == "q" || line == "Q") { _exitType = ExitType.DetailLogExit; break; } } else { var keyInfo = Console.ReadKey(); if (keyInfo.Key == ConsoleKey.E) { _exitType = ExitType.LightExit; break; } if (keyInfo.Key == ConsoleKey.Q) { _exitType = ExitType.DetailLogExit; break; } } } }); await StartRunners(configProvider); await Task.WhenAny(userCancelTask, _cancelKeySource.Task); Console.WriteLine("Closing, please wait until all functions are stopped properly..."); StopAsync().Wait(); Console.WriteLine("All done, goodbye!"); appClosed.Set(); return(0); }); app.Execute(args); appClosed.WaitOne(); }