From 201359918b75f5a9445c291b9d8a2cba83bacd46 Mon Sep 17 00:00:00 2001 From: Albert Louis Rossi Date: Thu, 5 Oct 2023 07:20:30 -0500 Subject: [PATCH] dcache-bulk: add count and clear to archive admin commands Motivation: Convenience (not having to run query on the database interpreter). Modification: Add commands to display the count instead of the actual entry (as with requests and targets), and also a command to clear/delete from the archive table. Result: Friendlier admin interface. Target: master Request: 9.2 Patch: https://rb.dcache.org/r/14119/ Requires-notes: yes Acked-by: Lea --- .../services/bulk/BulkServiceCommands.java | 57 ++++++++++++++++++- .../jdbc/request/JdbcBulkArchiveDao.java | 4 ++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/modules/dcache-bulk/src/main/java/org/dcache/services/bulk/BulkServiceCommands.java b/modules/dcache-bulk/src/main/java/org/dcache/services/bulk/BulkServiceCommands.java index 6ec8bd1bcdc..b79931854e6 100644 --- a/modules/dcache-bulk/src/main/java/org/dcache/services/bulk/BulkServiceCommands.java +++ b/modules/dcache-bulk/src/main/java/org/dcache/services/bulk/BulkServiceCommands.java @@ -110,6 +110,7 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING import org.dcache.services.bulk.manager.BulkRequestManager; import org.dcache.services.bulk.store.BulkRequestStore; import org.dcache.services.bulk.store.BulkTargetStore; +import org.dcache.services.bulk.store.jdbc.request.JdbcArchivedBulkRequestCriterion; import org.dcache.services.bulk.store.jdbc.request.JdbcBulkArchiveDao; import org.dcache.services.bulk.store.jdbc.request.JdbcBulkRequestArchiver; import org.dcache.services.bulk.util.BulkRequestFilter; @@ -667,10 +668,53 @@ public String call() throws Exception { } } + @Command(name = "request archived clear", + hint = "Clear archived requests", + description = ".") + class RequestArchivedClear implements Callable { + @Option(name = "owner", + separator = ",", + usage = "The owner of the request.") + String[] owner; + + @Option(name = "before", + valueSpec = DATE_FORMAT, + usage = "Select requests with last modified date-time before date-time.") + String before; + + @Option(name = "after", + valueSpec = DATE_FORMAT, + usage = "Select requests with last modified date-time after date-time.") + String after; + + @Option(name = "activity", + separator = ",", + usage = "The request activity.") + String[] activity; + + @Option(name = "status", + valueSpec = "COMPLETED|CANCELLED", + separator = ",", + usage = "Status of the request.") + String[] status; + + @Override + public String call() throws Exception { + JdbcArchivedBulkRequestCriterion criterion = + archiveDao.where().modifiedBefore(getTimestamp(before)) + .modifiedAfter(getTimestamp(after)).owner(owner).activity(activity) + .status(status); + + int count = archiveDao.count(criterion); + executor.submit(() -> archiveDao.delete(criterion)); + return "Removing " + count + " archived requests."; + } + } + @Command(name = "request archived ls", hint = "List archived requests", description = "Display the uid, owner, last modified, activity and status for" - + " the archived request.") + + " the archived request, or just counts if option is true.") class RequestArchivedLs implements Callable { @Option(name = "owner", @@ -699,12 +743,23 @@ class RequestArchivedLs implements Callable { usage = "Status of the request.") String[] status; + @Option(name = "count", + usage = "return only the count of the matching requests.") + Boolean count = false; + @Option(name = "limit", usage = "Return maximum of this many entries.") Integer limit = 5000; @Override public String call() throws Exception { + if (count) { + return String.valueOf( + archiveDao.count(archiveDao.where().modifiedBefore(getTimestamp(before)) + .modifiedAfter(getTimestamp(after)).owner(owner).activity(activity) + .status(status))); + } + List list = archiveDao.list(archiveDao.where().modifiedBefore(getTimestamp(before)) .modifiedAfter(getTimestamp(after)).owner(owner).activity(activity) diff --git a/modules/dcache-bulk/src/main/java/org/dcache/services/bulk/store/jdbc/request/JdbcBulkArchiveDao.java b/modules/dcache-bulk/src/main/java/org/dcache/services/bulk/store/jdbc/request/JdbcBulkArchiveDao.java index e34a4fbdb8f..e7d53d38e90 100644 --- a/modules/dcache-bulk/src/main/java/org/dcache/services/bulk/store/jdbc/request/JdbcBulkArchiveDao.java +++ b/modules/dcache-bulk/src/main/java/org/dcache/services/bulk/store/jdbc/request/JdbcBulkArchiveDao.java @@ -132,6 +132,10 @@ public int count(JdbcArchivedBulkRequestCriterion criterion) { return utils.count(criterion, TABLE_NAME, this); } + public int delete(JdbcArchivedBulkRequestCriterion criterion) { + return utils.delete(criterion, TABLE_NAME, this); + } + public List get(JdbcArchivedBulkRequestCriterion criterion, int limit) { return utils.get(SELECT_INFO, criterion, limit, TABLE_NAME, this, infoRowMapper); }