using System.Diagnostics.Metrics; namespace QRBee.Api.Services { public class CustomMetrics { private Counter MerchantRequestCounter { get; } private Counter MerchantResponseCounter { get; } 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; } private Counter TotalPaymentTime { get; } private UpDownCounter ConcurrentPayments { get; } private UpDownCounter ConcurrentConfirmations { get; } public string MetricName { get; } public CustomMetrics(string meterName = "QRBeeMetrics") { var meter = new Meter(meterName); MetricName = meterName; MerchantRequestCounter = meter.CreateCounter("merchant-requests", description: "Merchant has sent a request"); MerchantResponseCounter = meter.CreateCounter("merchant-responses"); 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"); TotalCreditCardCheckTime = meter.CreateCounter("total-credit-card-check-time","msec"); TotalPaymentTime = meter.CreateCounter("total-payment-time","msec"); ConcurrentPayments = meter.CreateUpDownCounter("concurrent-payments"); ConcurrentConfirmations = meter.CreateUpDownCounter("concurrent-confirmations"); } public void AddMerchantRequest() => MerchantRequestCounter.Add(1); public void AddMerchantResponse() => MerchantResponseCounter.Add(1); 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); public void AddTotalPaymentTime(long milliseconds) => TotalPaymentTime.Add(milliseconds); public void IncreaseConcurrentPayments() => ConcurrentPayments.Add(1); public void DecreaseConcurrentPayments() => ConcurrentPayments.Add(-1); public void IncreaseConcurrentConfirmations() => ConcurrentConfirmations.Add(1); public void DecreaseConcurrentConfirmation() => ConcurrentConfirmations.Add(-1); } }