private static ILog CreateLogWithSlack(IServiceCollection services, IReloadingManager <AppSettings> settings) { var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); var dbLogConnectionStringManager = settings.Nested(x => x.DashApiService.Db.LogsConnString); var dbLogConnectionString = dbLogConnectionStringManager.CurrentValue; if (string.IsNullOrEmpty(dbLogConnectionString)) { consoleLogger.WriteWarningAsync(nameof(Startup), nameof(CreateLogWithSlack), "Table loggger is not inited").Wait(); return(aggregateLogger); } if (dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}")) { throw new InvalidOperationException($"LogsConnString {dbLogConnectionString} is not filled in settings"); } var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( AzureTableStorage <LogEntity> .Create(dbLogConnectionStringManager, "DashApiLog", consoleLogger), consoleLogger); // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = services.UseSlackNotificationsSenderViaAzureQueue(new AzureQueueIntegration.AzureQueueSettings { ConnectionString = settings.CurrentValue.SlackNotifications.AzureQueue.ConnectionString, QueueName = settings.CurrentValue.SlackNotifications.AzureQueue.QueueName }, aggregateLogger); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(slackService, consoleLogger); // Creating azure storage logger, which logs own messages to concole log var azureStorageLogger = new LykkeLogToAzureStorage( persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); return(aggregateLogger); }
private static ILog CreateLogWithSlack(IServiceCollection services, IReloadingManager <AppSettings> settings) { var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = services.UseSlackNotificationsSenderViaAzureQueue(new AzureQueueIntegration.AzureQueueSettings { ConnectionString = settings.CurrentValue.SlackNotifications.AzureQueue.ConnectionString, QueueName = settings.CurrentValue.SlackNotifications.AzureQueue.QueueName }, aggregateLogger); var dbLogConnectionStringManager = settings.Nested(x => x.FixQuotesService.Db.LogsConnString); var dbLogConnectionString = dbLogConnectionStringManager.CurrentValue; if (!string.IsNullOrEmpty(dbLogConnectionString) && !(dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}"))) { const string appName = "Lykke.Service.FIXQuotes"; var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( appName, AzureTableStorage <LogEntity> .Create(dbLogConnectionStringManager, "FIXQuotesLog", consoleLogger), consoleLogger); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(appName, slackService, consoleLogger); var azureStorageLogger = new LykkeLogToAzureStorage( appName, persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); } return(aggregateLogger); }
private ILog CreateLogWithSlack(IServiceCollection services, IReloadingManager <AppSettings> settings) { _consoleLog = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(_consoleLog); // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = services.UseSlackNotificationsSenderViaAzureQueue(new AzureQueueIntegration.AzureQueueSettings { ConnectionString = settings.CurrentValue.SlackNotifications.AzureQueue.ConnectionString, QueueName = settings.CurrentValue.SlackNotifications.AzureQueue.QueueName }, aggregateLogger); var dbLogConnectionStringManager = settings.Nested(x => x.OrderbookToBlobBridgeJob.LogsConnectionString); var dbLogConnectionString = dbLogConnectionStringManager.CurrentValue; // Creating azure storage logger, which logs own messages to concole log if (!string.IsNullOrEmpty(dbLogConnectionString) && !(dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}"))) { var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( AzureTableStorage <LogEntity> .Create(dbLogConnectionStringManager, "OrderbookToBlobBridgeLogs", _consoleLog), _consoleLog); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager( slackService, new HashSet <string> { LykkeLogToAzureStorage.ErrorType, LykkeLogToAzureStorage.FatalErrorType, LykkeLogToAzureStorage.MonitorType }, _consoleLog); var azureStorageLogger = new LykkeLogToAzureStorage( persistenceManager, slackNotificationsManager, _consoleLog); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); var logToSlack = LykkeLogToSlack.Create(slackService, "Bridges", LogLevel.Error | LogLevel.FatalError | LogLevel.Warning); aggregateLogger.AddLog(logToSlack); } return(aggregateLogger); }
public void TestSlackManagerAllowsSameMessageSpamAfterTimeoutWithCustomConfiguration() { var mutePeriod = TimeSpan.FromSeconds(2); // Arrange var manager = new LykkeLogToAzureSlackNotificationsManager(_slackNotificationsSenderMock) .SetSpamMutePeriodForLevels(mutePeriod, LogLevel.Warning); manager.Start(); var logEntry = LogEntity.CreateWithoutRowKey( LykkeLogToAzureStorage.WarningType, "Component", "Process", "Context", null, null, "Message", DateTime.UtcNow); // Act manager.SendNotification(logEntry); Thread.Sleep(mutePeriod); manager.SendNotification(logEntry); //Assert _slackNotificationsSenderMock.Received(2).SendAsync(Arg.Is <string>(t => t == "Warning"), Arg.Any <string>(), Arg.Any <string>()); }
public void TestSlackManagerAllowsDifferentComponentMessagesWithDefaultConfiguration() { // Arrange var manager = new LykkeLogToAzureSlackNotificationsManager(_slackNotificationsSenderMock); manager.Start(); // Act var logEntry1 = LogEntity.CreateWithoutRowKey( LykkeLogToAzureStorage.WarningType, "Component1", "Process", "Context", null, null, "Message", DateTime.UtcNow); manager.SendNotification(logEntry1); var logEntry2 = LogEntity.CreateWithoutRowKey( LykkeLogToAzureStorage.WarningType, "Component2", "Process", "Context", null, null, "Message", DateTime.UtcNow); manager.SendNotification(logEntry2); //Assert _slackNotificationsSenderMock.Received(2).SendAsync(Arg.Is <string>(t => t == "Warning"), Arg.Any <string>(), Arg.Any <string>()); }
private static ILog CreateLogWithSlack(IServiceCollection services, AppSettings settings) { var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = services.UseSlackNotificationsSenderViaAzureQueue(new AzureQueueIntegration.AzureQueueSettings { ConnectionString = settings.SlackNotifications.AzureQueue.ConnectionString, QueueName = settings.SlackNotifications.AzureQueue.QueueName }, aggregateLogger); var dbLogConnectionString = settings.GoogleDriveUploadService.Db.LogsConnString; // Creating azure storage logger, which logs own messages to concole log if (!string.IsNullOrEmpty(dbLogConnectionString) && !(dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}"))) { const string appName = "Lykke.Service.GoogleDriveUpload"; var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( appName, AzureTableStorage <LogEntity> .Create(() => dbLogConnectionString, "GoogleDriveUploadLog", consoleLogger), consoleLogger); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(appName, slackService, consoleLogger); var azureStorageLogger = new LykkeLogToAzureStorage( appName, persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); } return(aggregateLogger); }
private static ILog CreateLogWithSlack(IServiceCollection services, SlackNotificationsSettings slackSettings, IReloadingManager <string> dbLogConnectionStringManager) { var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = services.UseSlackNotificationsSenderViaAzureQueue(new AzureQueueSettings { ConnectionString = slackSettings.AzureQueue.ConnectionString, QueueName = slackSettings.AzureQueue.QueueName }, aggregateLogger); var dbLogConnectionString = dbLogConnectionStringManager.CurrentValue; // Creating azure storage logger, which logs own messages to concole log if (!string.IsNullOrEmpty(dbLogConnectionString) && !(dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}"))) { var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( AzureTableStorage <LogEntity> .Create(dbLogConnectionStringManager, "CandlesHistoryWriterLogs", consoleLogger), consoleLogger); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(slackService, consoleLogger); var azureStorageLogger = new LykkeLogToAzureStorage( persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); } var logToSlack = LykkeLogToSlack.Create(slackService, "Prices"); aggregateLogger.AddLog(logToSlack); return(aggregateLogger); }
private static ILog CreateLogWithSlack(IServiceCollection services, IReloadingManager <AppSettings> settings) { var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = services.UseSlackNotificationsSenderViaAzureQueue(new AzureQueueIntegration.AzureQueueSettings { ConnectionString = settings.CurrentValue.SlackNotifications.AzureQueue.ConnectionString, QueueName = settings.CurrentValue.SlackNotifications.AzureQueue.QueueName }, aggregateLogger); var dbLogConnectionStringManager = settings.Nested(x => x.IcoEthTransactionTrackerJob.Db.LogsConnString); var dbLogConnectionString = dbLogConnectionStringManager.CurrentValue; // Creating azure storage logger, which logs own messages to concole log if (!string.IsNullOrEmpty(dbLogConnectionString) && !(dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}"))) { var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( AzureTableStorage <LogEntity> .Create(dbLogConnectionStringManager, "IcoEthTransactionTrackerLog", consoleLogger), consoleLogger); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(slackService, consoleLogger); var azureStorageLogger = new LykkeLogToAzureStorage( persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); } aggregateLogger.AddLog(LykkeLogToSlack.Create(slackService, "Ico", LogLevel.Error | LogLevel.FatalError)); return(aggregateLogger); }
private static ILog CreateLogWithSlack(IServiceCollection services, IReloadingManager <AppSettings> settings) { var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); var vl = settings.CurrentValue; Console.WriteLine(vl); // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = services.UseSlackNotificationsSenderViaAzureQueue(settings.CurrentValue.SlackNotifications.AzureQueue, aggregateLogger); var dbLogConnectionStringManager = settings.Nested(x => x.InvoicesService.Db.LogsConnectionString); var dbLogConnectionString = dbLogConnectionStringManager.CurrentValue; // Creating azure storage logger, which logs own messages to concole log if (!string.IsNullOrEmpty(dbLogConnectionString) && !(dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}"))) { var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( AzureTableStorage <LogEntity> .Create(dbLogConnectionStringManager, "LykkePayServiceInvocesLog", consoleLogger), consoleLogger); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(slackService, consoleLogger); var azureStorageLogger = new LykkeLogToAzureStorage( persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); } return(aggregateLogger); }
private static ILog CreateLogWithSlack(IServiceCollection services, IReloadingManager <AppSettings> settings) { var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = CreateSlackService(services, settings, aggregateLogger); var dbLogConnectionStringManager = settings.Nested(x => x.MarginTradingOrderbookAggregator.Db.LogsConnString); var dbLogConnectionString = dbLogConnectionStringManager.CurrentValue; // Creating azure storage logger, which logs own messages to concole log if (!string.IsNullOrEmpty(dbLogConnectionString) && !(dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}"))) { var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( AzureTableStorage <LogEntity> .Create(dbLogConnectionStringManager, ServiceName + "Log", consoleLogger), consoleLogger); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(slackService, consoleLogger); var azureStorageLogger = new LykkeLogToAzureStorage( persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); services.AddSingleton(azureStorageLogger); aggregateLogger.AddLog(azureStorageLogger); } return(aggregateLogger); }
// This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { ILog log = new LogToConsole(); var appName = nameof(TradingBot); // Register dependencies, populate the services from // the collection, and build the container. If you want // to dispose of the container at the end of the app, // be sure to keep a reference to it as a property or field. var builder = new ContainerBuilder(); try { // Add framework services. services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; }); services.AddSwaggerGen(options => { options.DefaultLykkeConfiguration("v1", "ExchangeConnectorAPI"); options.AddSecurityDefinition("CustomScheme", new ApiKeyScheme { In = "header", Description = "Please insert API key into field", Name = ApiKeyAuthAttribute.HeaderName, Type = "apiKey" }); }); var settingsManager = Configuration.LoadSettings <TradingBotSettings>("SettingsUrl"); builder.RegisterInstance(settingsManager) .As <IReloadingManager <TradingBotSettings> >(); var topSettings = settingsManager.CurrentValue; var settings = topSettings.TradingBot; builder.RegisterInstance(settings) .As <AppSettings>() .SingleInstance(); if (settings.AzureStorage.Enabled) { var slackService = services.UseSlackNotificationsSenderViaAzureQueue(topSettings.SlackNotifications.AzureQueue, log); var tableStorage = AzureTableStorage <LogEntity> .Create( settingsManager.ConnectionString(i => i.TradingBot.AzureStorage.LogsConnString), settings.AzureStorage.LogTableName, log); builder.RegisterInstance(tableStorage).As <INoSQLTableStorage <LogEntity> >().SingleInstance(); var persistenceManager = new LykkeLogToAzureStoragePersistenceManager(appName, tableStorage, log); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(appName, slackService, log); var logToTable = new LykkeLogToAzureStorage( appName, persistenceManager, slackNotificationsManager, log); logToTable.Start(); log = new LogAggregate() .AddLogger(log) .AddLogger(logToTable) .CreateLogger(); } ApiKeyAuthAttribute.ApiKey = settings.AspNet.ApiKey; // SignedModelAuthAttribute.ApiKey = settings.AspNet.ApiKey; //TODO use it somewhere builder.RegisterInstance(log).As <ILog>().SingleInstance(); var signalsStorage = AzureTableStorage <TranslatedSignalTableEntity> .Create( settingsManager.ConnectionString(i => i.TradingBot.AzureStorage.EntitiesConnString), settings.AzureStorage.TranslatedSignalsTableName, log); builder.RegisterInstance(signalsStorage).As <INoSQLTableStorage <TranslatedSignalTableEntity> >().SingleInstance(); builder.RegisterModule(new ServiceModule(settings, log)); builder.Populate(services); ApplicationContainer = builder.Build(); _log = log; // Create the IServiceProvider based on the container. return(new AutofacServiceProvider(ApplicationContainer)); } catch (Exception exc) { log.WriteErrorAsync( appName, nameof(Startup), nameof(ConfigureServices), exc, DateTime.UtcNow) .Wait(); throw; } }
private static ILog CreateLogWithSlack(IConfiguration configuration, IServiceCollection services, IReloadingManager <AppSettings> settings, CorrelationContextAccessor correlationContextAccessor) { var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); #region Logs settings validation if (!settings.CurrentValue.TradingHistoryService.UseSerilog && string.IsNullOrWhiteSpace(settings.CurrentValue.TradingHistoryService.Db.LogsConnString)) { throw new Exception("Either UseSerilog must be true or LogsConnString must be set"); } #endregion Logs settings validation // Creating slack notification service, which logs own azure queue processing messages to aggregate log ILykkeLogToAzureSlackNotificationsManager slackNotificationsManager = null; if (settings.CurrentValue.SlackNotifications != null) { var slackService = services.UseSlackNotificationsSenderViaAzureQueue( new Lykke.AzureQueueIntegration.AzureQueueSettings { ConnectionString = settings.CurrentValue.SlackNotifications.AzureQueue.ConnectionString, QueueName = settings.CurrentValue.SlackNotifications.AzureQueue.QueueName }, aggregateLogger); slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(slackService, consoleLogger); } if (settings.CurrentValue.TradingHistoryService.UseSerilog) { aggregateLogger.AddLog(new SerilogLogger(typeof(Startup).Assembly, configuration, new List <ILogEventEnricher>() { new CorrelationLogEventEnricher("CorrelationId", correlationContextAccessor) })); } else if (settings.CurrentValue.TradingHistoryService.Db.StorageMode == StorageMode.Azure) { var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( AzureTableStorage <LogEntity> .Create(settings.Nested(x => x.TradingHistoryService.Db.LogsConnString), "TradingHistoryServiceLog", consoleLogger), consoleLogger); // Creating azure storage logger, which logs own messages to concole log var azureStorageLogger = new LykkeLogToAzureStorage( persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); } else if (settings.CurrentValue.TradingHistoryService.Db.StorageMode == StorageMode.SqlServer) { var sqlLogger = new LogToSql(new SqlLogRepository("TradingHistoryAPIsLog", settings.CurrentValue.TradingHistoryService.Db.LogsConnString)); aggregateLogger.AddLog(sqlLogger); } LogLocator.Log = aggregateLogger; return(aggregateLogger); }
private static ILog CreateLogWithSlack(IConfiguration configuration, IServiceCollection services, IReloadingManager <AppSettings> settings) { var tableName = "CandlesProducerServiceLog"; var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); LykkeLogToAzureSlackNotificationsManager slackNotificationsManager = null; if (settings.CurrentValue.SlackNotifications != null) { // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = services.UseSlackNotificationsSenderViaAzureQueue(new AzureQueueIntegration.AzureQueueSettings { ConnectionString = settings.CurrentValue.SlackNotifications.AzureQueue.ConnectionString, QueueName = settings.CurrentValue.SlackNotifications.AzureQueue.QueueName }, aggregateLogger); slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(slackService, consoleLogger); var logToSlack = LykkeLogToSlack.Create(slackService, "Prices"); aggregateLogger.AddLog(logToSlack); } if (settings.CurrentValue.MtCandlesProducerJob.UseSerilog) { aggregateLogger.AddLog(new SerilogLogger(typeof(Startup).Assembly, configuration)); } else if (settings.CurrentValue.MtCandlesProducerJob.Db.StorageMode == StorageMode.SqlServer) { aggregateLogger.AddLog( new LogToSql(new SqlLogRepository(tableName, settings.CurrentValue.MtCandlesProducerJob.Db.LogsConnString))); } else if (settings.CurrentValue.MtCandlesProducerJob.Db.StorageMode == StorageMode.Azure) { var dbLogConnectionString = settings.CurrentValue.MtCandlesProducerJob.Db.LogsConnString; // Creating azure storage logger, which logs own messages to console log if (!string.IsNullOrEmpty(dbLogConnectionString) && !(dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}"))) { var persistenceManager = new LykkeLogToAzureStoragePersistenceManager( AzureTableStorage <Logs.LogEntity> .Create(settings.Nested(x => x.MtCandlesProducerJob.Db.LogsConnString), tableName, consoleLogger), consoleLogger); var azureStorageLogger = new LykkeLogToAzureStorage( persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); } } return(aggregateLogger); }
private static Common.Log.ILog CreateLogWithSlack(IServiceCollection services, IReloadingManager <Settings> appSettings) { var consoleLogger = new LogToConsole(); var aggregateLogger = new AggregateLogger(); aggregateLogger.AddLog(consoleLogger); // Creating slack notification service, which logs own azure queue processing messages to aggregate log var slackService = services.UseSlackNotificationsSenderViaAzureQueue(new Lykke.AzureQueueIntegration.AzureQueueSettings { ConnectionString = appSettings.CurrentValue.PayApi.Db.LogsConnString, QueueName = appSettings.CurrentValue.SlackNotifications.AzureQueue.QueueName }, aggregateLogger); var dbLogConnectionStringManager = appSettings.Nested(x => x.PayApi.Db.LogsConnString); var dbLogConnectionString = dbLogConnectionStringManager.CurrentValue; // Creating azure storage logger, which logs own messages to concole log if (!string.IsNullOrEmpty(dbLogConnectionString) && !(dbLogConnectionString.StartsWith("${") && dbLogConnectionString.EndsWith("}"))) { var persistenceManager = new LykkeLogToAzureStoragePersistenceManager("LykkePayApi", AzureStorage.Tables.AzureTableStorage <Lykke.Logs.LogEntity> .Create(dbLogConnectionStringManager, "LykkePayApiLog", consoleLogger), consoleLogger); var slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(slackService, consoleLogger); var azureStorageLogger = new LykkeLogToAzureStorage( persistenceManager, slackNotificationsManager, consoleLogger); azureStorageLogger.Start(); aggregateLogger.AddLog(azureStorageLogger); } return(aggregateLogger); }