Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="ClientProxyBase" Version="2026.10.4" />
<PackageVersion Include="HealthMonitoring.Client" Version="2026.10.1" />
<PackageVersion Include="Shared.Results" Version="2026.10.4" />
<PackageVersion Include="ClientProxyBase" Version="2026.11.2" />
<PackageVersion Include="HealthMonitoring.Client" Version="2026.10.2.55" />
<PackageVersion Include="Shared.Results" Version="2026.11.2" />
<PackageVersion Include="NLog.Extensions.Logging" Version="6.2.2" />
<PackageVersion Include="MediatR" Version="14.2.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.13" />
Expand All @@ -16,24 +16,24 @@
<PackageVersion Include="SimpleResults" Version="4.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.11.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="2.5.1" />
<PackageVersion Include="Shared.EventStore" Version="2026.10.4" />
<PackageVersion Include="Shared.EventStore" Version="2026.11.2" />
<PackageVersion Include="Shouldly" Version="4.3.0" />
<PackageVersion Include="SSH.NET" Version="2026.0.0" />
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="10.0.13" />
<PackageVersion Include="TransactionProcessing.ApiDefaults" Version="2026.10.4" />
<PackageVersion Include="TransactionProcessing.ApiDefaults" Version="2026.11.2" />
<PackageVersion Include="xunit.v3.mtp-v2" Version="4.0.2" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.12.0" />
<PackageVersion Include="Grpc.Net.Client" Version="2.84.0" />
<PackageVersion Include="Shared" Version="2026.10.4" />
<PackageVersion Include="Shared.DomainDrivenDesign" Version="2026.10.4" />
<PackageVersion Include="Shared.IntegrationTesting" Version="2026.10.4" />
<PackageVersion Include="Shared.Logger" Version="2026.10.4" />
<PackageVersion Include="Shared.Results.Web" Version="2026.10.4" />
<PackageVersion Include="Shared" Version="2026.11.2" />
<PackageVersion Include="Shared.DomainDrivenDesign" Version="2026.11.2" />
<PackageVersion Include="Shared.IntegrationTesting" Version="2026.11.2" />
<PackageVersion Include="Shared.Logger" Version="2026.11.2" />
<PackageVersion Include="Shared.Results.Web" Version="2026.11.2" />
<PackageVersion Include="Ductus.FluentDocker" Version="2.85.0" />
<PackageVersion Include="Reqnroll.Tools.MsBuild.Generation" Version="3.3.4" />
<PackageVersion Include="NUnit" Version="5.0.0" />
<PackageVersion Include="Lamar" Version="16.0.0" />
<PackageVersion Include="Imposter" Version="1.0.3" />
<PackageVersion Include="Imposter" Version="1.0.6" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Core" Version="2.3.13" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.13" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.13" />
Expand All @@ -54,8 +54,8 @@
<PackageVersion Include="NUnit3TestAdapter" Version="6.3.1" />
<PackageVersion Include="Reqnroll" Version="3.3.4" />
<PackageVersion Include="Reqnroll.NUnit" Version="3.3.4" />
<PackageVersion Include="SecurityService.Client" Version="2026.10.1" />
<PackageVersion Include="SecurityService.IntegrationTesting.Helpers" Version="2026.10.1" />
<PackageVersion Include="SecurityService.Client" Version="2026.10.3.203" />
<PackageVersion Include="SecurityService.IntegrationTesting.Helpers" Version="2026.10.3.203" />
<PackageVersion Include="coverlet.collector" Version="10.1.0" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public async Task<EmailServiceProxyResponse> SendEmail(Guid messageId,

String requestSerialised = StringSerialiser.Serialise(apiRequest, new SerialiserOptions(SerialiserPropertyFormat.SnakeCase, WriteIndented:true));

Logger.LogDebug($"Request Message Sent to Email Provider [SMTP2Go] {requestSerialised}");
Logger.LogDebug("Request Message Sent to Email Provider [SMTP2Go] {apiRequest}", requestSerialised);

StringContent content = new(requestSerialised, Encoding.UTF8, "application/json");

Expand All @@ -89,7 +89,7 @@ public async Task<EmailServiceProxyResponse> SendEmail(Guid messageId,
_ => new Smtp2GoSendEmailResponse { Data = new Smtp2GoSendEmailResponseData { Error = httpResponse.StatusCode.ToString(), ErrorCode = ((Int32)httpResponse.StatusCode).ToString() } }
};

Logger.LogDebug($"Response Message Received from Email Provider [SMTP2Go] {StringSerialiser.Serialise(apiResponse)}");
Logger.LogDebug("Response Message Received from Email Provider [SMTP2Go] {apiResponse}", StringSerialiser.Serialise(apiResponse));
// Translate the Response
return new EmailServiceProxyResponse {
ApiCallSuccessful = httpResponse.IsSuccessStatusCode && String.IsNullOrEmpty(apiResponse.Data.ErrorCode),
Expand Down Expand Up @@ -119,7 +119,7 @@ public async Task<MessageStatusResponse> GetMessageStatus(String providerReferen

String requestSerialised = StringSerialiser.Serialise(apiRequest, new SerialiserOptions(SerialiserPropertyFormat.SnakeCase, WriteIndented: true));

Logger.LogDebug($"Request Message Sent to Email Provider [SMTP2Go] {requestSerialised}");
Logger.LogDebug("Request Message Sent to Email Provider [SMTP2Go] {apiRequest}", requestSerialised);

StringContent content = new(requestSerialised, Encoding.UTF8, "application/json");

Expand All @@ -131,7 +131,7 @@ public async Task<MessageStatusResponse> GetMessageStatus(String providerReferen

Smtp2GoEmailSearchResponse apiResponse = StringSerialiser.Deserialise<Smtp2GoEmailSearchResponse>(await httpResponse.Content.ReadAsStringAsync(cancellationToken));

Logger.LogDebug($"Response Message Received from Email Provider [SMTP2Go] {StringSerialiser.Serialise(apiResponse)}");
Logger.LogDebug("Response Message Received from Email Provider [SMTP2Go] {apiResponse}", StringSerialiser.Serialise(apiResponse));

// Translate the Response
return new MessageStatusResponse { ApiStatusCode = httpResponse.StatusCode, MessageStatus = this.TranslateMessageStatus(apiResponse.Data.EmailDetails.Single().Status), ProviderStatusDescription = apiResponse.Data.EmailDetails.Single().Status, Timestamp = apiResponse.Data.EmailDetails.Single().EmailStatusDate };
Expand Down
7 changes: 3 additions & 4 deletions MessagingService.IntegrationTests/Common/GenericSteps.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
using Shared.IntegrationTesting;
using Shared.Logger;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace MessagingService.IntegrationTests.Common
Expand Down Expand Up @@ -31,10 +29,11 @@ public async Task StartSystem()
{

// Initialise a logger
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", "");
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", String.Empty);
NlogLogger logger = new();
logger.Initialise(LogManager.GetLogger(scenarioName), scenarioName);
LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);
LogManager.Setup().SetupLogFactory(setup =>
setup.AddCallSiteHiddenAssembly(typeof(NlogLogger).Assembly));

DockerServices dockerServices = DockerServices.SqlServer | DockerServices.MessagingService | DockerServices.KurrentDb | DockerServices.SecurityService;

Expand Down
13 changes: 5 additions & 8 deletions MessagingService/Bootstrapper/MediatorRegistry.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
using MessagingService.DataTransferObjects;
using SimpleResults;

namespace MessagingService.Bootstrapper;
namespace MessagingService.Bootstrapper;

using BusinessLogic.RequestHandlers;
using BusinessLogic.Requests;
using Google.Api;
using Lamar;
using MediatR;
using Microsoft.Extensions.DependencyInjection;
using Shared.General;
using System;
Expand All @@ -18,7 +12,10 @@ public class MediatorRegistry : ServiceRegistry
{
public MediatorRegistry()
{
this.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(MessagingRequestHandler).Assembly));
this.AddMediatR(cfg => {
cfg.RegisterServicesFromAssembly(typeof(MessagingRequestHandler).Assembly);
cfg.LicenseKey = Environment.GetEnvironmentVariable("MEDIATR_LICENCEKEY");
});
this.AddSingleton<Func<String, String>>(container => (serviceName) => ConfigurationReader.GetBaseServerUri(serviceName).OriginalString);
}
}
4 changes: 2 additions & 2 deletions MessagingService/Common/Extensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ public static class Extensions
switch (tt)
{
case TraceEventType.Critical:
Logger.LogCritical(new Exception(logMessage));
Logger.LogCritical(logMessage);
break;
case TraceEventType.Error:
Logger.LogError(new Exception(logMessage));
Logger.LogError(logMessage);
break;
case TraceEventType.Warning:
Logger.LogWarning(logMessage);
Expand Down
10 changes: 5 additions & 5 deletions MessagingService/Handlers/DomainEventHandlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,28 @@ public static async Task<IResult> HandleDomainEvent(HttpRequest request,

try
{
Logger.LogInformation($"Processing event - ID [{domainEvent.EventId}], Type[{domainEvent.GetType().Name}]");
Logger.LogInformation("Processing event - ID [{eventId}], Type[{eventType}]", domainEvent.EventId, domainEvent.GetType().Name);

Result<List<IDomainEventHandler>> eventHandlersResult = resolver.GetDomainEventHandlers(domainEvent);

if (eventHandlersResult.IsFailed)
{
Logger.LogWarning($"No event handlers configured for Event Type [{domainEvent.GetType().Name}]");
Logger.LogWarning("No event handlers configured for Event Type [{eventType}]", domainEvent.GetType().Name);
return Results.Ok();
}

var eventHandlers = eventHandlersResult.Data;
var tasks = eventHandlers.Select(h => h.Handle(domainEvent, cancellationToken));
await Task.WhenAll(tasks);

Logger.LogInformation("Finished processing event - ID [{domainEvent.EventId}]");
Logger.LogInformation("Finished processing event - ID [{eventId}]", domainEvent.EventId);

return Results.Ok();
}
catch (Exception ex)
{
string domainEventData = StringSerialiser.Serialise(domainEvent);
Logger.LogError($"Failed to process event. Data received [{domainEventData}]", ex);
Logger.LogError(ex, "Failed to process event. Data received [{domainEventData}]", domainEventData);
throw;
}
}
Expand All @@ -58,7 +58,7 @@ private static void Callback(CancellationToken cancellationToken, Guid eventId)
{
if (cancellationToken.IsCancellationRequested)
{
Logger.LogInformation($"Cancel request for EventId {eventId}");
Logger.LogInformation("Cancel request for EventId {eventId}", eventId);
cancellationToken.ThrowIfCancellationRequested();
}
}
Expand Down
4 changes: 2 additions & 2 deletions MessagingService/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,8 @@ private static void ConfigureApplication(WebApplication app)
app.UseDeveloperExceptionPage();
}

Microsoft.Extensions.Logging.ILogger logger = app.Services.GetRequiredService<ILoggerFactory>().CreateLogger("MessagingService");
Shared.Logger.Logger.Initialise(logger);
NLog.Logger logger = LogManager.GetLogger("MessagingService");
Shared.Logger.Logger.Initialise(logger, "messagingservice");
((IConfigurationRoot)app.Configuration).LogConfiguration(Shared.Logger.Logger.LogWarning);

IStringSerialiser serialiser = app.Services.GetRequiredService<IStringSerialiser>();
Expand Down
44 changes: 18 additions & 26 deletions MessagingService/nlog.config
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,24 @@
<nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<targets>
<target name="asyncFile" xsi:type="AsyncWrapper">
<target name="logfile" xsi:type="File"
fileName="/home/txnproc/trace/messagingservice.log"
layout="${date:format=dd/MM/yyyy HH\:mm\:ss.ffff} | ${level} |${mdlc:CorrelationId:fallback=NO-ID}| ${callsite:className=true} | ${message} | ${exception:format=type,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method:InnerExceptionSeparator= | }"
archiveFileName="/home/txnproc/trace/messagingservice.{#####}.log"
archiveAboveSize="104857600"
archiveNumbering="Sequence"
concurrentWrites="true"
maxArchiveFiles="2"/>
<target name="healthlogfile" xsi:type="File"
fileName="/home/txnproc/trace/messagingservice_health.log"
layout="${date:format=dd/MM/yyyy HH\:mm\:ss.ffff} | ${level} | ${mdlc:CorrelationId:fallback=NO-ID}|${callsite:className=true} | ${message} | ${exception:format=type,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method:InnerExceptionSeparator= | }"
archiveFileName="/home/txnproc/trace/messagingservice_health.{#####}.log"
archiveAboveSize="104857600"
archiveNumbering="Sequence"
concurrentWrites="true"
maxArchiveFiles="2"/>
<target name="asyncFile" xsi:type="AsyncWrapper">
<target name="logfile" xsi:type="File"
fileName="/home/txnproc/trace/messagingservice.json"
archiveFileName="/home/txnproc/trace/messagingservice.{#####}.json"
archiveAboveSize="104857600"
archiveNumbering="Sequence"
concurrentWrites="true"
maxArchiveFiles="2">
<layout xsi:type="JsonLayout"
includeEventProperties="true"
excludeProperties="timestampUtc">
<attribute name="timestampUtc" layout="${date:universalTime=true:format=o}" />
<attribute name="level" layout="${level:uppercase=true}" />
<attribute name="message" layout="${message}" />
<attribute name="exception" layout="${exception:format=type,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method:InnerExceptionSeparator= | }" />
</layout>
</target>
</target>
</targets>

<!--
Expand All @@ -33,15 +33,7 @@

<rules>
<logger name="Microsoft.*" minlevel="Warn" writeTo="" final="true" />
<logger name="*" minlevel="Warn" writeTo="logfile">
<filters defaultAction="Log">
<when condition="contains('${message}', 'HEALTH_CHECK')" action="Ignore"></when>
</filters>
</logger>
<logger name="*" minlevel="Warn" writeTo="healthlogfile">
<filters defaultAction="Ignore">
<when condition="contains('${message}', 'HEALTH_CHECK')" action="Log"></when>
</filters>
<logger name="*" minlevel="Warn" writeTo="logfile">
</logger>
</rules>
</nlog>
Loading