blob: db3b5ccac4b27a46809e5af5c73b473dd4f0f822 [file] [log] [blame]
/**
* 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.apache.aurora.common.stats;
import java.util.Collection;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Supplier;
/**
* A minimal interface to a Stats repository.
*
* @author John Sirois
*/
public interface StatsProvider {
/**
* Creates and exports a counter for tracking.
*
* @param name The name to export the stat with.
* @return A reference to the counter that will be tracked for incrementing.
*/
AtomicLong makeCounter(String name);
/**
* Exports a read-only value for tracking.
*
* @param name The name of the variable to export.
* @param gauge The supplier of the instantaneous values to export.
* @param <T> The type of number exported by the variable.
* @return A reference to the stat that was stored.
*/
<T extends Number> Stat<T> makeGauge(String name, Supplier<T> gauge);
/**
* Exports a metric that tracks the size of a collection.
*
* @param name Name of the stat to export.
* @param collection Collection whose size should be tracked.
*/
default void exportSize(String name, final Collection<?> collection) {
makeGauge(name, (Supplier<Number>) collection::size);
}
/**
* Gets a stats provider that does not track stats in an internal time series repository.
* The stored variables will only be available as instantaneous values.
*
* @return A stats provider that creates untracked stats.
*/
StatsProvider untracked();
/**
* A stat for tracking service requests.
*/
interface RequestTimer {
/**
* Accumulates a request and its latency.
*
* @param latencyMicros The elapsed time required to complete the request.
*/
void requestComplete(long latencyMicros);
}
/**
* Creates and exports a sets of stats that allows for typical rROC request tracking.
*
* @param name The name to export the stat with.
* @return A reference to the request timer that can be used to track RPCs.
*/
RequestTimer makeRequestTimer(String name);
}