    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
    019    package org.apache.hadoop.metrics2.annotation;
    020
    021    import java.lang.annotation.*;
    022
    023    import org.apache.hadoop.classification.InterfaceAudience;
    024    import org.apache.hadoop.classification.InterfaceStability;
    025
    026    /**
    027     * Annotation interface for a single metric
    028     */
    029    @InterfaceAudience.Public
    030    @InterfaceStability.Evolving
    031    @Documented
    032    @Target({ElementType.FIELD, ElementType.METHOD})
    033    @Retention(RetentionPolicy.RUNTIME)
    034    public @interface Metric {
    035
    036      public enum Type {
    037        DEFAULT, COUNTER, GAUGE, TAG
    038      }
    039
    040      /**
    041       * Shorthand for optional name and description
    042       * @return {description} or {name, description}
    043       */
    044      String[] value() default {};
    045
    046      /**
    047       * @return optional description of the metric
    048       */
    049      String about() default "";
    050
    051      /**
    052       * @return optional sample name for MutableStat/Rate/Rates
    053       */
    054      String sampleName() default "Ops";
    055
    056      /**
    057       * @return optional value name for MutableStat/Rate/Rates
    058       */
    059      String valueName() default "Time";
    060
    061      /**
    062       * @return true to create a metric snapshot even if unchanged.
    063       */
    064      boolean always() default false;
    065
    066      /**
    067       * @return optional type (counter|gauge) of the metric
    068       */
    069      Type type() default Type.DEFAULT;
    070    }