Convert Sparky to Spring-Boot
[aai/sparky-be.git] / sparkybe-onap-service / src / main / java / org / onap / aai / sparky / sync / TransactionRateMonitor.java
1 /**
2  * ============LICENSE_START===================================================
3  * SPARKY (AAI UI service)
4  * ============================================================================
5  * Copyright © 2017 AT&T Intellectual Property.
6  * Copyright © 2017 Amdocs
7  * All rights reserved.
8  * ============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=====================================================
21  *
22  * ECOMP and OpenECOMP are trademarks
23  * and service marks of AT&T Intellectual Property.
24  */
25 package org.onap.aai.sparky.sync;
26
27 import java.util.concurrent.atomic.AtomicInteger;
28
29 import org.onap.aai.sparky.analytics.AveragingRingBuffer;
30 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
31
32 public class TransactionRateMonitor {
33
34   private AtomicInteger numTransactions;
35   private AveragingRingBuffer responseTimeTracker;
36   private long startTimeInMs;
37
38   /**
39    * Instantiates a new transaction rate controller.
40    *
41    * @param config the config
42    */
43   public TransactionRateMonitor(int numWorkerThreads, NetworkStatisticsConfig config) {
44
45     this.responseTimeTracker = new AveragingRingBuffer(
46         config.getNumSamplesPerThreadForRunningAverage() * numWorkerThreads);
47     this.startTimeInMs = System.currentTimeMillis();
48     this.numTransactions = new AtomicInteger(0);
49   }
50
51   /**
52    * Track response time.
53    *
54    * @param responseTimeInMs the response time in ms
55    */
56   public void trackResponseTime(long responseTimeInMs) {
57     this.numTransactions.incrementAndGet();
58     responseTimeTracker.addSample(responseTimeInMs);
59   }
60
61   public long getAvg() {
62     return responseTimeTracker.getAvg();
63   }
64
65   public double getCurrentTps() {
66     if (numTransactions.get() > 0) {
67       double timeDelta = System.currentTimeMillis() - startTimeInMs;
68       double numTxns = numTransactions.get();
69       return (numTxns / timeDelta) * 1000.0;
70     }
71
72     return 0.0;
73   }
74
75 }