001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    package org.apache.hadoop.metrics.spi;
019    
020    import org.apache.hadoop.classification.InterfaceAudience;
021    import org.apache.hadoop.classification.InterfaceStability;
022    import org.apache.hadoop.metrics.ContextFactory;
023    import org.apache.hadoop.metrics.MetricsServlet;
024    
025    /** 
026     * A MetricsContext that does not emit data, but, unlike NullContextWithUpdate,
027     * does save it for retrieval with getAllRecords().
028     * 
029     * This is useful if you want to support {@link MetricsServlet}, but
030     * not emit metrics in any other way.
031     */
032    @InterfaceAudience.Public
033    @InterfaceStability.Evolving
034    public class NoEmitMetricsContext extends AbstractMetricsContext {
035        
036        private static final String PERIOD_PROPERTY = "period";
037          
038        /** Creates a new instance of NullContextWithUpdateThread */
039        @InterfaceAudience.Private
040        public NoEmitMetricsContext() {
041        }
042        
043        @InterfaceAudience.Private
044        public void init(String contextName, ContextFactory factory) {
045          super.init(contextName, factory);
046          parseAndSetPeriod(PERIOD_PROPERTY);
047        }
048         
049        /**
050         * Do-nothing version of emitRecord
051         */
052        @InterfaceAudience.Private
053        protected void emitRecord(String contextName, String recordName,
054                                  OutputRecord outRec) {
055        }
056    }