/*
 * Copyright 2014-present 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 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 void stopTimer(Context context) {
        if (context != null) {
            context.stop();
        }
    }

    // avoid instantiation
    private MetricsUtil() {}
}
