001 /*
002 * MetricsRecordImpl.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.LinkedHashMap;
024 import java.util.Map;
025
026 import org.apache.hadoop.classification.InterfaceAudience;
027 import org.apache.hadoop.classification.InterfaceStability;
028 import org.apache.hadoop.metrics.MetricsException;
029 import org.apache.hadoop.metrics.MetricsRecord;
030 import org.apache.hadoop.metrics.spi.AbstractMetricsContext.TagMap;
031
032 /**
033 * An implementation of MetricsRecord. Keeps a back-pointer to the context
034 * from which it was created, and delegates back to it on <code>update</code>
035 * and <code>remove()</code>.
036 */
037 @InterfaceAudience.Public
038 @InterfaceStability.Evolving
039 public class MetricsRecordImpl implements MetricsRecord {
040
041 private TagMap tagTable = new TagMap();
042 private Map<String,MetricValue> metricTable = new LinkedHashMap<String,MetricValue>();
043
044 private String recordName;
045 private AbstractMetricsContext context;
046
047
048 /** Creates a new instance of FileRecord */
049 protected MetricsRecordImpl(String recordName, AbstractMetricsContext context)
050 {
051 this.recordName = recordName;
052 this.context = context;
053 }
054
055 /**
056 * Returns the record name.
057 *
058 * @return the record name
059 */
060 public String getRecordName() {
061 return recordName;
062 }
063
064 /**
065 * Sets the named tag to the specified value.
066 *
067 * @param tagName name of the tag
068 * @param tagValue new value of the tag
069 * @throws MetricsException if the tagName conflicts with the configuration
070 */
071 public void setTag(String tagName, String tagValue) {
072 if (tagValue == null) {
073 tagValue = "";
074 }
075 tagTable.put(tagName, tagValue);
076 }
077
078 /**
079 * Sets the named tag to the specified value.
080 *
081 * @param tagName name of the tag
082 * @param tagValue new value of the tag
083 * @throws MetricsException if the tagName conflicts with the configuration
084 */
085 public void setTag(String tagName, int tagValue) {
086 tagTable.put(tagName, Integer.valueOf(tagValue));
087 }
088
089 /**
090 * Sets the named tag to the specified value.
091 *
092 * @param tagName name of the tag
093 * @param tagValue new value of the tag
094 * @throws MetricsException if the tagName conflicts with the configuration
095 */
096 public void setTag(String tagName, long tagValue) {
097 tagTable.put(tagName, Long.valueOf(tagValue));
098 }
099
100 /**
101 * Sets the named tag to the specified value.
102 *
103 * @param tagName name of the tag
104 * @param tagValue new value of the tag
105 * @throws MetricsException if the tagName conflicts with the configuration
106 */
107 public void setTag(String tagName, short tagValue) {
108 tagTable.put(tagName, Short.valueOf(tagValue));
109 }
110
111 /**
112 * Sets the named tag to the specified value.
113 *
114 * @param tagName name of the tag
115 * @param tagValue new value of the tag
116 * @throws MetricsException if the tagName conflicts with the configuration
117 */
118 public void setTag(String tagName, byte tagValue) {
119 tagTable.put(tagName, Byte.valueOf(tagValue));
120 }
121
122 /**
123 * Removes any tag of the specified name.
124 */
125 public void removeTag(String tagName) {
126 tagTable.remove(tagName);
127 }
128
129 /**
130 * Sets the named metric to the specified value.
131 *
132 * @param metricName name of the metric
133 * @param metricValue new value of the metric
134 * @throws MetricsException if the metricName or the type of the metricValue
135 * conflicts with the configuration
136 */
137 public void setMetric(String metricName, int metricValue) {
138 setAbsolute(metricName, Integer.valueOf(metricValue));
139 }
140
141 /**
142 * Sets the named metric to the specified value.
143 *
144 * @param metricName name of the metric
145 * @param metricValue new value of the metric
146 * @throws MetricsException if the metricName or the type of the metricValue
147 * conflicts with the configuration
148 */
149 public void setMetric(String metricName, long metricValue) {
150 setAbsolute(metricName, Long.valueOf(metricValue));
151 }
152
153 /**
154 * Sets the named metric to the specified value.
155 *
156 * @param metricName name of the metric
157 * @param metricValue new value of the metric
158 * @throws MetricsException if the metricName or the type of the metricValue
159 * conflicts with the configuration
160 */
161 public void setMetric(String metricName, short metricValue) {
162 setAbsolute(metricName, Short.valueOf(metricValue));
163 }
164
165 /**
166 * Sets the named metric to the specified value.
167 *
168 * @param metricName name of the metric
169 * @param metricValue new value of the metric
170 * @throws MetricsException if the metricName or the type of the metricValue
171 * conflicts with the configuration
172 */
173 public void setMetric(String metricName, byte metricValue) {
174 setAbsolute(metricName, Byte.valueOf(metricValue));
175 }
176
177 /**
178 * Sets the named metric to the specified value.
179 *
180 * @param metricName name of the metric
181 * @param metricValue new value of the metric
182 * @throws MetricsException if the metricName or the type of the metricValue
183 * conflicts with the configuration
184 */
185 public void setMetric(String metricName, float metricValue) {
186 setAbsolute(metricName, new Float(metricValue));
187 }
188
189 /**
190 * Increments the named metric by the specified value.
191 *
192 * @param metricName name of the metric
193 * @param metricValue incremental value
194 * @throws MetricsException if the metricName or the type of the metricValue
195 * conflicts with the configuration
196 */
197 public void incrMetric(String metricName, int metricValue) {
198 setIncrement(metricName, Integer.valueOf(metricValue));
199 }
200
201 /**
202 * Increments the named metric by the specified value.
203 *
204 * @param metricName name of the metric
205 * @param metricValue incremental value
206 * @throws MetricsException if the metricName or the type of the metricValue
207 * conflicts with the configuration
208 */
209 public void incrMetric(String metricName, long metricValue) {
210 setIncrement(metricName, Long.valueOf(metricValue));
211 }
212
213 /**
214 * Increments the named metric by the specified value.
215 *
216 * @param metricName name of the metric
217 * @param metricValue incremental value
218 * @throws MetricsException if the metricName or the type of the metricValue
219 * conflicts with the configuration
220 */
221 public void incrMetric(String metricName, short metricValue) {
222 setIncrement(metricName, Short.valueOf(metricValue));
223 }
224
225 /**
226 * Increments the named metric by the specified value.
227 *
228 * @param metricName name of the metric
229 * @param metricValue incremental value
230 * @throws MetricsException if the metricName or the type of the metricValue
231 * conflicts with the configuration
232 */
233 public void incrMetric(String metricName, byte metricValue) {
234 setIncrement(metricName, Byte.valueOf(metricValue));
235 }
236
237 /**
238 * Increments the named metric by the specified value.
239 *
240 * @param metricName name of the metric
241 * @param metricValue incremental value
242 * @throws MetricsException if the metricName or the type of the metricValue
243 * conflicts with the configuration
244 */
245 public void incrMetric(String metricName, float metricValue) {
246 setIncrement(metricName, new Float(metricValue));
247 }
248
249 private void setAbsolute(String metricName, Number metricValue) {
250 metricTable.put(metricName, new MetricValue(metricValue, MetricValue.ABSOLUTE));
251 }
252
253 private void setIncrement(String metricName, Number metricValue) {
254 metricTable.put(metricName, new MetricValue(metricValue, MetricValue.INCREMENT));
255 }
256
257 /**
258 * Updates the table of buffered data which is to be sent periodically.
259 * If the tag values match an existing row, that row is updated;
260 * otherwise, a new row is added.
261 */
262 public void update() {
263 context.update(this);
264 }
265
266 /**
267 * Removes the row, if it exists, in the buffered data table having tags
268 * that equal the tags that have been set on this record.
269 */
270 public void remove() {
271 context.remove(this);
272 }
273
274 TagMap getTagTable() {
275 return tagTable;
276 }
277
278 Map<String, MetricValue> getMetricTable() {
279 return metricTable;
280 }
281 }