public Task Init(INethermindApi api) { _api = api; var(getFromAPi, _) = _api.ForInit; _analyticsConfig = getFromAPi.Config <IAnalyticsConfig>(); IInitConfig initConfig = getFromAPi.Config <IInitConfig>(); _isOn = initConfig.WebSocketsEnabled && (_analyticsConfig.PluginsEnabled || _analyticsConfig.StreamBlocks || _analyticsConfig.StreamTransactions); if (!_isOn) { if (!initConfig.WebSocketsEnabled) { getFromAPi.LogManager.GetClassLogger().Warn($"{nameof(AnalyticsPlugin)} disabled due to {nameof(initConfig.WebSocketsEnabled)} set to false"); } else { getFromAPi.LogManager.GetClassLogger().Warn($"{nameof(AnalyticsPlugin)} plugin disabled due to {nameof(AnalyticsConfig)} settings set to false"); } } return(Task.CompletedTask); }
private void InitTransactionStreaming(IAnalyticsConfig analyticsConfig) { if (analyticsConfig.StreamTransactions) { TransactionsSubscription subscription = new TransactionsSubscription(_context.Producers, _context.MainBlockProcessor, _context.LogManager); _context.DisposeStack.Push(subscription); } }
public Task Execute(CancellationToken cancellationToken) { IAnalyticsConfig analyticsConfig = _context.Config <IAnalyticsConfig>(); InitBlocksStreaming(analyticsConfig); InitTransactionStreaming(analyticsConfig); LoadPlugins(analyticsConfig); return(Task.CompletedTask); }
private void InitBlocksStreaming(IAnalyticsConfig analyticsConfig) { if (analyticsConfig.StreamBlocks) { BlocksSubscription subscription = new BlocksSubscription(_api.Producers, _api.MainBlockProcessor, _api.LogManager); _api.DisposeStack.Push(subscription); } }
public Task Execute(CancellationToken cancellationToken) { IAnalyticsConfig analyticsConfig = _api.Config <IAnalyticsConfig>(); if (analyticsConfig.LogPublishedData) { LogProducer logProducer = new LogProducer(_api.EthereumJsonSerializer !, _api.LogManager); _api.Producers.Add(logProducer); } return(Task.CompletedTask); }
public Task Init(INethermindApi api) { _api = api; _analyticsConfig = _api.Config <IAnalyticsConfig>(); IInitConfig initConfig = _api.Config <IInitConfig>(); if (initConfig.WebSocketsEnabled && (_analyticsConfig.PluginsEnabled || _analyticsConfig.StreamBlocks || _analyticsConfig.StreamTransactions)) { AnalyticsWebSocketsModule webSocketsModule = new AnalyticsWebSocketsModule(_api.EthereumJsonSerializer); _api.WebSocketsManager !.AddModule(webSocketsModule, true); _api.Publishers.Add(webSocketsModule); _api.TxPool.NewDiscovered += TxPoolOnNewDiscovered; } return(Task.CompletedTask); }
private void LoadPlugins(IAnalyticsConfig analyticsConfig) { if (analyticsConfig.PluginsEnabled) { IInitConfig initConfig = _context.Config <IInitConfig>(); string fullPluginsDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory !, initConfig.PluginsDirectory); if (!Directory.Exists(fullPluginsDir)) { if (_logger.IsWarn) { _logger.Warn($"Plugins folder {fullPluginsDir} was not found. Skipping."); } return; } string[] pluginFiles = Directory.GetFiles(fullPluginsDir).Where(p => p.EndsWith("dll")).ToArray(); if (pluginFiles.Length > 0) { if (_logger.IsInfo) { _logger.Info($"Loading {pluginFiles.Length} analytics plugins from {fullPluginsDir}"); } } foreach (string path in pluginFiles) { if (_logger.IsInfo) { _logger.Warn($"Loading assembly {path}"); } Assembly assembly = Assembly.LoadFile(Path.Combine(fullPluginsDir, path)); foreach (Type type in assembly.GetTypes()) { if (typeof(IAnalyticsPluginLoader).IsAssignableFrom(type)) { InitPlugin(_logger, type); } } } } }
protected async Task StartRunners(CancellationToken cancellationToken, IConfigProvider configProvider) { IFileSystem fileSystem = new FileSystem(); IInitConfig initConfig = configProvider.GetConfig <IInitConfig>(); IJsonRpcConfig jsonRpcConfig = configProvider.GetConfig <IJsonRpcConfig>(); IMetricsConfig metricsConfig = configProvider.GetConfig <IMetricsConfig>(); ISeqConfig seqConfig = configProvider.GetConfig <ISeqConfig>(); NLogManager logManager = new NLogManager(initConfig.LogFileName, initConfig.LogDirectory); IRpcModuleProvider rpcModuleProvider = jsonRpcConfig.Enabled ? new RpcModuleProvider(fileSystem, configProvider.GetConfig <IJsonRpcConfig>(), logManager) : (IRpcModuleProvider)NullModuleProvider.Instance; EthereumJsonSerializer jsonSerializer = new EthereumJsonSerializer(); WebSocketsManager webSocketsManager = new WebSocketsManager(); if (seqConfig.MinLevel != "Off") { if (_logger?.IsInfo ?? false) { _logger !.Info($"Seq Logging enabled on host: {seqConfig.ServerUrl} with level: {seqConfig.MinLevel}"); } new NLogConfigurator().ConfigureSeqBufferTarget(seqConfig.ServerUrl, seqConfig.ApiKey, seqConfig.MinLevel); } if (!string.IsNullOrEmpty(metricsConfig.NodeName)) { logManager.SetGlobalVariable("nodeName", metricsConfig.NodeName); } if (metricsConfig.Enabled) { Metrics.Version = VersionToMetrics.ConvertToNumber(ClientVersion.Version); MetricsUpdater metricsUpdater = new MetricsUpdater(metricsConfig); _monitoringService = new MonitoringService(metricsUpdater, metricsConfig, logManager); _monitoringService.RegisterMetrics(typeof(Nethermind.Blockchain.Metrics)); _monitoringService.RegisterMetrics(typeof(Nethermind.Db.Metrics)); _monitoringService.RegisterMetrics(typeof(Nethermind.Evm.Metrics)); _monitoringService.RegisterMetrics(typeof(Nethermind.JsonRpc.Metrics)); _monitoringService.RegisterMetrics(typeof(Nethermind.Trie.Metrics)); _monitoringService.RegisterMetrics(typeof(Nethermind.Network.Metrics)); _monitoringService.RegisterMetrics(typeof(Nethermind.Synchronization.Metrics)); _monitoringService.RegisterMetrics(typeof(Nethermind.TxPool.Metrics)); _monitoringService.RegisterMetrics(typeof(Metrics)); _monitoringService.RegisterMetrics(typeof(Nethermind.Consensus.AuRa.Metrics)); await _monitoringService.StartAsync().ContinueWith(x => { if (x.IsFaulted && (_logger?.IsError ?? false)) { _logger !.Error("Error during starting a monitoring.", x.Exception); } }, cancellationToken); } else { if (_logger?.IsInfo ?? false) { _logger !.Info("Grafana / Prometheus metrics are disabled in configuration"); } } IGrpcConfig grpcConfig = configProvider.GetConfig <IGrpcConfig>(); GrpcServer? grpcServer = null; if (grpcConfig.Enabled) { grpcServer = new GrpcServer(jsonSerializer, logManager); _grpcRunner = new GrpcRunner(grpcServer, grpcConfig, logManager); await _grpcRunner.Start(cancellationToken).ContinueWith(x => { if (x.IsFaulted && (_logger?.IsError ?? false)) { _logger !.Error("Error during GRPC runner start", x.Exception); } }); } INdmDataPublisher? ndmDataPublisher = null; INdmConsumerChannelManager?ndmConsumerChannelManager = null; INdmInitializer? ndmInitializer = null; INdmConfig ndmConfig = configProvider.GetConfig <INdmConfig>(); bool ndmEnabled = ndmConfig.Enabled; if (ndmEnabled) { ndmDataPublisher = new NdmDataPublisher(); ndmConsumerChannelManager = new NdmConsumerChannelManager(); string initializerName = ndmConfig.InitializerName; if (_logger?.IsInfo ?? false) { _logger !.Info($"NDM initializer: {initializerName}"); } Type ndmInitializerType = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(a => a.GetTypes()) .FirstOrDefault(t => t.GetCustomAttribute <NdmInitializerAttribute>()?.Name == initializerName); NdmModule ndmModule = new NdmModule(); NdmConsumersModule ndmConsumersModule = new NdmConsumersModule(); ndmInitializer = new NdmInitializerFactory(ndmInitializerType, ndmModule, ndmConsumersModule, logManager) .CreateOrFail(); if (grpcServer != null) { ndmConsumerChannelManager.Add(new GrpcNdmConsumerChannel(grpcServer)); } NdmWebSocketsModule ndmWebSocketsModule = new NdmWebSocketsModule(ndmConsumerChannelManager, ndmDataPublisher, jsonSerializer); webSocketsManager.AddModule(ndmWebSocketsModule); } _ethereumRunner = new EthereumRunner( rpcModuleProvider, configProvider, logManager, grpcServer, ndmConsumerChannelManager, ndmDataPublisher, ndmInitializer, webSocketsManager, jsonSerializer, _monitoringService); IAnalyticsConfig analyticsConfig = configProvider.GetConfig <IAnalyticsConfig>(); if (analyticsConfig.PluginsEnabled || analyticsConfig.StreamBlocks || analyticsConfig.StreamTransactions) { webSocketsManager.AddModule(new AnalyticsWebSocketsModule(jsonSerializer), true); } await _ethereumRunner.Start(cancellationToken).ContinueWith(x => { if (x.IsFaulted && (_logger?.IsError ?? false)) { _logger !.Error("Error during ethereum runner start", x.Exception); } }); if (jsonRpcConfig.Enabled) { rpcModuleProvider.Register(new SingletonModulePool <IWeb3Module>(new Web3Module(logManager), true)); JsonRpcService jsonRpcService = new JsonRpcService(rpcModuleProvider, logManager); JsonRpcProcessor jsonRpcProcessor = new JsonRpcProcessor(jsonRpcService, jsonSerializer, jsonRpcConfig, fileSystem, logManager); if (initConfig.WebSocketsEnabled) { webSocketsManager.AddModule(new JsonRpcWebSocketsModule(jsonRpcProcessor, jsonSerializer), true); } Bootstrap.Instance.JsonRpcService = jsonRpcService; Bootstrap.Instance.LogManager = logManager; Bootstrap.Instance.JsonSerializer = jsonSerializer; _jsonRpcRunner = new JsonRpcRunner( configProvider, rpcModuleProvider, logManager, jsonRpcProcessor, webSocketsManager); await _jsonRpcRunner.Start(cancellationToken).ContinueWith(x => { if (x.IsFaulted && (_logger?.IsError ?? false)) { _logger !.Error("Error during jsonRpc runner start", x.Exception); } }); } else { if (_logger?.IsInfo ?? false) { _logger !.Info("Json RPC is disabled"); } } }
public void Initialise(IAnalyticsConfig config) { m_Trackers.Add(config.Initialise()); }