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, "NumberOfClients": 100,
"NumberOfMerchants": 10, "NumberOfMerchants": 10,
"NumberOfThreads": 6, "NumberOfThreads": 6,
"DelayBetweenMessagesMSec": 500, "DelayBetweenMessagesMSec": 250,
"DelayJitterMSec": 50, "DelayJitterMSec": 50,
"MinAmount": 10, "MinAmount": 10,
"MaxAmount": 100, "MaxAmount": 100,
//0.004 //0.0016
"LoadSpike": { "LoadSpike": {
"Probability": 0.002, "Probability": 0.0,
"Duration": "00:00:15", "Duration": "00:00:15",
"Parameters": { "Parameters": {
"Delay": "00:00:00.0100000" "Delay": "00:00:00.0100000"
} }
}, },
//0.002 //0.0008
"TransactionCorruption": { "TransactionCorruption": {
"Probability": 0, "Probability": 0,
"Duration": "00:00:15", "Duration": "00:00:15",
@ -49,7 +49,7 @@
//0.003 //0.003
"UnconfirmedTransaction": { "UnconfirmedTransaction": {
"Probability": 0, "Probability": 0.0008,
"Duration": "00:00:15", "Duration": "00:00:15",
"Parameters": { "Parameters": {
} }

View File

@ -9,6 +9,7 @@ namespace QRBee.Api.Services
private Counter<int> SucceededTransactionsCounter { get; } private Counter<int> SucceededTransactionsCounter { get; }
private Counter<int> FailedTransactionsCounter { get; } private Counter<int> FailedTransactionsCounter { get; }
private Counter<int> CorruptTransactionsCounter { get; } private Counter<int> CorruptTransactionsCounter { get; }
private Counter<int> CancelledTransactionsCounter { get; }
private Counter<int> SucceededPaymentConfirmationsCounter { get; } private Counter<int> SucceededPaymentConfirmationsCounter { get; }
private Counter<int> FailedPaymentConfirmationsCounter { get; } private Counter<int> FailedPaymentConfirmationsCounter { get; }
private Counter<long> TotalCreditCardCheckTime { get; } private Counter<long> TotalCreditCardCheckTime { get; }
@ -29,6 +30,7 @@ namespace QRBee.Api.Services
SucceededTransactionsCounter = meter.CreateCounter<int>("transaction-succeeded", description: "Transaction succeeded"); SucceededTransactionsCounter = meter.CreateCounter<int>("transaction-succeeded", description: "Transaction succeeded");
FailedTransactionsCounter = meter.CreateCounter<int>("transaction-failed", description: "Transaction failed"); FailedTransactionsCounter = meter.CreateCounter<int>("transaction-failed", description: "Transaction failed");
CorruptTransactionsCounter = meter.CreateCounter<int>("transaction-corrupt", description: "Transaction was corrupted"); 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"); SucceededPaymentConfirmationsCounter = meter.CreateCounter<int>("payment-confirmation-succeeded", description: "Payment confirmation succeeded");
FailedPaymentConfirmationsCounter = meter.CreateCounter<int>("payment-confirmation-failed", description: "Payment confirmation failed"); 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 AddSucceededTransaction() => SucceededTransactionsCounter.Add(1);
public void AddFailedTransaction() => FailedTransactionsCounter.Add(1); public void AddFailedTransaction() => FailedTransactionsCounter.Add(1);
public void AddCorruptTransaction() => CorruptTransactionsCounter.Add(1); public void AddCorruptTransaction() => CorruptTransactionsCounter.Add(1);
public void AddCancelledTransaction() => CancelledTransactionsCounter.Add(1);
public void AddSucceededPaymentConfirmation() => SucceededPaymentConfirmationsCounter.Add(1); public void AddSucceededPaymentConfirmation() => SucceededPaymentConfirmationsCounter.Add(1);
public void AddFailedPaymentConfirmation() => FailedPaymentConfirmationsCounter.Add(1); public void AddFailedPaymentConfirmation() => FailedPaymentConfirmationsCounter.Add(1);
public void AddTotalCreditCardCheckTime(long milliseconds) => TotalCreditCardCheckTime.Add(milliseconds); public void AddTotalCreditCardCheckTime(long milliseconds) => TotalCreditCardCheckTime.Add(milliseconds);

View File

@ -7,16 +7,20 @@ namespace QRBee.Api.Services
private readonly IStorage _storage; private readonly IStorage _storage;
private readonly IPaymentGateway _paymentGateway; private readonly IPaymentGateway _paymentGateway;
private readonly ILogger<TransactionMonitoring> _logger; 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 bool _started;
private static object _syncObject = new(); 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; _storage = storage;
_paymentGateway = paymentGateway; _paymentGateway = paymentGateway;
_logger = logger; _logger = logger;
_customMetrics = metrics;
if (_started) if (_started)
return; return;
@ -37,7 +41,7 @@ namespace QRBee.Api.Services
while (true) while (true)
{ {
await CheckTransactions(); 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) 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; continue;
} }
_logger.LogDebug($"Cancelling transaction: {transaction.MerchantTransactionId}..."); _logger.LogDebug($"Cancelling transaction: {transaction.MerchantTransactionId}...");
await CancelTransaction(transaction); await CancelTransaction(transaction);
} }
} }
@ -74,6 +79,7 @@ namespace QRBee.Api.Services
} }
transaction.Status = TransactionInfo.TransactionStatus.Cancelled; transaction.Status = TransactionInfo.TransactionStatus.Cancelled;
_customMetrics.AddCancelledTransaction();
await _storage.UpdateTransaction(transaction); await _storage.UpdateTransaction(transaction);
} }
} }