From bd50e199c465216d6eeea106b3c9d691d352dc06 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Thu, 19 Mar 2026 13:21:02 +0000 Subject: [PATCH] Add Sentry error tracking and versioning updates Integrated Sentry.AspNetCore for error tracking, with conditional configuration based on appsettings. Enabled Sentry in production, set DSN and release version, and added request body capture. Added test exception for Sentry verification. Updated build pipeline to set version properties during publish. Minor refactoring and initialization improvements. --- .github/workflows/createrelease.yml | 8 ++++- CallbackHandler/CallbackHandler.csproj | 1 + CallbackHandler/Handlers/CallbackHandlers.cs | 9 ++++-- CallbackHandler/Program.cs | 34 ++++++++++++++++++-- CallbackHandler/Startup.cs | 5 +-- CallbackHandler/appsettings.json | 2 +- 6 files changed, 50 insertions(+), 9 deletions(-) diff --git a/.github/workflows/createrelease.yml b/.github/workflows/createrelease.yml index 1529bce..d237596 100644 --- a/.github/workflows/createrelease.yml +++ b/.github/workflows/createrelease.yml @@ -47,7 +47,13 @@ jobs: - name: Publish API if: ${{ github.event.release.prerelease == false }} - run: dotnet publish "CallbackHandler/CallbackHandler.csproj" --configuration Release --output publishOutput -r win-x64 --self-contained false + run: dotnet publish "CallbackHandler/CallbackHandler.csproj" + --configuration Release --output publishOutput -r win-x64 + --self-contained false + -p:Version=${{ steps.get_version.outputs.VERSION }} + -p:AssemblyVersion${{ steps.get_version.outputs.VERSION }} + -p:FileVersion=${{ steps.get_version.outputs.VERSION }} + -p:InformationalVersion${{ steps.get_version.outputs.VERSION }} - name: Build Release Package run: | diff --git a/CallbackHandler/CallbackHandler.csproj b/CallbackHandler/CallbackHandler.csproj index 548e6f9..ec14b4c 100644 --- a/CallbackHandler/CallbackHandler.csproj +++ b/CallbackHandler/CallbackHandler.csproj @@ -12,6 +12,7 @@ + diff --git a/CallbackHandler/Handlers/CallbackHandlers.cs b/CallbackHandler/Handlers/CallbackHandlers.cs index c7951ab..c2427f6 100644 --- a/CallbackHandler/Handlers/CallbackHandlers.cs +++ b/CallbackHandler/Handlers/CallbackHandlers.cs @@ -3,9 +3,12 @@ using CallbackHandlers.Models; using MediatR; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; +using Sentry; using Shared.Results; +using Shared.Results.Web; using SimpleResults; using System; using System.Collections.Generic; @@ -13,8 +16,6 @@ using System.Net; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Http.HttpResults; -using Shared.Results.Web; namespace CallbackHandler.Handlers; @@ -26,6 +27,10 @@ public static async Task RecordCallback(Deposit depositCallback, { Guid callbackId = Guid.NewGuid(); + if (depositCallback.Reference == "ExceptionTest") { + throw new Exception("This is a test exception"); + } + CallbackCommands.RecordCallbackCommand request = new( callbackId, JsonConvert.SerializeObject(depositCallback), diff --git a/CallbackHandler/Program.cs b/CallbackHandler/Program.cs index 8f6a9fc..f4dccb4 100644 --- a/CallbackHandler/Program.cs +++ b/CallbackHandler/Program.cs @@ -2,23 +2,28 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using NLog.Extensions.Logging; +using Shared.General; +using Shared.Logger; +using Shared.Middleware; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using NLog.Extensions.Logging; -using Shared.Logger; -using Shared.Middleware; +using JasperFx.CommandLine.Descriptions; namespace CallbackHandler { using Lamar.Microsoft.DependencyInjection; using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Options; using NLog; + using Sentry.Extensibility; using Shared.DomainDrivenDesign.EventSourcing; using Shared.EventStore.Aggregate; using System.Diagnostics.CodeAnalysis; using System.IO; + using System.Reflection; [ExcludeFromCodeCoverage] public class Program @@ -68,7 +73,30 @@ public static IHostBuilder CreateHostBuilder(string[] args) webBuilder.UseStartup(); webBuilder.UseConfiguration(config); webBuilder.UseKestrel(); + + IConfigurationSection isSentryConfigured = config.GetSection("SentryConfiguration"); + if (isSentryConfigured.Exists()) { + webBuilder.Configure((context, + app) => { + if (context.HostingEnvironment.IsDevelopment() == false) { + Version version = Assembly.GetExecutingAssembly().GetName().Version; + + webBuilder.UseSentry(o => { + + o.Dsn = ConfigurationReader.GetValueFromSection("SentryConfiguration", "Dsn"); + o.SendDefaultPii = true; // required for body + user data + o.MaxRequestBodySize = RequestSize.Always; + o.CaptureBlockingCalls = true; + //o.CaptureFailedRequests = true; + o.Release = version != null ? version.ToString() : "unknown"; + + }); + } + }); + + } }); + return hostBuilder; } diff --git a/CallbackHandler/Startup.cs b/CallbackHandler/Startup.cs index a50eae8..238832d 100644 --- a/CallbackHandler/Startup.cs +++ b/CallbackHandler/Startup.cs @@ -1,8 +1,8 @@ +using CallbackHandler.Endpoints; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; -using CallbackHandler.Endpoints; namespace CallbackHandler { @@ -11,6 +11,7 @@ namespace CallbackHandler using Lamar; using Microsoft.AspNetCore.Diagnostics.HealthChecks; using Microsoft.Extensions.Logging; + using Sentry; using Shared.EventStore.Aggregate; using Shared.Extensions; using Shared.General; @@ -80,7 +81,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerF Logger.Initialise(logger); Startup.Configuration.LogConfiguration(Logger.LogWarning); - + ConfigurationReader.Initialise(Startup.Configuration); app.UseMiddleware(); app.AddRequestResponseLogging(); diff --git a/CallbackHandler/appsettings.json b/CallbackHandler/appsettings.json index 0db3279..1797133 100644 --- a/CallbackHandler/appsettings.json +++ b/CallbackHandler/appsettings.json @@ -1,3 +1,3 @@ { - + }