blob: 36064e4ff88279f0cf53f38a239b2dc7fcaefc5a [file] [log] [blame]
pankaj390abbc2014-10-01 17:01:05 -07001package org.onlab.metrics;
2
3import java.util.concurrent.ConcurrentHashMap;
4import java.util.concurrent.ConcurrentMap;
5
6/**
7 * Components to register for metrics.
8 */
9public class MetricsComponent implements MetricsComponentRegistry {
10 private final String name;
11
12 /**
13 * Registry to hold the Features defined in this Component.
14 */
15 private final ConcurrentMap<String, MetricsFeature> featuresRegistry =
16 new ConcurrentHashMap<>();
17
18 /**
19 * Constructs a component from a name.
20 *
21 * @param newName name of the component
22 */
23 MetricsComponent(final String newName) {
24 name = newName;
25 }
26
Pavlin Radoslavovdf042bd2014-10-21 21:46:46 -070027 @Override
28 public String getName() {
pankaj390abbc2014-10-01 17:01:05 -070029 return name;
30 }
31
Pavlin Radoslavovdf042bd2014-10-21 21:46:46 -070032 @Override
33 public MetricsFeature registerFeature(final String featureName) {
pankaj390abbc2014-10-01 17:01:05 -070034 MetricsFeature feature = featuresRegistry.get(featureName);
35 if (feature == null) {
Pavlin Radoslavovdf042bd2014-10-21 21:46:46 -070036 final MetricsFeature createdFeature =
37 new MetricsFeature(featureName);
pankaj390abbc2014-10-01 17:01:05 -070038 feature = featuresRegistry.putIfAbsent(featureName, createdFeature);
39 if (feature == null) {
40 feature = createdFeature;
41 }
42 }
43 return feature;
44 }
45}