From 8151505c6d26082c3703b673040f53e412df9ce1 Mon Sep 17 00:00:00 2001 From: danielmarbach Date: Wed, 20 Mar 2024 16:43:35 +0100 Subject: [PATCH 1/6] remove unnecessary TODO which is a left over --- src/ServiceControl/Hosting/Commands/MaintenanceModeCommand.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ServiceControl/Hosting/Commands/MaintenanceModeCommand.cs b/src/ServiceControl/Hosting/Commands/MaintenanceModeCommand.cs index 6941a0bc67..bd2e23a1ff 100644 --- a/src/ServiceControl/Hosting/Commands/MaintenanceModeCommand.cs +++ b/src/ServiceControl/Hosting/Commands/MaintenanceModeCommand.cs @@ -26,9 +26,7 @@ public override async Task Execute(HostArguments args, Settings settings) hostBuilder.Services.AddSingleton(); } - // TODO: Update to use the same pattern as the main Bootstrapper var host = hostBuilder.Build(); - await host.RunAsync(); } } From 7edc39148e17bdf4af5ed97fc911c1b56b682765 Mon Sep 17 00:00:00 2001 From: danielmarbach Date: Wed, 20 Mar 2024 16:46:27 +0100 Subject: [PATCH 2/6] Remove left over TODO in CachingHttpHandler (we remove the other ones too) --- .../Infrastructure/WebApi/CachingHttpHandler.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ServiceControl.Audit/Infrastructure/WebApi/CachingHttpHandler.cs b/src/ServiceControl.Audit/Infrastructure/WebApi/CachingHttpHandler.cs index 6a9205cef8..1d6b2afba3 100644 --- a/src/ServiceControl.Audit/Infrastructure/WebApi/CachingHttpHandler.cs +++ b/src/ServiceControl.Audit/Infrastructure/WebApi/CachingHttpHandler.cs @@ -6,7 +6,6 @@ class CachingHttpHandler : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { - // TODO do we even need to do this var response = context.HttpContext.Response; if (!response.Headers.ContainsKey("Cache-Control")) { From ba4cd0662e5b411fe9174faf8d54b2b76c6df4de Mon Sep 17 00:00:00 2001 From: danielmarbach Date: Wed, 20 Mar 2024 16:49:06 +0100 Subject: [PATCH 3/6] Align the monitor http logging with the other instances --- .../HostApplicationBuilderExtensions.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ServiceControl.Monitoring/HostApplicationBuilderExtensions.cs b/src/ServiceControl.Monitoring/HostApplicationBuilderExtensions.cs index f263eb8363..8c91ff96f6 100644 --- a/src/ServiceControl.Monitoring/HostApplicationBuilderExtensions.cs +++ b/src/ServiceControl.Monitoring/HostApplicationBuilderExtensions.cs @@ -53,9 +53,7 @@ public static class HostApplicationBuilderExtensions services.AddHttpLogging(options => { - // TODO Do we need to expose the host? - // we could also include the time it took to process the request - options.LoggingFields = HttpLoggingFields.RequestPath | HttpLoggingFields.RequestMethod | HttpLoggingFields.ResponseStatusCode; + options.LoggingFields = HttpLoggingFields.RequestPath | HttpLoggingFields.RequestMethod | HttpLoggingFields.ResponseStatusCode | HttpLoggingFields.Duration; }); // Core registers the message dispatcher to be resolved from the transport seam. The dispatcher From 6aca336ff1788275412d66a265b3929afbf9b100 Mon Sep 17 00:00:00 2001 From: danielmarbach Date: Wed, 20 Mar 2024 16:53:55 +0100 Subject: [PATCH 4/6] Previously we used AllowAnyHeader = false and AllowAnyHeader = false. We are explicitely adding headers and methods that we allow. --- src/ServiceControl.Monitoring/WebApplicationExtensions.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ServiceControl.Monitoring/WebApplicationExtensions.cs b/src/ServiceControl.Monitoring/WebApplicationExtensions.cs index 7ab2664754..17969bc733 100644 --- a/src/ServiceControl.Monitoring/WebApplicationExtensions.cs +++ b/src/ServiceControl.Monitoring/WebApplicationExtensions.cs @@ -10,9 +10,6 @@ public static void UseServiceControlMonitoring(this WebApplication appBuilder) appBuilder.UseCors(policyBuilder => { - // TODO verify that the default is no headers and no methods allowed - //builder.AllowAnyHeader(); - //builder.AllowAnyMethod(); policyBuilder.AllowAnyOrigin(); policyBuilder.WithExposedHeaders(["ETag", "Last-Modified", "Link", "Total-Count", "X-Particular-Version"]); policyBuilder.WithHeaders(["Origin", "X-Requested-With", "Content-Type", "Accept"]); From d7af9369eea76d70c40a78ece9c819690d99ad31 Mon Sep 17 00:00:00 2001 From: danielmarbach Date: Wed, 20 Mar 2024 17:02:30 +0100 Subject: [PATCH 5/6] We know SP isn't using SignalR at all, and that will have to be added back in as a new feature later --- src/ServiceControl/Infrastructure/SignalR/MessageStreamerHub.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ServiceControl/Infrastructure/SignalR/MessageStreamerHub.cs b/src/ServiceControl/Infrastructure/SignalR/MessageStreamerHub.cs index 0a56add6e8..7f398e35dd 100644 --- a/src/ServiceControl/Infrastructure/SignalR/MessageStreamerHub.cs +++ b/src/ServiceControl/Infrastructure/SignalR/MessageStreamerHub.cs @@ -27,7 +27,6 @@ public MessageStreamerHub(IMessageDispatcher sender, IReadOnlySettings settings, localAddress = receiveAddresses.MainReceiveAddress; } - // TODO Change service pulse to call this method instead? public async Task SendMessage(string data) { try From bf1c3e4b1154b294ded5240b28695d2aa5edb56f Mon Sep 17 00:00:00 2001 From: danielmarbach Date: Wed, 20 Mar 2024 18:08:00 +0100 Subject: [PATCH 6/6] Address TODO in GetRetryPendingMessages for now but we probably should also change the RemoveFailedMessageRetryDocument to be batch oriented --- .../ErrorMessagesDataStore.cs | 34 +++++++------------ 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/src/ServiceControl.Persistence.RavenDB/ErrorMessagesDataStore.cs b/src/ServiceControl.Persistence.RavenDB/ErrorMessagesDataStore.cs index 4894018637..3c944cf7f4 100644 --- a/src/ServiceControl.Persistence.RavenDB/ErrorMessagesDataStore.cs +++ b/src/ServiceControl.Persistence.RavenDB/ErrorMessagesDataStore.cs @@ -609,34 +609,26 @@ public async Task RemoveFailedMessageRetryDocument(string uniqueMessageId) await session.Advanced.RequestExecutor.ExecuteAsync(new DeleteDocumentCommand(FailedMessageRetry.MakeDocumentId(uniqueMessageId), null), session.Advanced.Context); } - // TODO: Once using .NET, consider using IAsyncEnumerable here as this is an unbounded query public async Task GetRetryPendingMessages(DateTime from, DateTime to, string queueAddress) { - var ids = new List(); - using var session = documentStore.OpenAsyncSession(); - var query = session.Advanced - .AsyncDocumentQuery() - .WhereEquals("Status", (int)FailedMessageStatus.RetryIssued) - .AndAlso() - .WhereBetween(options => options.LastModified, from.Ticks, to.Ticks) - .AndAlso() - .WhereEquals(o => o.QueueAddress, queueAddress) - .SelectFields() - .ToQueryable() - .TransformToFailedMessageView(); - - await using (var ie = await session.Advanced.StreamAsync(query)) + var query = session + .Query() + .Where(o => o.Status == FailedMessageStatus.RetryIssued && o.LastModified >= from.Ticks && o.LastModified <= to.Ticks && o.QueueAddress == queueAddress) + .OfType(); + + int index = 0; + await using var streamResults = await session.Advanced.StreamAsync(query, out var streamQueryStatistics); + string[] ids = new string[streamQueryStatistics.TotalResults]; + while (await streamResults.MoveNextAsync()) { - while (await ie.MoveNextAsync()) - { - ids.Add(ie.Current.Document.Id); - } + ids[index++] = streamResults.Current.Document.UniqueMessageId; } - - return ids.ToArray(); + return ids; } + record struct FailedMessageProjection(string UniqueMessageId); + public async Task FetchFromFailedMessage(string uniqueMessageId) { byte[] body = null;