Ejemplo n.º 1
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);

                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();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
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();
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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");
                }
            }
        }
Ejemplo n.º 7
0
        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();
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
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();
        }