diff --git a/code/services-core/control-service/src/main/java/nu/marginalia/control/node/model/FileStorageWithActions.java b/code/services-core/control-service/src/main/java/nu/marginalia/control/node/model/FileStorageWithActions.java index b57bd5c0..534fe1f0 100644 --- a/code/services-core/control-service/src/main/java/nu/marginalia/control/node/model/FileStorageWithActions.java +++ b/code/services-core/control-service/src/main/java/nu/marginalia/control/node/model/FileStorageWithActions.java @@ -2,6 +2,7 @@ package nu.marginalia.control.node.model; import nu.marginalia.storage.model.FileStorage; import nu.marginalia.storage.model.FileStorageBaseType; +import nu.marginalia.storage.model.FileStorageState; import nu.marginalia.storage.model.FileStorageType; import java.nio.file.Path; @@ -12,6 +13,9 @@ public record FileStorageWithActions(FileStorage storage) { public boolean isCrawlable() { return storage.type() == FileStorageType.CRAWL_SPEC; } + public boolean isStatusNew() { + return storage.state() == FileStorageState.NEW; + } public boolean isAtagsExportable() { return storage.type() == FileStorageType.CRAWL_DATA; } diff --git a/code/services-core/control-service/src/main/java/nu/marginalia/control/node/svc/ControlNodeService.java b/code/services-core/control-service/src/main/java/nu/marginalia/control/node/svc/ControlNodeService.java index fcc396d3..d848f00b 100644 --- a/code/services-core/control-service/src/main/java/nu/marginalia/control/node/svc/ControlNodeService.java +++ b/code/services-core/control-service/src/main/java/nu/marginalia/control/node/svc/ControlNodeService.java @@ -108,6 +108,9 @@ public class ControlNodeService { Spark.post("/public/nodes/:id/storage/crawl/:fid", this::triggerCrawl, redirectControl.renderRedirectAcknowledgement("Crawling", "..") ); + Spark.post("/public/nodes/:id/storage/reset-state/:fid", this::resetState, + redirectControl.renderRedirectAcknowledgement("Restoring", "..") + ); Spark.post("/public/nodes/:id/storage/backup-restore/:fid", this::triggerRestoreBackup, redirectControl.renderRedirectAcknowledgement("Restoring", "..") ); @@ -121,6 +124,11 @@ public class ControlNodeService { Spark.post("/public/nodes/:id/fsms/:fsm/stop", this::stopFsm); } + private Object resetState(Request request, Response response) throws SQLException { + fileStorageService.setFileStorageState(FileStorageId.parse(request.params("fid")), FileStorageState.UNSET); + return ""; + } + private Object exportData(Request req, Response rsp) { executorClient.exportData(Context.fromRequest(req), Integer.parseInt(req.params("id"))); return ""; diff --git a/code/services-core/control-service/src/main/resources/templates/control/node/node-storage-details.hdb b/code/services-core/control-service/src/main/resources/templates/control/node/node-storage-details.hdb index d0f34bc6..a5792256 100644 --- a/code/services-core/control-service/src/main/resources/templates/control/node/node-storage-details.hdb +++ b/code/services-core/control-service/src/main/resources/templates/control/node/node-storage-details.hdb @@ -67,6 +67,14 @@ {{/if}} + {{#if isStatusNew}} +
+ + Remove 'NEW' state (use this if the generating process stopped) + + +
+ {{/if}} {{#if isAtagsExportable}}