package org.apache.blur.mapreduce.lib; /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with this * work for additional information regarding copyright ownership. The ASF * licenses this file to You 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. */ import java.util.concurrent.TimeUnit; import org.apache.hadoop.mapreduce.Counter; /** * This turns a standard hadoop counter into a rate counter. */ public class RateCounter { private final Counter _counter; private final long _reportTime; private long _lastReport; private long _count = 0; public RateCounter(Counter counter) { _counter = counter; _lastReport = System.nanoTime(); _reportTime = TimeUnit.SECONDS.toNanos(5); } public void mark() { mark(1l); } public void mark(long n) { long now = System.nanoTime(); if (_lastReport + _reportTime < now) { long seconds = TimeUnit.NANOSECONDS.toSeconds(now - _lastReport); long rate = _count / seconds; _counter.setValue(rate); _lastReport = System.nanoTime(); _count = 0; } _count += n; } public void close() { _counter.setValue(0); } }