public async Task ExecuteAsync_InsertAllMessagesAfter50ms_Ok() { var sqlServerMock = new Mock <ISqlServerBulk>(); sqlServerMock.Setup( v => v.ExecuteAsync(It.IsAny <ICollection <YadlMessage> >(), It.IsAny <CancellationToken>())) .Returns(() => Task.CompletedTask); var options = new YadlLoggerOptions { BatchSize = 100, BatchPeriod = 50 }; var yadlProcessor = new YadlProcessor(options); var hostedService = new TimedHostedService(yadlProcessor, options, sqlServerMock.Object); await hostedService.StartAsync(CancellationToken.None); for (int i = 1; i <= 15; i++) { _ = yadlProcessor !.ChannelWriter.TryWrite(new YadlMessage { Message = $"MSG: {i}", Level = 1, LevelDescription = "Debug", TimeStamp = DateTimeOffset.Now }); } await hostedService.StopAsync(CancellationToken.None); yadlProcessor.Messages.Should().BeEmpty(); }
public YadlLoggerProvider(IYadlProcessor processor, YadlLoggerOptions options) { _options = options; _processor = processor; if (_options == null) { throw new ArgumentNullException(nameof(_options)); } if (_processor == null) { throw new ArgumentNullException(nameof(_processor)); } if (_options.BatchSize <= 0) { throw new ArgumentOutOfRangeException(nameof(_options.BatchSize), $"{nameof(_options.BatchSize)} must be a positive number."); } if (string.IsNullOrEmpty(_options.ConnectionString)) { throw new ArgumentNullException(nameof(_options.ConnectionString), $"{nameof(_options.ConnectionString)} cannot be null or empty."); } if (string.IsNullOrEmpty(_options.TableDestination)) { throw new ArgumentNullException(nameof(_options.TableDestination), $"{nameof(_options.TableDestination)} cannot be null or empty."); } }
public async Task ExecuteAsync_CountMessagesMoreThanBatchSize_Ok() { var sqlServerMock = new Mock <ISqlServerBulk>(); sqlServerMock.Setup( v => v.ExecuteAsync(It.IsAny <ICollection <YadlMessage> >(), It.IsAny <CancellationToken>())) .Returns(() => Task.CompletedTask); var options = new YadlLoggerOptions { BatchSize = 100 }; var yadlProcessor = new YadlProcessor(options); var hostedService = new CoreLoggerHostedService(yadlProcessor, options, sqlServerMock.Object); await hostedService.StartAsync(CancellationToken.None); for (int i = 1; i <= 250; i++) { _ = yadlProcessor !.ChannelWriter.TryWrite(new YadlMessage { Message = $"MSG: {i}", Level = 1, LevelDescription = "Debug", TimeStamp = DateTimeOffset.Now }); } await Task.Delay(25); await hostedService.StopAsync(CancellationToken.None); yadlProcessor.Messages.Should().HaveCount(50); }
public TimedHostedService(IYadlProcessor processor, YadlLoggerOptions options, ISqlServerBulk sqlServerBulk) { _processor = processor; _options = options; _sqlServerBulk = sqlServerBulk; _memberLock = new object(); }
public YadlProcessor(YadlLoggerOptions options) { _options = options; if (_options == null) { throw new ArgumentNullException(nameof(options)); } Channel = System.Threading.Channels.Channel.CreateUnbounded <YadlMessage>( new UnboundedChannelOptions { SingleReader = false, SingleWriter = true }); Messages = new ConcurrentBag <YadlMessage>(); ChannelReader = Channel.Reader; ChannelWriter = Channel.Writer; }
public SqlServerBulk(YadlLoggerOptions options) { _options = options; }
public YadlLogger(string name, YadlLoggerOptions options, IYadlProcessor processor) { _name = name; _options = options; _processor = processor; }