DEEP-42 Custom metrics added to Transaction monitoring

This commit is contained in:
Andrey Shabarshov 2023-08-18 21:20:04 +01:00
parent fb50477521
commit 263f132a22
3 changed files with 18 additions and 9 deletions

View File

@ -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": {
}

View File

@ -9,6 +9,7 @@ namespace QRBee.Api.Services
private Counter<int> SucceededTransactionsCounter { get; }
private Counter<int> FailedTransactionsCounter { get; }
private Counter<int> CorruptTransactionsCounter { get; }
private Counter<int> CancelledTransactionsCounter { get; }
private Counter<int> SucceededPaymentConfirmationsCounter { get; }
private Counter<int> FailedPaymentConfirmationsCounter { get; }
private Counter<long> TotalCreditCardCheckTime { get; }
@ -29,6 +30,7 @@ namespace QRBee.Api.Services
SucceededTransactionsCounter = meter.CreateCounter<int>("transaction-succeeded", description: "Transaction succeeded");
FailedTransactionsCounter = meter.CreateCounter<int>("transaction-failed", description: "Transaction failed");
CorruptTransactionsCounter = meter.CreateCounter<int>("transaction-corrupt", description: "Transaction was corrupted");
CancelledTransactionsCounter = meter.CreateCounter<int>("transaction-cancelled", description: "Transaction was cancelled by TransactionMonitoring class");
SucceededPaymentConfirmationsCounter = meter.CreateCounter<int>("payment-confirmation-succeeded", description: "Payment confirmation succeeded");
FailedPaymentConfirmationsCounter = meter.CreateCounter<int>("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);

View File

@ -7,16 +7,20 @@ namespace QRBee.Api.Services
private readonly IStorage _storage;
private readonly IPaymentGateway _paymentGateway;
private readonly ILogger<TransactionMonitoring> _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<TransactionMonitoring> logger)
private readonly CustomMetrics _customMetrics;
public TransactionMonitoring(IStorage storage, IPaymentGateway paymentGateway, ILogger<TransactionMonitoring> 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);
}
}