From 263f132a2236a53c93014f29ca05dd39f6aaae96 Mon Sep 17 00:00:00 2001 From: Andrey Shabarshov Date: Fri, 18 Aug 2023 21:20:04 +0100 Subject: [PATCH] DEEP-42 Custom metrics added to Transaction monitoring --- QRBee.Load.Generator/appsettings.json | 10 +++++----- QRBeeApi/Services/CustomMetrics.cs | 3 +++ QRBeeApi/Services/TransactionMonitoring.cs | 14 ++++++++++---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/QRBee.Load.Generator/appsettings.json b/QRBee.Load.Generator/appsettings.json index 93742a2..a25c5fb 100644 --- a/QRBee.Load.Generator/appsettings.json +++ b/QRBee.Load.Generator/appsettings.json @@ -16,21 +16,21 @@ "NumberOfClients": 100, "NumberOfMerchants": 10, "NumberOfThreads": 6, - "DelayBetweenMessagesMSec": 500, + "DelayBetweenMessagesMSec": 250, "DelayJitterMSec": 50, "MinAmount": 10, "MaxAmount": 100, - //0.004 + //0.0016 "LoadSpike": { - "Probability": 0.002, + "Probability": 0.0, "Duration": "00:00:15", "Parameters": { "Delay": "00:00:00.0100000" } }, - //0.002 + //0.0008 "TransactionCorruption": { "Probability": 0, "Duration": "00:00:15", @@ -49,7 +49,7 @@ //0.003 "UnconfirmedTransaction": { - "Probability": 0, + "Probability": 0.0008, "Duration": "00:00:15", "Parameters": { } diff --git a/QRBeeApi/Services/CustomMetrics.cs b/QRBeeApi/Services/CustomMetrics.cs index 2ba58e0..0f6dbe2 100644 --- a/QRBeeApi/Services/CustomMetrics.cs +++ b/QRBeeApi/Services/CustomMetrics.cs @@ -9,6 +9,7 @@ namespace QRBee.Api.Services private Counter SucceededTransactionsCounter { get; } private Counter FailedTransactionsCounter { get; } private Counter CorruptTransactionsCounter { get; } + private Counter CancelledTransactionsCounter { get; } private Counter SucceededPaymentConfirmationsCounter { get; } private Counter FailedPaymentConfirmationsCounter { get; } private Counter TotalCreditCardCheckTime { get; } @@ -29,6 +30,7 @@ namespace QRBee.Api.Services SucceededTransactionsCounter = meter.CreateCounter("transaction-succeeded", description: "Transaction succeeded"); FailedTransactionsCounter = meter.CreateCounter("transaction-failed", description: "Transaction failed"); CorruptTransactionsCounter = meter.CreateCounter("transaction-corrupt", description: "Transaction was corrupted"); + CancelledTransactionsCounter = meter.CreateCounter("transaction-cancelled", description: "Transaction was cancelled by TransactionMonitoring class"); SucceededPaymentConfirmationsCounter = meter.CreateCounter("payment-confirmation-succeeded", description: "Payment confirmation succeeded"); FailedPaymentConfirmationsCounter = meter.CreateCounter("payment-confirmation-failed", description: "Payment confirmation failed"); @@ -47,6 +49,7 @@ namespace QRBee.Api.Services public void AddSucceededTransaction() => SucceededTransactionsCounter.Add(1); public void AddFailedTransaction() => FailedTransactionsCounter.Add(1); public void AddCorruptTransaction() => CorruptTransactionsCounter.Add(1); + public void AddCancelledTransaction() => CancelledTransactionsCounter.Add(1); public void AddSucceededPaymentConfirmation() => SucceededPaymentConfirmationsCounter.Add(1); public void AddFailedPaymentConfirmation() => FailedPaymentConfirmationsCounter.Add(1); public void AddTotalCreditCardCheckTime(long milliseconds) => TotalCreditCardCheckTime.Add(milliseconds); diff --git a/QRBeeApi/Services/TransactionMonitoring.cs b/QRBeeApi/Services/TransactionMonitoring.cs index 93e4cc0..08f8861 100644 --- a/QRBeeApi/Services/TransactionMonitoring.cs +++ b/QRBeeApi/Services/TransactionMonitoring.cs @@ -7,16 +7,20 @@ namespace QRBee.Api.Services private readonly IStorage _storage; private readonly IPaymentGateway _paymentGateway; private readonly ILogger _logger; - private const double Minutes = 5; + private const double Minutes = 2; + private const double Seconds = 30; private static bool _started; private static object _syncObject = new(); - public TransactionMonitoring(IStorage storage, IPaymentGateway paymentGateway, ILogger logger) + private readonly CustomMetrics _customMetrics; + + public TransactionMonitoring(IStorage storage, IPaymentGateway paymentGateway, ILogger logger, CustomMetrics metrics) { _storage = storage; _paymentGateway = paymentGateway; _logger = logger; + _customMetrics = metrics; if (_started) return; @@ -37,7 +41,7 @@ namespace QRBee.Api.Services while (true) { await CheckTransactions(); - await Task.Delay(TimeSpan.FromMinutes(Minutes)); + await Task.Delay(TimeSpan.FromSeconds(Seconds)); } } @@ -50,11 +54,12 @@ namespace QRBee.Api.Services { if (transaction.ServerTimeStamp + TimeSpan.FromMinutes(Minutes) > DateTime.UtcNow) { - _logger.LogDebug($"Transaction: {transaction.MerchantTransactionId} should not be cancelled yet (ServerTimeStamp: {transaction.ServerTimeStamp:O}, Now: {DateTime.UtcNow:O})"); + // _logger.LogDebug($"Transaction: {transaction.MerchantTransactionId} should not be cancelled yet (ServerTimeStamp: {transaction.ServerTimeStamp:O}, Now: {DateTime.UtcNow:O})"); continue; } _logger.LogDebug($"Cancelling transaction: {transaction.MerchantTransactionId}..."); + await CancelTransaction(transaction); } } @@ -74,6 +79,7 @@ namespace QRBee.Api.Services } transaction.Status = TransactionInfo.TransactionStatus.Cancelled; + _customMetrics.AddCancelledTransaction(); await _storage.UpdateTransaction(transaction); } }