blob: d5455b15a3868db0017e91a0185d43a720a15cfd [file] [log] [blame]
// Copyright (C) 2017 The Android Open Source Project
//
// 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 com.googlesource.gerrit.plugins.ratelimiter;
import java.util.Comparator;
import java.util.concurrent.TimeUnit;
interface RateLimiter extends Comparable<RateLimiter> {
@Override
public default int compareTo(RateLimiter other) {
return Comparator.comparing(RateLimiter::availablePermits).reversed().compare(this, other);
}
/** Returns number of permits allowed per hour. */
int permitsPerHour();
/**
* Acquire an available permit if any left.
*
* @return true if permit was acquired, otherwise false.
*/
boolean acquirePermit();
/** Returns the number of available permits left. */
int availablePermits();
/** Returns the number of permits used in the hour. */
int usedPermits();
/** Returns remaining time before available permits are replenished, in the given time unit. */
long remainingTime(TimeUnit timeUnit);
/** Replenish available permits to the number allowed per hour. */
void replenishPermits();
/** Return type of rate limiter * */
String getType();
/** Closes this RateLimiter, relinquishing any underlying resources. */
void close();
}