001    /*
002     @license.text@
003     */
004    package biz.hammurapi.metrics;
005    
006    import java.util.Collection;
007    
008    /**
009     * @author Pavel Vlasov 
010     * @version $Revision: 1.5 $
011     */
012    public interface Metric {
013            public interface Measurement {
014                    double getValue();
015                    long getTime();
016            }
017            
018            /**
019             * @return number of measurements
020             */
021            int getNumber();
022            
023            /**
024             * @return Minimum value
025             */
026            double getMin();
027            
028            /**
029             * @return Maximum value
030             */
031            double getMax();
032            
033            /**
034             * @return Average
035             */
036            double getAvg();
037            
038            /**
039             * @return Sum of values from all measurements
040             */
041            double getTotal();
042            
043            /**
044             * @return average distance from average
045             */
046            double getDeviation();
047            
048            /**
049             * Adds measurement 
050             * @param source Source object
051             * @param value value
052             */
053            void add(double value, long time);
054            
055            /**
056             * Adds another metric (aggregates)
057             * @param metric
058             */
059            void add(Metric metric);
060            
061            /**
062             * @return Collection of {@link Measurement}
063             */
064            Collection getMeasurements();
065            
066            String getName();
067    }