diff options
Diffstat (limited to 'framework/src/onos/utils/misc/src/main/java/org/onlab/metrics/EventMetric.java')
-rw-r--r-- | framework/src/onos/utils/misc/src/main/java/org/onlab/metrics/EventMetric.java | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/metrics/EventMetric.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/metrics/EventMetric.java new file mode 100644 index 00000000..d20ca53f --- /dev/null +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/metrics/EventMetric.java @@ -0,0 +1,118 @@ +/* + * Copyright 2014 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onlab.metrics; + +import com.codahale.metrics.Gauge; +import com.codahale.metrics.Meter; + +/** + * Metric measurements for events. + */ +public class EventMetric { + private static final String GAUGE_TIMESTAMP_NAME = "Timestamp.EpochMs"; + private static final String METER_RATE_NAME = "Rate"; + + private final MetricsService metricsService; + private final String componentName; + private final String featureName; + + private MetricsComponent metricsComponent; + private MetricsFeature metricsFeature; + + private volatile long lastEventTimestampEpochMs = 0; + private Gauge<Long> lastEventTimestampGauge; + private Meter eventRateMeter; + + /** + * Constructor. + * + * @param metricsService the Metrics Service to use for Metrics + * registration and deregistration + * @param componentName the Metrics Component Name to use for Metrics + * registration and deregistration + * @param featureName the Metrics Feature Name to use for Metrics + * registration and deregistration + */ + public EventMetric(MetricsService metricsService, String componentName, + String featureName) { + this.metricsService = metricsService; + this.componentName = componentName; + this.featureName = featureName; + } + + /** + * Registers the metrics. + */ + public void registerMetrics() { + metricsComponent = metricsService.registerComponent(componentName); + metricsFeature = metricsComponent.registerFeature(featureName); + + lastEventTimestampEpochMs = 0; + lastEventTimestampGauge = + metricsService.registerMetric(metricsComponent, + metricsFeature, + GAUGE_TIMESTAMP_NAME, + new Gauge<Long>() { + @Override + public Long getValue() { + return lastEventTimestampEpochMs; + } + }); + + eventRateMeter = metricsService.createMeter(metricsComponent, + metricsFeature, + METER_RATE_NAME); + } + + /** + * Removes the metrics. + */ + public void removeMetrics() { + lastEventTimestampEpochMs = 0; + metricsService.removeMetric(metricsComponent, + metricsFeature, + GAUGE_TIMESTAMP_NAME); + metricsService.removeMetric(metricsComponent, + metricsFeature, + METER_RATE_NAME); + } + + /** + * Updates the metric measurements for a single event. + */ + public void eventReceived() { + lastEventTimestampEpochMs = System.currentTimeMillis(); + eventRateMeter.mark(1); + } + + /** + * Gets the last event timestamp Gauge (ms from the Epoch). + * + * @return the last event timestamp Gauge (ms from the Epoch) + */ + public Gauge<Long> lastEventTimestampGauge() { + return lastEventTimestampGauge; + } + + /** + * Gets the event rate meter. + * + * @return the event rate meter + */ + public Meter eventRateMeter() { + return eventRateMeter; + } +} |