Merge "Display Used Permits in addition to permits available" into stable-2.14
diff --git a/src/main/java/com/googlesource/gerrit/plugins/ratelimiter/ListCommand.java b/src/main/java/com/googlesource/gerrit/plugins/ratelimiter/ListCommand.java
index 9f6c946..3971039 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/ratelimiter/ListCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/ratelimiter/ListCommand.java
@@ -1,36 +1,5 @@
-// 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 static com.google.gerrit.sshd.CommandMetaData.Mode.MASTER_OR_SLAVE;
-import static com.googlesource.gerrit.plugins.ratelimiter.Module.UPLOAD_PACK_PER_HOUR;
-
-import com.google.common.cache.LoadingCache;
-import com.google.gerrit.common.data.GlobalCapability;
-import com.google.gerrit.extensions.annotations.RequiresCapability;
-import com.google.gerrit.sshd.AdminHighPriorityCommand;
-import com.google.gerrit.sshd.CommandMetaData;
-import com.google.gerrit.sshd.SshCommand;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-import java.time.Duration;
-import java.util.Map;
-import java.util.Map.Entry;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
-
@AdminHighPriorityCommand
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
@CommandMetaData(
@@ -38,23 +7,17 @@
description = "Display rate limits statistics",
runsAt = MASTER_OR_SLAVE)
final class ListCommand extends SshCommand {
- private static final String FORMAT = "%-26s %-17s %-19s %s";
+ private static final String FORMAT = "%-26s %-17s %-19s %-15s %s";
private static final String DASHED_LINE =
- "------------------------------------------------------------------------------";
-
+ "---------------------------------------------------------------------------------------------";
private final LoadingCache<String, RateLimiter> uploadPackPerHour;
private final UserResolver userResolver;
-
@Inject
ListCommand(
@Named(UPLOAD_PACK_PER_HOUR) LoadingCache<String, RateLimiter> uploadPackPerHour,
UserResolver userResolver) {
this.uploadPackPerHour = uploadPackPerHour;
this.userResolver = userResolver;
- }
-
- @Override
- protected void run() throws UnloggedFailure {
try {
stdout.println(DASHED_LINE);
stdout.println("* " + UPLOAD_PACK_PER_HOUR + " *");
@@ -65,6 +28,7 @@
"Account Id/IP (username)",
"Permits Per Hour",
"Available Permits",
+ "Used Permits",
"Replenish in"));
stdout.println(DASHED_LINE);
uploadPackPerHour.asMap().entrySet().stream()
@@ -75,7 +39,6 @@
throw die(e);
}
}
-
private void printEntry(Entry<String, RateLimiter> entry) {
stdout.println(
String.format(
@@ -83,13 +46,12 @@
getDisplayValue(entry.getKey()),
permits(entry.getValue().permitsPerHour()),
permits(entry.getValue().availablePermits()),
+ permits(entry.getValue().usedPermits()),
Duration.ofSeconds(entry.getValue().remainingTime(TimeUnit.SECONDS))));
}
-
private String permits(int value) {
return value == Integer.MAX_VALUE ? "unlimited" : Integer.toString(value);
}
-
private String getDisplayValue(String key) {
Optional<String> currentUser = userResolver.getUserName(key);
return currentUser.map(name -> key + " (" + name + ")").orElse(key);
diff --git a/src/main/resources/Documentation/cmd-list.md b/src/main/resources/Documentation/cmd-list.md
index d541cfa..c5116a7 100644
--- a/src/main/resources/Documentation/cmd-list.md
+++ b/src/main/resources/Documentation/cmd-list.md
@@ -1,36 +1,16 @@
-@PLUGIN@ list
-=================
-
-NAME
-----
-@PLUGIN@ list display rate limit statistics
-
-SYNOPSIS
---------
-> ssh -p <port> <host> @PLUGIN@ list
-
-DESCRIPTION
------------
-Displays rate limit statistics: account id (or IP if request is anonymous),
-permits per hour, remaining permits and when they will be replenished.
-
-The time before permits are replenished is represented using ISO-8601 seconds
based representation, such as PT59M30S (59 minutes and 30 seconds).
-
ACCESS
------
Gerrit Administrators only.
-
EXAMPLES
--------
-
> $ ssh -p @SSH_PORT@ @SSH_HOST@ @PLUGIN@ list
-> ------------------------------------------------------------------------------
+> ---------------------------------------------------------------------------------------------
> * upload_pack_per_hour *
-> ------------------------------------------------------------------------------
-> Account Id (or IP) Permits Per Hour Available Permits Replenish in
-> ------------------------------------------------------------------------------
-> 1000001 unlimited unlimited PT0S
-> 1000002 1000 999 PT59M30S
-> 127.0.0.1 1000 123 PT10M26S
-> ------------------------------------------------------------------------------
+> ---------------------------------------------------------------------------------------------
+> Account Id/IP (username) Permits Per Hour Available Permits Used Permits Replenish in
+> ---------------------------------------------------------------------------------------------
+> 1000000 (admin) unlimited unlimited 0 PT0S
+> 1000001 (test_user) 1000 999 1 PT59M30S
+> 127.0.0.1 1000 123 877 PT10M26S
+> ---------------------------------------------------------------------------------------------