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; 020 021 import org.apache.hadoop.classification.InterfaceAudience; 022 import org.apache.hadoop.classification.InterfaceStability; 023 024 /** 025 * The metrics record builder interface 026 */ 027 @InterfaceAudience.Public 028 @InterfaceStability.Evolving 029 public abstract class MetricsRecordBuilder { 030 /** 031 * Add a metrics tag 032 * @param info metadata of the tag 033 * @param value of the tag 034 * @return self 035 */ 036 public abstract MetricsRecordBuilder tag(MetricsInfo info, String value); 037 038 /** 039 * Add an immutable metrics tag object 040 * @param tag a pre-made tag object (potentially save an object construction) 041 * @return self 042 */ 043 public abstract MetricsRecordBuilder add(MetricsTag tag); 044 045 /** 046 * Add a pre-made immutable metric object 047 * @param metric the pre-made metric to save an object construction 048 * @return self 049 */ 050 public abstract MetricsRecordBuilder add(AbstractMetric metric); 051 052 /** 053 * Set the context tag 054 * @param value of the context 055 * @return self 056 */ 057 public abstract MetricsRecordBuilder setContext(String value); 058 059 /** 060 * Add an integer metric 061 * @param info metadata of the metric 062 * @param value of the metric 063 * @return self 064 */ 065 public abstract MetricsRecordBuilder addCounter(MetricsInfo info, int value); 066 067 /** 068 * Add an long metric 069 * @param info metadata of the metric 070 * @param value of the metric 071 * @return self 072 */ 073 public abstract MetricsRecordBuilder addCounter(MetricsInfo info, long value); 074 075 /** 076 * Add a integer gauge metric 077 * @param info metadata of the metric 078 * @param value of the metric 079 * @return self 080 */ 081 public abstract MetricsRecordBuilder addGauge(MetricsInfo info, int value); 082 083 /** 084 * Add a long gauge metric 085 * @param info metadata of the metric 086 * @param value of the metric 087 * @return self 088 */ 089 public abstract MetricsRecordBuilder addGauge(MetricsInfo info, long value); 090 091 /** 092 * Add a float gauge metric 093 * @param info metadata of the metric 094 * @param value of the metric 095 * @return self 096 */ 097 public abstract MetricsRecordBuilder addGauge(MetricsInfo info, float value); 098 099 /** 100 * Add a double gauge metric 101 * @param info metadata of the metric 102 * @param value of the metric 103 * @return self 104 */ 105 public abstract MetricsRecordBuilder addGauge(MetricsInfo info, double value); 106 107 /** 108 * @return the parent metrics collector object 109 */ 110 public abstract MetricsCollector parent(); 111 112 /** 113 * Syntactic sugar to add multiple records in a collector in a one liner. 114 * @return the parent metrics collector object 115 */ 116 public MetricsCollector endRecord() { return parent(); } 117 }