aboutsummaryrefslogtreecommitdiffstats
path: root/ECOMP-PDP-REST/src/main/java/org/openecomp/policy/pdp/rest/jmx/PdpRestMonitor.java
blob: 93dfbe6a016908c8adce2b2aa39774665e936959 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*-
 * ============LICENSE_START=======================================================
 * ECOMP-PDP-REST
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */

package org.openecomp.policy.pdp.rest.jmx;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BinaryOperator;

import org.openecomp.policy.xacml.util.MetricsUtil.AvgLatency;
import org.openecomp.policy.xacml.util.MetricsUtil.MaxLatency;
import org.openecomp.policy.xacml.util.MetricsUtil.MinLatency;

public class PdpRestMonitor implements PdpRestMonitorMBean {	
	public static PdpRestMonitor singleton = new PdpRestMonitor();
	
	private final AtomicLong pdpEvaluationAttempts = new AtomicLong();
	private final AtomicLong pdpEvaluationSuccesses = new AtomicLong();
	private final AtomicLong pdpEvaluationNA = new AtomicLong();
	private final AtomicLong pdpEvaluationPermit = new AtomicLong();
	private final AtomicLong pdpEvaluationDeny = new AtomicLong();
	private final Map<String, Integer> policyCount = new HashMap<>();
	
	private final MinLatency pdpEngineDecisionMinLatency = new MinLatency();
	private final MaxLatency pdpEngineDecisionMaxLatency = new MaxLatency();
	private final AvgLatency pdpEngineDecisionAvgLatency =  new AvgLatency();
	
	private volatile long lastDecisionLatency = 0;
	
	@Override
	public long getPdpEvaluationAttempts() {
		return pdpEvaluationAttempts.longValue();
	}
	@Override
	public long getPdpEvaluationPermit() {
		return pdpEvaluationPermit.longValue();
	}
	@Override
	public long getPdpEvaluationDeny() {
		return pdpEvaluationDeny.longValue();
	}
	@Override
	public long getPdpEvaluationSuccesses() {
		return pdpEvaluationSuccesses.longValue();
	}

	@Override
	public long getpdpEvaluationNA() {
		return pdpEvaluationNA.longValue();
	}
	@Override
	public long getLastDecisionLatency() {
		return lastDecisionLatency;
	}
	
	/**
	 * @return the pdpEngineDecisionMinLatency
	 */
	@Override
	public long getPdpEngineDecisionMinLatency() {
		return pdpEngineDecisionMinLatency.min();
	}

	/**
	 * @return the pdpEngineDecisionMaxLatency
	 */
	@Override
	public long getPdpEngineDecisionMaxLatency() {
		return pdpEngineDecisionMaxLatency.max();
	}

	/**
	 * @return the pdpEngineDecisionAvgLatency
	 */
	@Override
	public long getPdpEngineDecisionAvgLatency() {
		return pdpEngineDecisionAvgLatency.avg();
	}

	@Override
	public synchronized void resetLatency() {
		this.lastDecisionLatency = 0;
		this.pdpEngineDecisionMinLatency.reset();
		this.pdpEngineDecisionMaxLatency.reset();
		this.pdpEngineDecisionAvgLatency.reset();
	}
	
	@Override
	public synchronized void resetCounters() {
		this.pdpEvaluationAttempts.set(0);
		this.pdpEvaluationSuccesses.set(0);
		this.pdpEvaluationNA.set(0);
		this.policyCount.clear();
	}
	
	public void pdpEvaluationAttempts() {
		pdpEvaluationAttempts.incrementAndGet();
	}
	
	public void pdpEvaluationSuccess() {
		pdpEvaluationSuccesses.incrementAndGet();		
	}
	
	public void pdpEvaluationNA(){
		pdpEvaluationNA.incrementAndGet();
	}
	public void pdpEvaluationPermit(){
		pdpEvaluationPermit.incrementAndGet();
	}
	public void pdpEvaluationDeny(){
		pdpEvaluationDeny.incrementAndGet();
	}
	
	public synchronized void computeLatency(long latency) {
		this.lastDecisionLatency = latency;
		this.pdpEngineDecisionMinLatency.compute(latency);
		this.pdpEngineDecisionMaxLatency.compute(latency);
		this.pdpEngineDecisionAvgLatency.compute(latency);
	}

	public void policyCountAdd(String policyID, Integer count){
		if (policyCount.containsKey(policyID)){
			count = count + policyCount.get(policyID);		
		}
		policyCount.put(policyID, count);
	}
	public Map<String, Integer> getpolicyMap() {
		return policyCount;
	}
	public Integer getpolicyCount(String policyID) {
		// TODO Auto-generated method stub
		if (policyCount.containsKey(policyID)){
			return policyCount.get(policyID);
		}
		return null;
	}
	


}