From 65727f9068fe425733d450d7f0c9920559902d09 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 31 May 2026 23:56:30 +0000 Subject: [PATCH 1/2] Initial plan From b0d22ffc1a6fbe69111bcdf20027aae3d065134a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Jun 2026 00:09:30 +0000 Subject: [PATCH 2/2] Add Version column to events grid and include version in event summary data Co-authored-by: niemyjski <1020579+niemyjski@users.noreply.github.com> --- .../Default/10_SimpleErrorFormattingPlugin.cs | 2 ++ .../Formatting/Default/20_ErrorFormattingPlugin.cs | 2 ++ .../Default/30_NotFoundFormattingPlugin.cs | 2 ++ .../Formatting/Default/40_UsageFormattingPlugin.cs | 1 + .../Default/50_SessionFormattingPlugin.cs | 2 ++ .../Formatting/Default/60_LogFormattingPlugin.cs | 2 ++ .../Default/99_DefaultFormattingPlugin.cs | 1 + .../Plugins/Formatting/FormattingPluginBase.cs | 7 +++++++ .../lib/features/events/components/summary/index.ts | 7 +++++++ .../events/components/table/options.svelte.ts | 13 ++++++++++++- .../Search/Data/event1.summary.json | 3 ++- .../Search/Data/event2.summary.json | 3 ++- .../Search/Data/event3.summary.json | 3 ++- .../Search/Data/event4.summary.json | 3 ++- .../Search/Data/event5.summary.json | 3 ++- 15 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/Exceptionless.Core/Plugins/Formatting/Default/10_SimpleErrorFormattingPlugin.cs b/src/Exceptionless.Core/Plugins/Formatting/Default/10_SimpleErrorFormattingPlugin.cs index 8b79ac1c28..93b95424f3 100644 --- a/src/Exceptionless.Core/Plugins/Formatting/Default/10_SimpleErrorFormattingPlugin.cs +++ b/src/Exceptionless.Core/Plugins/Formatting/Default/10_SimpleErrorFormattingPlugin.cs @@ -65,6 +65,8 @@ private bool ShouldHandle(PersistentEvent ev) if (!String.IsNullOrEmpty(requestInfo?.Path)) data.Add("Path", requestInfo.Path); + AddVersionSummaryData(data, ev); + return new SummaryData { Id = ev.Id, TemplateKey = "event-simple-summary", Data = data }; } diff --git a/src/Exceptionless.Core/Plugins/Formatting/Default/20_ErrorFormattingPlugin.cs b/src/Exceptionless.Core/Plugins/Formatting/Default/20_ErrorFormattingPlugin.cs index 250bdf945c..aedb8b804c 100644 --- a/src/Exceptionless.Core/Plugins/Formatting/Default/20_ErrorFormattingPlugin.cs +++ b/src/Exceptionless.Core/Plugins/Formatting/Default/20_ErrorFormattingPlugin.cs @@ -82,6 +82,8 @@ private bool ShouldHandle(PersistentEvent ev) if (!String.IsNullOrEmpty(requestInfo?.Path)) data.Add("Path", requestInfo.Path); + AddVersionSummaryData(data, ev); + return new SummaryData { Id = ev.Id, TemplateKey = "event-error-summary", Data = data }; } diff --git a/src/Exceptionless.Core/Plugins/Formatting/Default/30_NotFoundFormattingPlugin.cs b/src/Exceptionless.Core/Plugins/Formatting/Default/30_NotFoundFormattingPlugin.cs index c3f602bf24..ef685e571a 100644 --- a/src/Exceptionless.Core/Plugins/Formatting/Default/30_NotFoundFormattingPlugin.cs +++ b/src/Exceptionless.Core/Plugins/Formatting/Default/30_NotFoundFormattingPlugin.cs @@ -44,6 +44,8 @@ private bool ShouldHandle(PersistentEvent ev) if (ips.Count > 0) data.Add("IpAddress", ips); + AddVersionSummaryData(data, ev); + return new SummaryData { Id = ev.Id, TemplateKey = "event-notfound-summary", Data = data }; } diff --git a/src/Exceptionless.Core/Plugins/Formatting/Default/40_UsageFormattingPlugin.cs b/src/Exceptionless.Core/Plugins/Formatting/Default/40_UsageFormattingPlugin.cs index 6b02b61052..04137e42d5 100644 --- a/src/Exceptionless.Core/Plugins/Formatting/Default/40_UsageFormattingPlugin.cs +++ b/src/Exceptionless.Core/Plugins/Formatting/Default/40_UsageFormattingPlugin.cs @@ -39,6 +39,7 @@ private bool ShouldHandle(PersistentEvent ev) var data = new Dictionary { { "Source", ev.Source } }; AddUserIdentitySummaryData(data, ev.GetUserIdentity(_jsonOptions)); + AddVersionSummaryData(data, ev); return new SummaryData { Id = ev.Id, TemplateKey = "event-feature-summary", Data = data }; } diff --git a/src/Exceptionless.Core/Plugins/Formatting/Default/50_SessionFormattingPlugin.cs b/src/Exceptionless.Core/Plugins/Formatting/Default/50_SessionFormattingPlugin.cs index 1dc5710829..f7edd4e4d1 100644 --- a/src/Exceptionless.Core/Plugins/Formatting/Default/50_SessionFormattingPlugin.cs +++ b/src/Exceptionless.Core/Plugins/Formatting/Default/50_SessionFormattingPlugin.cs @@ -52,6 +52,8 @@ private bool ShouldHandle(PersistentEvent ev) data.Add("SessionEnd", endTime); } + AddVersionSummaryData(data, ev); + return new SummaryData { Id = ev.Id, TemplateKey = "event-session-summary", Data = data }; } } diff --git a/src/Exceptionless.Core/Plugins/Formatting/Default/60_LogFormattingPlugin.cs b/src/Exceptionless.Core/Plugins/Formatting/Default/60_LogFormattingPlugin.cs index 3eca0c290c..55243a07fb 100644 --- a/src/Exceptionless.Core/Plugins/Formatting/Default/60_LogFormattingPlugin.cs +++ b/src/Exceptionless.Core/Plugins/Formatting/Default/60_LogFormattingPlugin.cs @@ -65,6 +65,8 @@ private bool ShouldHandle(PersistentEvent ev) if (!String.IsNullOrWhiteSpace(level)) data.Add("Level", level.Trim()); + AddVersionSummaryData(data, ev); + return new SummaryData { Id = ev.Id, TemplateKey = "event-log-summary", Data = data }; } diff --git a/src/Exceptionless.Core/Plugins/Formatting/Default/99_DefaultFormattingPlugin.cs b/src/Exceptionless.Core/Plugins/Formatting/Default/99_DefaultFormattingPlugin.cs index 39ec6593e9..0ca6f9e433 100644 --- a/src/Exceptionless.Core/Plugins/Formatting/Default/99_DefaultFormattingPlugin.cs +++ b/src/Exceptionless.Core/Plugins/Formatting/Default/99_DefaultFormattingPlugin.cs @@ -38,6 +38,7 @@ public override SummaryData GetEventSummaryData(PersistentEvent ev) }; AddUserIdentitySummaryData(data, ev.GetUserIdentity(_jsonOptions)); + AddVersionSummaryData(data, ev); return new SummaryData { Id = ev.Id, TemplateKey = "event-summary", Data = data }; } diff --git a/src/Exceptionless.Core/Plugins/Formatting/FormattingPluginBase.cs b/src/Exceptionless.Core/Plugins/Formatting/FormattingPluginBase.cs index 926a83eb95..e2c7fda448 100644 --- a/src/Exceptionless.Core/Plugins/Formatting/FormattingPluginBase.cs +++ b/src/Exceptionless.Core/Plugins/Formatting/FormattingPluginBase.cs @@ -90,4 +90,11 @@ protected void AddUserIdentitySummaryData(Dictionary data, User if (!String.IsNullOrEmpty(identity.Name)) data.Add("Name", identity.Name); } + + protected void AddVersionSummaryData(Dictionary data, PersistentEvent ev) + { + string? version = ev.GetVersion(); + if (!String.IsNullOrEmpty(version)) + data.Add("Version", version); + } } diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/summary/index.ts b/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/summary/index.ts index 1e7763357f..b57bce535b 100644 --- a/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/summary/index.ts +++ b/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/summary/index.ts @@ -8,6 +8,7 @@ export interface EventErrorSummaryData { Path?: string; Type?: string; TypeFullName?: string; + Version?: string; } export interface EventFeatureSummaryData { @@ -15,6 +16,7 @@ export interface EventFeatureSummaryData { IpAddress?: string[]; Name?: string; Source?: string; + Version?: string; } export interface EventLogSummaryData { @@ -24,12 +26,14 @@ export interface EventLogSummaryData { Name?: string; Source?: string; SourceShortName?: string; + Version?: string; } export interface EventNotFoundSummaryData { Identity?: string; Name?: string; Source?: string; + Version?: string; } export interface EventSessionSummaryData { @@ -39,6 +43,7 @@ export interface EventSessionSummaryData { SessionId?: string; Type?: 'heartbeat' | 'session' | 'sessionend'; Value?: string; + Version?: string; } export interface EventSimpleSummaryData { @@ -46,6 +51,7 @@ export interface EventSimpleSummaryData { Path?: string; Type?: string; TypeFullName?: string; + Version?: string; } export interface EventSummaryData { @@ -54,6 +60,7 @@ export interface EventSummaryData { Name?: string; Source?: string; Type?: string; + Version?: string; } export interface EventSummaryModel extends SummaryModel { diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/table/options.svelte.ts b/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/table/options.svelte.ts index ef0726d78d..24445cfa9a 100644 --- a/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/table/options.svelte.ts +++ b/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/table/options.svelte.ts @@ -20,7 +20,8 @@ export const defaultEventColumnVisibility: ColumnVisibilityState = { message: false, name: false, source: false, - type: false + type: false, + version: false }; export function getColumns>( @@ -128,6 +129,16 @@ export function getColumns getSummaryDataValue(row, 'Version'), + cell: (prop) => formatTextColumn(prop.getValue()), + enableSorting: false, + header: 'Version', + id: 'version', + meta: { + class: 'w-36' + } } ); } else { diff --git a/tests/Exceptionless.Tests/Search/Data/event1.summary.json b/tests/Exceptionless.Tests/Search/Data/event1.summary.json index c42a61814e..970f2a0370 100644 --- a/tests/Exceptionless.Tests/Search/Data/event1.summary.json +++ b/tests/Exceptionless.Tests/Search/Data/event1.summary.json @@ -7,6 +7,7 @@ "Identity": "My-User-Identity", "Name": "test user", "Source": "GET /Print", - "Level": "Error" + "Level": "Error", + "Version": "1.2.3.0" } } \ No newline at end of file diff --git a/tests/Exceptionless.Tests/Search/Data/event2.summary.json b/tests/Exceptionless.Tests/Search/Data/event2.summary.json index 4b8470a42f..6869b93344 100644 --- a/tests/Exceptionless.Tests/Search/Data/event2.summary.json +++ b/tests/Exceptionless.Tests/Search/Data/event2.summary.json @@ -7,6 +7,7 @@ "Identity": "example@exceptionless.com", "Type": "Exception", "TypeFullName": "System.Exception", - "Path": "/user.aspx" + "Path": "/user.aspx", + "Version": "3.2.1-beta1" } } \ No newline at end of file diff --git a/tests/Exceptionless.Tests/Search/Data/event3.summary.json b/tests/Exceptionless.Tests/Search/Data/event3.summary.json index c67917e4e8..3a346a5d0b 100644 --- a/tests/Exceptionless.Tests/Search/Data/event3.summary.json +++ b/tests/Exceptionless.Tests/Search/Data/event3.summary.json @@ -9,6 +9,7 @@ "Type": "NullReferenceException", "TypeFullName": "System.NullReferenceException", "Method": "AssociateWithCurrentThread", - "MethodFullName": "System.Web.ThreadContext.AssociateWithCurrentThread" + "MethodFullName": "System.Web.ThreadContext.AssociateWithCurrentThread", + "Version": "4.0.1039 6f929bbe18" } } \ No newline at end of file diff --git a/tests/Exceptionless.Tests/Search/Data/event4.summary.json b/tests/Exceptionless.Tests/Search/Data/event4.summary.json index e65e267288..4f376e6191 100644 --- a/tests/Exceptionless.Tests/Search/Data/event4.summary.json +++ b/tests/Exceptionless.Tests/Search/Data/event4.summary.json @@ -5,6 +5,7 @@ "data": { "Message": "custom Event", "Source": null, - "Type": "custom" + "Type": "custom", + "Version": "1.0.0.0" } } \ No newline at end of file diff --git a/tests/Exceptionless.Tests/Search/Data/event5.summary.json b/tests/Exceptionless.Tests/Search/Data/event5.summary.json index bced8a7b14..f3e53b66ef 100644 --- a/tests/Exceptionless.Tests/Search/Data/event5.summary.json +++ b/tests/Exceptionless.Tests/Search/Data/event5.summary.json @@ -4,6 +4,7 @@ "template_key": "event-log-summary", "data": { "Message": "Row not found or changed.", - "Source": "TestController" + "Source": "TestController", + "Version": "1.2.2" } } \ No newline at end of file