diff --git a/code/api/executor-api/src/main/java/nu/marginalia/executor/client/ExecutorClient.java b/code/api/executor-api/src/main/java/nu/marginalia/executor/client/ExecutorClient.java index 4d6bae25..2f6abfd5 100644 --- a/code/api/executor-api/src/main/java/nu/marginalia/executor/client/ExecutorClient.java +++ b/code/api/executor-api/src/main/java/nu/marginalia/executor/client/ExecutorClient.java @@ -86,6 +86,13 @@ public class ExecutorClient extends AbstractDynamicClient { .blockingSubscribe(); } + public void exportAtags(Context ctx, int node, String fid) { + post(ctx, node, "/export/atags?fid="+fid, "").blockingSubscribe(); + } + public void exportData(Context ctx, int node) { + post(ctx, node, "/export/data", "").blockingSubscribe(); + } + public void restoreBackup(Context context, int node, String fid) { post(context, node, "/backup/" + fid + "/restore", "").blockingSubscribe(); } 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 4731d4bb..b57bd5c0 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 @@ -12,6 +12,9 @@ public record FileStorageWithActions(FileStorage storage) { public boolean isCrawlable() { return storage.type() == FileStorageType.CRAWL_SPEC; } + public boolean isAtagsExportable() { + return storage.type() == FileStorageType.CRAWL_DATA; + } public boolean isRecrawlable() { 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 29059b84..fcc396d3 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 @@ -111,11 +111,26 @@ public class ControlNodeService { Spark.post("/public/nodes/:id/storage/backup-restore/:fid", this::triggerRestoreBackup, redirectControl.renderRedirectAcknowledgement("Restoring", "..") ); - + Spark.post("/public/nodes/:id/actions/export-data", this::exportData, + redirectControl.renderRedirectAcknowledgement("Exporting", "../storage/exports") + ); + Spark.post("/public/nodes/:id/storage/:fid/export-atags", this::exportAtags, + redirectControl.renderRedirectAcknowledgement("Exporting", "../../storage/exports") + ); Spark.post("/public/nodes/:id/fsms/:fsm/start", this::startFsm); Spark.post("/public/nodes/:id/fsms/:fsm/stop", this::stopFsm); } + private Object exportData(Request req, Response rsp) { + executorClient.exportData(Context.fromRequest(req), Integer.parseInt(req.params("id"))); + return ""; + } + + private Object exportAtags(Request req, Response rsp) { + executorClient.exportAtags(Context.fromRequest(req), Integer.parseInt(req.params("id")), req.params("fid")); + return ""; + } + public Object startFsm(Request req, Response rsp) throws Exception { executorClient.startFsm(Context.fromRequest(req), Integer.parseInt(req.params("id")), req.params("fsm").toUpperCase()); diff --git a/code/services-core/control-service/src/main/resources/templates/control/node/node-actions.hdb b/code/services-core/control-service/src/main/resources/templates/control/node/node-actions.hdb index 2ba96bc0..f83b8034 100644 --- a/code/services-core/control-service/src/main/resources/templates/control/node/node-actions.hdb +++ b/code/services-core/control-service/src/main/resources/templates/control/node/node-actions.hdb @@ -288,6 +288,34 @@ + + +