001    /*
002     * OutputRecord.java
003     *
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *     http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing, software
015     * distributed under the License is distributed on an "AS IS" BASIS,
016     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017     * See the License for the specific language governing permissions and
018     * limitations under the License.
019     */
020    
021    package org.apache.hadoop.metrics.spi;
022    
023    import java.util.Collections;
024    import java.util.Map;
025    import java.util.Set;
026    import java.util.TreeMap;
027    import java.util.Map.Entry;
028    
029    import org.apache.hadoop.classification.InterfaceAudience;
030    import org.apache.hadoop.classification.InterfaceStability;
031    import org.apache.hadoop.metrics.spi.AbstractMetricsContext.MetricMap;
032    import org.apache.hadoop.metrics.spi.AbstractMetricsContext.TagMap;
033    
034    /**
035     * Represents a record of metric data to be sent to a metrics system.
036     */
037    @InterfaceAudience.Public
038    @InterfaceStability.Evolving
039    public class OutputRecord {
040        
041      private TagMap tagMap;
042      private MetricMap metricMap;
043        
044      /** Creates a new instance of OutputRecord */
045      OutputRecord(TagMap tagMap, MetricMap metricMap) {
046        this.tagMap = tagMap;
047        this.metricMap = metricMap;
048      }
049        
050      /**
051       * Returns the set of tag names
052       */
053      public Set<String> getTagNames() {
054        return Collections.unmodifiableSet(tagMap.keySet());
055      }
056        
057      /**
058       * Returns a tag object which is can be a String, Integer, Short or Byte.
059       *
060       * @return the tag value, or null if there is no such tag
061       */
062      public Object getTag(String name) {
063        return tagMap.get(name);
064      }
065        
066      /**
067       * Returns the set of metric names.
068       */
069      public Set<String> getMetricNames() {
070        return Collections.unmodifiableSet(metricMap.keySet());
071      }
072        
073      /**
074       * Returns the metric object which can be a Float, Integer, Short or Byte.
075       */
076      public Number getMetric(String name) {
077        return metricMap.get(name);
078      }
079      
080    
081      /**
082       * Returns a copy of this record's tags.
083       */
084      public TagMap getTagsCopy() {
085        return new TagMap(tagMap);
086      }
087      
088      /**
089       * Returns a copy of this record's metrics.
090       */
091      public MetricMap getMetricsCopy() {
092        return new MetricMap(metricMap);
093      }
094    }