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
71 changes: 38 additions & 33 deletions TransactionProcessing.SchedulerService/JobTestDriver/Program.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
namespace JobTestDriver
using Quartz;
using Quartz.Core;
using Quartz.Impl;

namespace JobTestDriver
{
using EstateManagement.Client;
using MessagingService.Client;
Expand All @@ -10,6 +14,7 @@

internal class Program{
static async Task Main(string[] args){

//List<(String groupName, String streamName, Int64 parkedMessageCount)>? info = await Jobs.GetParkedQueueInformation("esdb://admin:changeit@192.168.0.133:2113?tls=false&tlsVerifyCert=false", CancellationToken.None);
//foreach ((String groupName, String streamName, Int64 parkedMessageCount) infoItem in info){
// Console.WriteLine($"Group: {infoItem.groupName} Stream: {infoItem.streamName} Parked Count: {infoItem.parkedMessageCount}");
Expand All @@ -32,39 +37,39 @@ static async Task Main(string[] args){
// messagingServiceClient,
// CancellationToken.None);

HttpClientHandler handler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (message,
cert,
chain,
errors) => {
return true;
}
};
HttpClient client = new HttpClient(handler);
ISecurityServiceClient securityServiceClient = new SecurityServiceClient(delegate(String s){ return "https://192.168.1.167:5001"; },client); IEstateClient estateClient = new EstateClient(delegate (String s) { return "http://192.168.1.167:5000"; }, client);
ITransactionProcessorClient transactionProcessorClient = new TransactionProcessorClient(delegate (String s) { return "https://eojrtqfzvyheu0l.m.pipedream.net"; }, client);
String estateManagementApi = "http://192.168.1.167:5000";
String fileProcessorApi = "http://192.168.1.167:5009";
String testHostApi = "http://192.168.1.167:9000";
String clientId = "serviceClient";
String clientSecret = "d192cbc46d834d0da90e8a9d50ded543";
//HttpClientHandler handler = new HttpClientHandler
// {
// ServerCertificateCustomValidationCallback = (message,
// cert,
// chain,
// errors) => {
// return true;
// }
// };
//HttpClient client = new HttpClient(handler);
//ISecurityServiceClient securityServiceClient = new SecurityServiceClient(delegate(String s){ return "https://192.168.1.167:5001"; },client); IEstateClient estateClient = new EstateClient(delegate (String s) { return "http://192.168.1.167:5000"; }, client);
//ITransactionProcessorClient transactionProcessorClient = new TransactionProcessorClient(delegate (String s) { return "https://eojrtqfzvyheu0l.m.pipedream.net"; }, client);
//String estateManagementApi = "http://192.168.1.167:5000";
//String fileProcessorApi = "http://192.168.1.167:5009";
//String testHostApi = "http://192.168.1.167:9000";
//String clientId = "serviceClient";
//String clientSecret = "d192cbc46d834d0da90e8a9d50ded543";

ITransactionDataGenerator t = new TransactionDataGenerator(securityServiceClient,
estateClient,
transactionProcessorClient,
estateManagementApi,
fileProcessorApi,
testHostApi,
clientId,
clientSecret,
RunningMode.Live);
Guid estateId = Guid.Parse("435613ac-a468-47a3-ac4f-649d89764c22");
Guid merchantId = Guid.Parse("ab1c99fb-1c6c-4694-9a32-b71be5d1da33");
await Jobs.GenerateTransactions(t, estateId, merchantId, false, CancellationToken.None);
//var d = TransactionDataGenerator.GetTransactionDateTime(new Random(), DateTime.Now);
//Console.WriteLine(d);
await Jobs.PerformSettlement(t, DateTime.Now,estateId, CancellationToken.None);
//ITransactionDataGenerator t = new TransactionDataGenerator(securityServiceClient,
// estateClient,
// transactionProcessorClient,
// estateManagementApi,
// fileProcessorApi,
// testHostApi,
// clientId,
// clientSecret,
// RunningMode.Live);
//Guid estateId = Guid.Parse("435613ac-a468-47a3-ac4f-649d89764c22");
//Guid merchantId = Guid.Parse("ab1c99fb-1c6c-4694-9a32-b71be5d1da33");
//await Jobs.GenerateTransactions(t, estateId, merchantId, false, CancellationToken.None);
////var d = TransactionDataGenerator.GetTransactionDateTime(new Random(), DateTime.Now);
////Console.WriteLine(d);
//await Jobs.PerformSettlement(t, DateTime.Now,estateId, CancellationToken.None);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,7 @@ public abstract class BaseJob : IJob{

public String JobGroup{ get; private set; }

public String ClientSecret{ get; private set; }

public String ClientId{ get; private set; }

public String SecurityService { get; private set; }

public String EstateManagementApi { get; private set; }
public String FileProcessorApi { get; private set; }
public String TransactionProcessorApi { get; private set; }
public String TestHostApi { get; private set; }
public BaseConfiguration BaseConfiguration;

protected ITransactionDataGenerator CreateTransactionDataGenerator(String clientId, String clientSecret, RunningMode runningMode){
ISecurityServiceClient securityServiceClient = Bootstrapper.GetService<ISecurityServiceClient>();
Expand Down Expand Up @@ -72,7 +63,7 @@ public async Task Execute(IJobExecutionContext context){

this.CacheConfiguration(context);
Logger.LogInformation($"Running Job Group: [{this.JobGroup}] Name: [{this.JobName}]");
this.LogConfiguration();
//this.LogConfiguration();

Bootstrapper.ConfigureServices(context);

Expand All @@ -81,39 +72,20 @@ public async Task Execute(IJobExecutionContext context){
Logger.LogInformation($"Job Group: [{this.JobGroup}] Name: [{this.JobName}] completed");
}

private void LogConfiguration(){
Logger.LogInformation($"Client Id: [{this.ClientId}]");
Logger.LogInformation($"EstateManagementApi is: [{this.EstateManagementApi}]");
Logger.LogInformation($"FileProcessorApi is: [{this.FileProcessorApi}]");
Logger.LogInformation($"SecurityService is: [{this.SecurityService}]");
Logger.LogInformation($"TestHostApi is: [{this.TestHostApi}]");
Logger.LogInformation($"TransactionProcessorApi is: [{this.TransactionProcessorApi}]");
}
//private void LogConfiguration(){
// Logger.LogInformation($"Client Id: [{this.ClientId}]");
// Logger.LogInformation($"EstateManagementApi is: [{this.EstateManagementApi}]");
// Logger.LogInformation($"FileProcessorApi is: [{this.FileProcessorApi}]");
// Logger.LogInformation($"SecurityService is: [{this.SecurityService}]");
// Logger.LogInformation($"TestHostApi is: [{this.TestHostApi}]");
// Logger.LogInformation($"TransactionProcessorApi is: [{this.TransactionProcessorApi}]");
//}

private void CacheConfiguration(IJobExecutionContext context){
this.JobName = context.JobDetail.Key.Name;
this.JobGroup = context.JobDetail.Key.Group;
this.ClientId = context.MergedJobDataMap.GetString("ClientId");
this.ClientSecret = context.MergedJobDataMap.GetString("ClientSecret");

if (context.MergedJobDataMap.ContainsKey("EstateManagementApi")){
this.EstateManagementApi = context.MergedJobDataMap.GetString("EstateManagementApi");
}

if (context.MergedJobDataMap.ContainsKey("FileProcessorApi")){
this.FileProcessorApi = context.MergedJobDataMap.GetString("FileProcessorApi");
}

if (context.MergedJobDataMap.ContainsKey("SecurityService")){
this.SecurityService = context.MergedJobDataMap.GetString("SecurityService");
}

if (context.MergedJobDataMap.ContainsKey("TestHostApi")){
this.TestHostApi = context.MergedJobDataMap.GetString("TestHostApi");
}

if (context.MergedJobDataMap.ContainsKey("TransactionProcessorApi")){
this.TransactionProcessorApi = context.MergedJobDataMap.GetString("TransactionProcessorApi");
}

BaseConfiguration configuration = Helpers.LoadJobConfig<BaseConfiguration>(context.MergedJobDataMap);
this.BaseConfiguration = configuration;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,11 @@ public class GenerateFileUploadsJob : BaseJob
#region Methods
public override async Task ExecuteJob(IJobExecutionContext context)
{
Guid estateId = context.MergedJobDataMap.GetGuidValueFromString("EstateId");
Guid merchantId = context.MergedJobDataMap.GetGuidValueFromString("MerchantId");
Guid userId = context.MergedJobDataMap.GetGuidValueFromString("UserId");
FileUploadJobConfig configuration = Helpers.LoadJobConfig<FileUploadJobConfig>(context.MergedJobDataMap);

Logger.LogInformation($"Estate Id: [{estateId}]");
Logger.LogInformation($"Merchant Id: [{merchantId}]");
Logger.LogInformation($"User Id: [{userId}]");

ITransactionDataGenerator t = CreateTransactionDataGenerator(this.ClientId, this.ClientSecret, RunningMode.Live);
ITransactionDataGenerator t = CreateTransactionDataGenerator(configuration.ClientId, configuration.ClientSecret, RunningMode.Live);
t.TraceGenerated += TraceGenerated;
await Jobs.GenerateFileUploads(t, estateId, merchantId, userId, context.CancellationToken);
await Jobs.GenerateFileUploads(t, configuration, context.CancellationToken);
}
#endregion
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@ public class GenerateMerchantStatementJob : BaseJob
{
public override async Task ExecuteJob(IJobExecutionContext context)
{
Guid estateId = context.MergedJobDataMap.GetGuidValueFromString("EstateId");
MerchantStatementJobConfig configuration = Helpers.LoadJobConfig<MerchantStatementJobConfig>(context.MergedJobDataMap);

Logger.LogInformation($"Estate Id: [{estateId}]");

ITransactionDataGenerator t = this.CreateTransactionDataGenerator(this.ClientId, this.ClientSecret, RunningMode.Live);
ITransactionDataGenerator t = this.CreateTransactionDataGenerator(configuration.ClientId, configuration.ClientSecret, RunningMode.Live);
t.TraceGenerated += TraceGenerated;
await Jobs.GenerateMerchantStatements(t, estateId, context.CancellationToken);
await Jobs.GenerateMerchantStatements(t, configuration, context.CancellationToken);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
namespace TransactionProcessing.SchedulerService.Jobs
using System.Collections.Generic;
using Newtonsoft.Json;

namespace TransactionProcessing.SchedulerService.Jobs
{
using System;
using System.Text.Json.Nodes;
using System.Text.Json;
using System.Threading.Tasks;
using DataGeneration;
using Quartz;
using Shared.Logger;
using System.Linq;

/// <summary>
///
Expand All @@ -14,20 +20,116 @@ public class GenerateTransactionsJob : BaseJob{

#region Methods

public override async Task ExecuteJob(IJobExecutionContext context){

Guid estateId = context.MergedJobDataMap.GetGuidValueFromString("EstateId");
Guid merchantId = context.MergedJobDataMap.GetGuidValueFromString("MerchantId");
Boolean requireLogon = context.MergedJobDataMap.GetBooleanValueFromString("requireLogon");
public override async Task ExecuteJob(IJobExecutionContext context)
{
TransactionJobConfig configuration = Helpers.LoadJobConfig<TransactionJobConfig>(context.MergedJobDataMap);

Logger.LogInformation($"Estate Id: [{estateId}]");
Logger.LogInformation($"Merchant Id: [{merchantId}]");
Logger.LogInformation($"Require Logon: [{requireLogon}]");

ITransactionDataGenerator t = CreateTransactionDataGenerator(this.ClientId, this.ClientSecret, RunningMode.Live);
ITransactionDataGenerator t = CreateTransactionDataGenerator(configuration.ClientId, configuration.ClientSecret, RunningMode.Live);
t.TraceGenerated += TraceGenerated;
await Jobs.GenerateTransactions(t, estateId, merchantId, requireLogon, context.CancellationToken);

await Jobs.GenerateTransactions(t, configuration, context.CancellationToken);
}
#endregion
}

public record BaseConfiguration(
String ClientId,
String ClientSecret,
String EstateManagementApi,
String FileProcessorApi,
String SecurityService,
String TestHostApi,
String TransactionProcessorApi);

public record MerchantStatementJobConfig(String ClientId,
String ClientSecret,
String EstateManagementApi,
String FileProcessorApi,
String SecurityService,
String TestHostApi,
String TransactionProcessorApi,Guid EstateId) : BaseConfiguration(ClientId, ClientSecret, EstateManagementApi, FileProcessorApi, SecurityService, TestHostApi, TransactionProcessorApi);

public record SettlementJobConfig(String ClientId,
String ClientSecret,
String EstateManagementApi,
String FileProcessorApi,
String SecurityService,
String TestHostApi,
String TransactionProcessorApi, Guid EstateId) : BaseConfiguration(ClientId, ClientSecret, EstateManagementApi, FileProcessorApi, SecurityService, TestHostApi, TransactionProcessorApi);

public record TransactionJobConfig(String ClientId,
String ClientSecret,
String EstateManagementApi,
String FileProcessorApi,
String SecurityService,
String TestHostApi,
String TransactionProcessorApi, Guid EstateId, Guid MerchantId, Boolean IsLogon, List<String> ContractNames) : BaseConfiguration(ClientId, ClientSecret, EstateManagementApi, FileProcessorApi, SecurityService, TestHostApi, TransactionProcessorApi);

public record FileUploadJobConfig(String ClientId,
String ClientSecret,
String EstateManagementApi,
String FileProcessorApi,
String SecurityService,
String TestHostApi,
String TransactionProcessorApi, Guid EstateId, Guid MerchantId, List<String> ContractNames, Guid UserId) : BaseConfiguration(ClientId, ClientSecret, EstateManagementApi, FileProcessorApi, SecurityService, TestHostApi, TransactionProcessorApi);

public record ReplayParkedQueueJobConfig(String ClientId,
String ClientSecret,
String EstateManagementApi,
String FileProcessorApi,
String SecurityService,
String TestHostApi,
String TransactionProcessorApi, String EventStoreAddress) : BaseConfiguration(ClientId, ClientSecret, EstateManagementApi, FileProcessorApi, SecurityService, TestHostApi, TransactionProcessorApi);

public static class Helpers
{
public static T LoadJobConfig<T>(JobDataMap jobDataMap)
{
String standardConfiguration = jobDataMap.GetString("Standard Configuration");
String jobConfiguration = jobDataMap.GetString("Job Configuration");
string fullConfig = Helpers.MergeJsonConfig(standardConfiguration, jobConfiguration);
T configuration = JsonConvert.DeserializeObject<T>(fullConfig);

return configuration;
}

public static String MergeJsonConfig(String jsonDocument1, String jsonDocument2)
{
using (JsonDocument doc1 = JsonDocument.Parse(jsonDocument1))
using (JsonDocument doc2 = JsonDocument.Parse(jsonDocument2))
{
JsonObject mergedObject = new JsonObject();

foreach (var property in doc1.RootElement.EnumerateObject())
{
mergedObject.Add(property.Name, property.Value.Clone());
}

foreach (var property in doc2.RootElement.EnumerateObject())
{
if (mergedObject.ContainsKey(property.Name) && property.Value.ValueKind == JsonValueKind.Array)
{
JsonElement existingArray = mergedObject[property.Name];
JsonElement newArray = property.Value;

List<JsonElement> mergedArray = existingArray.EnumerateArray().ToList();
mergedArray.AddRange(newArray.EnumerateArray());

mergedObject[property.Name] = JsonDocument.Parse(JsonSerializer.Serialize(mergedArray)).RootElement;
}
else
{
mergedObject.Add(property.Name, property.Value.Clone());
}
}

string mergedJson = JsonSerializer.Serialize(mergedObject);
return mergedJson;
}
}

internal class JsonObject : Dictionary<string, JsonElement>
{
}
}
}
Loading