Statistics collection - initial change
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / statistics / StatisticsCounters.java
1 /*
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.openflowjava.statistics;
9
10 import java.util.Map;
11 import java.util.concurrent.ConcurrentHashMap;
12
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 /**
17  * @author madamjak
18  *
19  */
20 public final class StatisticsCounters {
21
22     private static StatisticsCounters instanceHolder;
23     private static final Logger LOGGER = LoggerFactory.getLogger(StatisticsCounters.class);
24
25     private final Counter cntDSEncodeFail;
26     private final Counter cntDSEncodeSuccess;
27     private final Counter cntDSEnteredOFJava;
28     private final Counter cntUSDecodeFail;
29     private final Counter cntUSDecodeSuccess;
30     private final Counter cntUSMessagePass;
31     private final Counter cntUSReceivedOFJava;
32     //private Map<CounterEventTypes,Counter> countersMap;
33
34     public static StatisticsCounters  getInstance(){
35         if (instanceHolder == null){
36             instanceHolder = new StatisticsCounters();
37         }
38         return instanceHolder;
39     }
40
41     private StatisticsCounters() {
42         cntDSEncodeFail = new Counter();
43         cntDSEncodeSuccess = new Counter();
44         cntDSEnteredOFJava = new Counter();
45         cntUSDecodeFail = new Counter();
46         cntUSDecodeSuccess = new Counter();
47         cntUSMessagePass = new Counter();
48         cntUSReceivedOFJava = new Counter();
49         LOGGER.debug("StaticsCounters (without Map) has been created");
50 //        countersMap = new ConcurrentHashMap<>();
51 //        countersMap.put(CounterEventTypes.DS_ENCODE_FAIL, new Counter());
52 //        countersMap.put(CounterEventTypes.DS_ENCODE_SUCCESS, new Counter());
53 //        countersMap.put(CounterEventTypes.DS_ENTERED_OFJAVA, new Counter());
54 //        countersMap.put(CounterEventTypes.US_DECODE_FAIL, new Counter());
55 //        countersMap.put(CounterEventTypes.US_DECODE_SUCCESS, new Counter());
56 //        countersMap.put(CounterEventTypes.US_MESSAGE_PASS, new Counter());
57 //        countersMap.put(CounterEventTypes.US_RECEIVED_IN_OFJAVA, new Counter());
58 //        LOGGER.debug("StaticsCounters (with Map) has been created");
59     }
60
61     /**
62      * Get given counter
63      * @param counterEventKey - key to identify counter
64      * @return
65      */
66     public Counter getCounter(CounterEventTypes counterEventKey){
67         if(counterEventKey == null){
68             throw new IllegalArgumentException("counterEventKey can not be null");
69         }
70         switch (counterEventKey){
71             case DS_ENCODE_FAIL:
72                 return cntDSEncodeFail;
73             case DS_ENCODE_SUCCESS:
74                 return cntDSEncodeSuccess;
75             case DS_ENTERED_OFJAVA:
76                 return cntDSEnteredOFJava;
77             case US_DECODE_FAIL:
78                 return cntUSDecodeFail;
79             case US_DECODE_SUCCESS:
80                 return cntUSDecodeSuccess;
81             case US_MESSAGE_PASS:
82                 return cntUSMessagePass;
83             case US_RECEIVED_IN_OFJAVA:
84                 return cntUSReceivedOFJava;
85             default:
86                 throw new IllegalArgumentException("unknown counterEventKey");
87         }
88 //        return countersMap.get(counterEventKey);
89     }
90
91     /**
92      * Increment value of given counter
93      * @param counterEventKey - key to identify counter
94      * @return
95      */
96     public void incrementCounter(CounterEventTypes counterEventKey){
97         getCounter(counterEventKey).incrementCounter();
98     }
99
100     /**
101      * Set values of all counter to 0 (zero)
102      */
103     public void resetCounters(){
104         cntDSEncodeFail.reset(); ;
105         cntDSEncodeSuccess.reset();
106         cntDSEnteredOFJava.reset();
107         cntUSDecodeFail.reset();
108         cntUSDecodeSuccess.reset();
109         cntUSMessagePass.reset();
110         cntUSReceivedOFJava.reset();
111 //        countersMap.get(CounterEventTypes.DS_ENCODE_FAIL).reset();
112 //        countersMap.get(CounterEventTypes.DS_ENCODE_SUCCESS).reset();
113 //        countersMap.get(CounterEventTypes.DS_ENTERED_OFJAVA).reset();
114 //        countersMap.get(CounterEventTypes.US_DECODE_FAIL).reset();
115 //        countersMap.get(CounterEventTypes.US_DECODE_SUCCESS).reset();
116 //        countersMap.get(CounterEventTypes.US_MESSAGE_PASS).reset();
117 //        countersMap.get(CounterEventTypes.US_RECEIVED_IN_OFJAVA).reset();
118         LOGGER.debug("StaticsCounters has been reset");
119     }
120 }