Yuta HIGUCHI
Committed by Gerrit Code Review

Slice out MetricsHelper/Util

Change-Id: Ic6848f47d38550b78ebd6cdcf414305e54408882
/*
* 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.onos.core;
import org.onlab.metrics.MetricsComponent;
import org.onlab.metrics.MetricsFeature;
import org.onlab.metrics.MetricsService;
import com.codahale.metrics.Timer;
/**
* Collection of utility methods used for providing Metrics.
*/
public interface MetricsHelper {
/**
* Returns MetricService instance.
*
* @return MetricService instance
*/
abstract MetricsService metricsService();
/**
* Creates a Timer instance with given name.
*
* @param component component name
* @param feature feature name
* @param name timer name
* @return Timer instance
*/
default Timer createTimer(String component, String feature, String name) {
final MetricsService metricsService = metricsService();
if (metricsService != null) {
MetricsComponent c = metricsService.registerComponent(component);
MetricsFeature f = c.registerFeature(feature);
return metricsService.createTimer(c, f, name);
}
return null;
}
}
......@@ -17,6 +17,7 @@ package org.onlab.onos.cluster.impl;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
import static org.onlab.metrics.MetricsUtil.*;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
......@@ -27,8 +28,6 @@ import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onlab.metrics.MetricsComponent;
import org.onlab.metrics.MetricsFeature;
import org.onlab.metrics.MetricsService;
import org.onlab.onos.cluster.ClusterEvent;
import org.onlab.onos.cluster.ClusterEventListener;
......@@ -36,6 +35,7 @@ import org.onlab.onos.cluster.ClusterService;
import org.onlab.onos.cluster.ControllerNode;
import org.onlab.onos.cluster.NodeId;
import org.onlab.onos.cluster.RoleInfo;
import org.onlab.onos.core.MetricsHelper;
import org.onlab.onos.event.AbstractListenerRegistry;
import org.onlab.onos.event.EventDeliveryService;
import org.onlab.onos.mastership.MastershipAdminService;
......@@ -56,7 +56,8 @@ import com.codahale.metrics.Timer.Context;
@Component(immediate = true)
@Service
public class MastershipManager
implements MastershipService, MastershipAdminService, MastershipTermService {
implements MastershipService, MastershipAdminService, MastershipTermService,
MetricsHelper {
private static final String NODE_ID_NULL = "Node ID cannot be null";
private static final String DEVICE_ID_NULL = "Device ID cannot be null";
......@@ -192,7 +193,10 @@ public class MastershipManager
listenerRegistry.removeListener(listener);
}
// FIXME: provide wiring to allow events to be triggered by changes within the store
@Override
public MetricsService metricsService() {
return metricsService;
}
// Posts the specified event to the local event dispatcher.
private void post(MastershipEvent event) {
......@@ -201,30 +205,6 @@ public class MastershipManager
}
}
private Timer createTimer(String component, String feature, String name) {
if (metricsService != null) {
MetricsComponent c = metricsService.registerComponent(component);
MetricsFeature f = c.registerFeature(feature);
return metricsService.createTimer(c, f, name);
}
return null;
}
private static final Context startTimer(Timer timer) {
if (timer != null) {
return timer.time();
}
return null;
}
private static final void stopTimer(Context context) {
if (context != null) {
context.stop();
}
}
//callback for reacting to cluster events
private class InternalClusterEventListener implements ClusterEventListener {
......
/*
* 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.Timer;
import com.codahale.metrics.Timer.Context;
public final class MetricsUtil {
/**
* Starts the Metric Timer.
* <p>
* If the given timer was null, it will silently return null.
* </p>
*
* @param timer timer to start
* @return timing context, if timer was not null
*/
public static final Context startTimer(Timer timer) {
if (timer != null) {
return timer.time();
}
return null;
}
/**
* Stops the Metric Timer context.
* <p>
* If the given context was null, it will silently be ignored.
* </p>
*
* @param context timing context to stop, if not null.
*/
public static final void stopTimer(Context context) {
if (context != null) {
context.stop();
}
}
// avoid instantiation
private MetricsUtil() {}
}