001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.monitoring.reporting.web.plugin.report.format;
019    
020    import org.apache.commons.monitoring.counters.Counter;
021    
022    /**
023     * An enum to acces data from a Counter based on the property name. Can be used to avoid reflection on Counter
024     * implementation when requesting data and undesirable exposure of internals.
025     * <p/>
026     * example :
027     * <p/>
028     * <pre>
029     * String property = httpServletRequest.getParameter( &quot;property&quot; );
030     *
031     * Double data = MetricData.valueOf( property ).value( metric );
032     * </pre>
033     *
034     * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
035     */
036    public enum MetricData {
037        Hits {
038            @Override
039            public double value(final Counter counter) {
040                return counter.getHits();
041            }
042    
043            @Override
044            public boolean isTime() {
045                return false;
046            }
047        },
048        Max {
049            @Override
050            public double value(final Counter counter) {
051                return counter.getMax();
052            }
053    
054            @Override
055            public boolean isTime() {
056                return true;
057            }
058        },
059        Mean {
060            @Override
061            public double value(final Counter counter) {
062                return counter.getMean();
063            }
064    
065            @Override
066            public boolean isTime() {
067                return true;
068            }
069        },
070        Min {
071            @Override
072            public double value(final Counter counter) {
073                return counter.getMin();
074            }
075    
076            @Override
077            public boolean isTime() {
078                return true;
079            }
080        },
081        StandardDeviation {
082            @Override
083            public double value(final Counter counter) {
084                return counter.getStandardDeviation();
085            }
086    
087            @Override
088            public boolean isTime() {
089                return false;
090            }
091        },
092        Sum {
093            @Override
094            public double value(final Counter counter) {
095                return counter.getSum();
096            }
097    
098            @Override
099            public boolean isTime() {
100                return true;
101            }
102        },
103        SumOfLogs {
104            @Override
105            public double value(final Counter counter) {
106                return counter.getSumOfLogs();
107            }
108    
109            @Override
110            public boolean isTime() {
111                return false;
112            }
113        },
114        SumOfSquares {
115            @Override
116            public double value(final Counter counter) {
117                return counter.getSumOfSquares();
118            }
119    
120            @Override
121            public boolean isTime() {
122                return false;
123            }
124        },
125        Variance {
126            @Override
127            public double value(final Counter counter) {
128                return counter.getVariance();
129            }
130    
131            @Override
132            public boolean isTime() {
133                return false;
134            }
135        },
136        GeometricMean {
137            @Override
138            public double value(final Counter counter) {
139                return counter.getGeometricMean();
140            }
141    
142            @Override
143            public boolean isTime() {
144                return false;
145            }
146        },
147        Value {
148            @Override
149            public double value(final Counter counter) {
150                return counter.getSum();
151            }
152    
153            @Override
154            public boolean isTime() {
155                return true;
156            }
157        },
158        Concurrency {
159            @Override
160            public double value(final Counter counter) {
161                return counter.currentConcurrency().get();
162            }
163    
164            @Override
165            public boolean isTime() {
166                return false;
167            }
168        },
169        MaxConcurrency {
170            @Override
171            public double value(final Counter counter) {
172                return counter.getMaxConcurrency();
173            }
174    
175            @Override
176            public boolean isTime() {
177                return false;
178            }
179        };
180    
181        public abstract double value(Counter counter);
182        public abstract boolean isTime();
183    }