diff --git a/TransactionProcessor.Mobile.BusinessLogic.Tests/RequestHandlerTests/SupportRequestHandlerTests.cs b/TransactionProcessor.Mobile.BusinessLogic.Tests/RequestHandlerTests/SupportRequestHandlerTests.cs index 92f33c9b7..f15469f32 100644 --- a/TransactionProcessor.Mobile.BusinessLogic.Tests/RequestHandlerTests/SupportRequestHandlerTests.cs +++ b/TransactionProcessor.Mobile.BusinessLogic.Tests/RequestHandlerTests/SupportRequestHandlerTests.cs @@ -1,9 +1,12 @@ using Moq; using Shouldly; using TransactionProcessor.Mobile.BusinessLogic.Database; +using TransactionProcessor.Mobile.BusinessLogic.Models; using TransactionProcessor.Mobile.BusinessLogic.RequestHandlers; using TransactionProcessor.Mobile.BusinessLogic.Requests; using TransactionProcessor.Mobile.BusinessLogic.Services; +using LogLevel = TransactionProcessor.Mobile.BusinessLogic.Database.LogLevel; +using LogMessage = TransactionProcessor.Mobile.BusinessLogic.Database.LogMessage; namespace TransactionProcessor.Mobile.BusinessLogic.Tests.RequestHandlerTests; @@ -22,7 +25,7 @@ public async Task SupportRequestHandlerTests_UploadLogsRequest_NoLogs_Handle_IsH Mock databaseContext = new Mock(); databaseContext.Setup(d => d.GetLogMessages(It.IsAny(), It.IsAny())).ReturnsAsync(new List()); Mock applicationCache = new Mock(); - + applicationCache.Setup(s => s.GetConfiguration()).Returns(new Configuration()); SupportRequestHandler handler = new SupportRequestHandler(configurationServiceResolver, databaseContext.Object, applicationCache.Object); UploadLogsRequest request = UploadLogsRequest.Create(TestData.DeviceIdentifier); @@ -56,6 +59,7 @@ public async Task SupportRequestHandlerTests_UploadLogsRequest_LogsToUpload_Only }).ReturnsAsync(new List()); Mock applicationCache = new Mock(); + applicationCache.Setup(s => s.GetConfiguration()).Returns(new Configuration()); SupportRequestHandler handler = new SupportRequestHandler(configurationServiceResolver, databaseContext.Object, applicationCache.Object); @@ -98,6 +102,7 @@ public async Task SupportRequestHandlerTests_UploadLogsRequest_LogsToUpload_15Me }).ReturnsAsync(new List()); Mock applicationCache = new Mock(); + applicationCache.Setup(s => s.GetConfiguration()).Returns(new Configuration()); SupportRequestHandler handler = new SupportRequestHandler(configurationServiceResolver, databaseContext.Object, applicationCache.Object); diff --git a/TransactionProcessor.Mobile.BusinessLogic/Models/TokenResponseModel.cs b/TransactionProcessor.Mobile.BusinessLogic/Models/TokenResponseModel.cs index c34632e22..0f1b54f5f 100644 --- a/TransactionProcessor.Mobile.BusinessLogic/Models/TokenResponseModel.cs +++ b/TransactionProcessor.Mobile.BusinessLogic/Models/TokenResponseModel.cs @@ -38,5 +38,6 @@ public class Configuration public Boolean EnableAutoUpdates { get; set; } public Boolean ShowDebugMessages { get; set; } + public Int32? LogMessageBatchSize { get; set; } } } diff --git a/TransactionProcessor.Mobile.BusinessLogic/RequestHandlers/SupportRequestHandler.cs b/TransactionProcessor.Mobile.BusinessLogic/RequestHandlers/SupportRequestHandler.cs index d53a510bf..767236fbf 100644 --- a/TransactionProcessor.Mobile.BusinessLogic/RequestHandlers/SupportRequestHandler.cs +++ b/TransactionProcessor.Mobile.BusinessLogic/RequestHandlers/SupportRequestHandler.cs @@ -1,7 +1,9 @@ using MediatR; using TransactionProcessor.Mobile.BusinessLogic.Database; +using TransactionProcessor.Mobile.BusinessLogic.Models; using TransactionProcessor.Mobile.BusinessLogic.Requests; using TransactionProcessor.Mobile.BusinessLogic.Services; +using LogMessage = TransactionProcessor.Mobile.BusinessLogic.Database.LogMessage; namespace TransactionProcessor.Mobile.BusinessLogic.RequestHandlers { @@ -25,20 +27,19 @@ public SupportRequestHandler(Func configurationS public async Task Handle(UploadLogsRequest request, CancellationToken cancellationToken) { Boolean useTrainingMode = this.ApplicationCache.GetUseTrainingMode(); + Configuration configuration = this.ApplicationCache.GetConfiguration(); + while (true) { + IConfigurationService configurationService = this.ConfigurationServiceResolver(useTrainingMode); - while (true) - { - List logEntries = await this.DatabaseContext.GetLogMessages(10, useTrainingMode); // TODO: Configurable batch size + List logEntries = await this.DatabaseContext.GetLogMessages(configuration.LogMessageBatchSize.GetValueOrDefault(10), useTrainingMode); - if (logEntries.Any() == false) - { + if (logEntries.Any() == false) { break; } - List logMessageModels = new List(); + List logMessageModels = new(); - logEntries.ForEach(l => logMessageModels.Add(new Models.LogMessage - { + logEntries.ForEach(l => logMessageModels.Add(new Models.LogMessage { LogLevel = Enum.Parse(l.LogLevel), LogLevelString = l.LogLevel, Message = l.Message, @@ -46,7 +47,7 @@ public async Task Handle(UploadLogsRequest request, CancellationToken c Id = l.Id })); - IConfigurationService configurationService = this.ConfigurationServiceResolver(useTrainingMode); + await configurationService.PostDiagnosticLogs(request.DeviceIdentifier, logMessageModels, CancellationToken.None); // Clear the logs that have been uploaded @@ -60,9 +61,9 @@ public async Task Handle(UploadLogsRequest request, CancellationToken c CancellationToken cancellationToken) { Boolean useTrainingMode = this.ApplicationCache.GetUseTrainingMode(); - List logEntries = await this.DatabaseContext.GetLogMessages(50, useTrainingMode); // TODO: Configurable batch size + List logEntries = await this.DatabaseContext.GetLogMessages(50, useTrainingMode); - List logMessageModels = new List(); + List logMessageModels = new(); logEntries.ForEach(l => logMessageModels.Add(new Models.LogMessage { LogLevel = Enum.Parse(l.LogLevel), diff --git a/TransactionProcessor.Mobile.BusinessLogic/Services/ConfigurationService.cs b/TransactionProcessor.Mobile.BusinessLogic/Services/ConfigurationService.cs index 0402ea426..d5acccfb2 100644 --- a/TransactionProcessor.Mobile.BusinessLogic/Services/ConfigurationService.cs +++ b/TransactionProcessor.Mobile.BusinessLogic/Services/ConfigurationService.cs @@ -81,6 +81,7 @@ public async Task> GetConfiguration(String deviceIdentifie SecurityServiceUri = apiResponse.HostAddresses.Single(h => h.ServiceType == ServiceType.Security).Uri, TransactionProcessorAclUri = apiResponse.HostAddresses.Single(h => h.ServiceType == ServiceType.TransactionProcessorAcl).Uri, + LogMessageBatchSize = apiResponse.LogMessageBatchSize.GetValueOrDefault(), }; Logger.LogDebug($"About to xlate log level"); diff --git a/TransactionProcessor.Mobile.BusinessLogic/Services/DataTransferObjects/ConfigurationResponse.cs b/TransactionProcessor.Mobile.BusinessLogic/Services/DataTransferObjects/ConfigurationResponse.cs index 2b3f1740a..c71412e92 100644 --- a/TransactionProcessor.Mobile.BusinessLogic/Services/DataTransferObjects/ConfigurationResponse.cs +++ b/TransactionProcessor.Mobile.BusinessLogic/Services/DataTransferObjects/ConfigurationResponse.cs @@ -19,4 +19,6 @@ public class ConfigurationResponse public string Id { get; set; } public LoggingLevel LogLevel { get; set; } + + public Int32? LogMessageBatchSize { get; set; } }