From 3b113df7bf52ee7b0876d124ccaa9cf81af74c3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yari=20Mari=C3=ABn?= Date: Fri, 8 Nov 2024 13:45:10 +0100 Subject: [PATCH] fix(logviewer): added timestamp filtering the the AzureTableLogEntity to prevent memory issues --- .../fundamentals/backoffice/logviewer.md | 15 +++++++++------ .../fundamentals/backoffice/logviewer.md | 15 +++++++++------ .../fundamentals/backoffice/logviewer.md | 15 +++++++++------ .../fundamentals/backoffice/logviewer.md | 15 +++++++++------ 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/10/umbraco-cms/fundamentals/backoffice/logviewer.md b/10/umbraco-cms/fundamentals/backoffice/logviewer.md index 5add150d018..a0bf80cfd89 100644 --- a/10/umbraco-cms/fundamentals/backoffice/logviewer.md +++ b/10/umbraco-cms/fundamentals/backoffice/logviewer.md @@ -78,12 +78,15 @@ public class AzureTableLogViewer : SerilogLogViewerSourceBase var requiredEntities = skip + take; IEnumerable results = client.Query().Take(requiredEntities); - return results - .Skip(skip) - .Take(take) - .Select(x => LogEventReader.ReadFromString(x.Data)) - .Where(filter.TakeLogEvent) - .ToList(); + return results + .Skip(skip) + .Take(take) + .Select(x => LogEventReader.ReadFromString(x.Data)) + // Filter by timestamp to avoid retrieving all logs from the table, preventing memory and performance issues + .Where(evt => evt.Timestamp >= logTimePeriod.StartTime.Date && + evt.Timestamp <= logTimePeriod.EndTime.Date.AddDays(1).AddSeconds(-1)) + .Where(filter.TakeLogEvent) + .ToList(); } public override IReadOnlyList? GetSavedSearches() diff --git a/13/umbraco-cms/fundamentals/backoffice/logviewer.md b/13/umbraco-cms/fundamentals/backoffice/logviewer.md index cd4ffe42d48..f133689d46a 100644 --- a/13/umbraco-cms/fundamentals/backoffice/logviewer.md +++ b/13/umbraco-cms/fundamentals/backoffice/logviewer.md @@ -80,12 +80,15 @@ public class AzureTableLogViewer : SerilogLogViewerSourceBase var requiredEntities = skip + take; IEnumerable results = client.Query().Take(requiredEntities); - return results - .Skip(skip) - .Take(take) - .Select(x => LogEventReader.ReadFromString(x.Data)) - .Where(filter.TakeLogEvent) - .ToList(); + return results + .Skip(skip) + .Take(take) + .Select(x => LogEventReader.ReadFromString(x.Data)) + // Filter by timestamp to avoid retrieving all logs from the table, preventing memory and performance issues + .Where(evt => evt.Timestamp >= logTimePeriod.StartTime.Date && + evt.Timestamp <= logTimePeriod.EndTime.Date.AddDays(1).AddSeconds(-1)) + .Where(filter.TakeLogEvent) + .ToList(); } public override IReadOnlyList? GetSavedSearches() diff --git a/14/umbraco-cms/fundamentals/backoffice/logviewer.md b/14/umbraco-cms/fundamentals/backoffice/logviewer.md index cd4ffe42d48..f133689d46a 100644 --- a/14/umbraco-cms/fundamentals/backoffice/logviewer.md +++ b/14/umbraco-cms/fundamentals/backoffice/logviewer.md @@ -80,12 +80,15 @@ public class AzureTableLogViewer : SerilogLogViewerSourceBase var requiredEntities = skip + take; IEnumerable results = client.Query().Take(requiredEntities); - return results - .Skip(skip) - .Take(take) - .Select(x => LogEventReader.ReadFromString(x.Data)) - .Where(filter.TakeLogEvent) - .ToList(); + return results + .Skip(skip) + .Take(take) + .Select(x => LogEventReader.ReadFromString(x.Data)) + // Filter by timestamp to avoid retrieving all logs from the table, preventing memory and performance issues + .Where(evt => evt.Timestamp >= logTimePeriod.StartTime.Date && + evt.Timestamp <= logTimePeriod.EndTime.Date.AddDays(1).AddSeconds(-1)) + .Where(filter.TakeLogEvent) + .ToList(); } public override IReadOnlyList? GetSavedSearches() diff --git a/15/umbraco-cms/fundamentals/backoffice/logviewer.md b/15/umbraco-cms/fundamentals/backoffice/logviewer.md index cd4ffe42d48..f133689d46a 100644 --- a/15/umbraco-cms/fundamentals/backoffice/logviewer.md +++ b/15/umbraco-cms/fundamentals/backoffice/logviewer.md @@ -80,12 +80,15 @@ public class AzureTableLogViewer : SerilogLogViewerSourceBase var requiredEntities = skip + take; IEnumerable results = client.Query().Take(requiredEntities); - return results - .Skip(skip) - .Take(take) - .Select(x => LogEventReader.ReadFromString(x.Data)) - .Where(filter.TakeLogEvent) - .ToList(); + return results + .Skip(skip) + .Take(take) + .Select(x => LogEventReader.ReadFromString(x.Data)) + // Filter by timestamp to avoid retrieving all logs from the table, preventing memory and performance issues + .Where(evt => evt.Timestamp >= logTimePeriod.StartTime.Date && + evt.Timestamp <= logTimePeriod.EndTime.Date.AddDays(1).AddSeconds(-1)) + .Where(filter.TakeLogEvent) + .ToList(); } public override IReadOnlyList? GetSavedSearches()