001    /*
002     @license.text@ 
003     */
004    package biz.hammurapi.metrics;
005    
006    import java.util.Collections;
007    import java.util.HashMap;
008    import java.util.Iterator;
009    import java.util.LinkedList;
010    import java.util.Map;
011    
012    /**
013     * Collects metrics in in-memory collection
014     * @author Pavel Vlasov
015     * @version $Revision: 1.2 $
016     */
017    public class SimpleMeasurementConsumer implements MeasurementConsumer, MetricSource {
018            private Map metrics=new HashMap();
019            private boolean keepMeasurements;
020            
021            /**
022             * @param keepMeasurements
023             */
024            public SimpleMeasurementConsumer(boolean keepMeasurements) {
025                    super();
026                    this.keepMeasurements = keepMeasurements;
027            }
028            
029            /**
030             * 
031             */
032            public SimpleMeasurementConsumer() {
033                    super();
034            }
035            
036            public synchronized void addMeasurement(String name, double value, long time) {
037                    Metric metric=(Metric) metrics.get(name);
038                    if (metric==null) {
039                            metric=new SimpleMetric(name, keepMeasurements);
040                            metrics.put(name, metric);
041                    }
042                    metric.add(value, time);
043            }
044            
045            public Map getMetrics() {
046                    return metrics;
047            }
048            
049            public String toString() {
050                    StringBuffer ret=new StringBuffer();
051                    LinkedList list = new LinkedList(metrics.values());
052                    Collections.sort(list);
053                    Iterator it=list.iterator();
054                    while (it.hasNext()) {
055                            ret.append(it.next());
056                            ret.append("\n");
057                    }
058                    return ret.toString();
059            }
060    }