diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobStatus.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobStatus.java index 3ec54516..c5cf95f3 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobStatus.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobStatus.java @@ -31,6 +31,7 @@ import java.io.Serializable; *******************************************************************************/ public class AsyncJobStatus implements Serializable { + private String jobName; private AsyncJobState state; private String message; private Integer current; @@ -187,4 +188,36 @@ public class AsyncJobStatus implements Serializable { this.cancelRequested = cancelRequested; } + + + + /******************************************************************************* + ** Getter for jobName + *******************************************************************************/ + public String getJobName() + { + return (this.jobName); + } + + + + /******************************************************************************* + ** Setter for jobName + *******************************************************************************/ + public void setJobName(String jobName) + { + this.jobName = jobName; + } + + + + /******************************************************************************* + ** Fluent setter for jobName + *******************************************************************************/ + public AsyncJobStatus withJobName(String jobName) + { + this.jobName = jobName; + return (this); + } + } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/NonPersistedAsyncJobCallback.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/NonPersistedAsyncJobCallback.java new file mode 100644 index 00000000..2373dc79 --- /dev/null +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/NonPersistedAsyncJobCallback.java @@ -0,0 +1,62 @@ +/* + * QQQ - Low-code Application Framework for Engineers. + * Copyright (C) 2021-2024. Kingsrook, LLC + * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States + * contact@kingsrook.com + * https://github.com/Kingsrook/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.kingsrook.qqq.backend.core.actions.async; + + +import java.util.UUID; + + +/******************************************************************************* + ** subclass designed to be used when we want there to be an instance (so code + ** doesn't have to all be null-tolerant), but there's no one who will ever be + ** reading the status data, so we don't need to store the object in a + ** state provider. + *******************************************************************************/ +public class NonPersistedAsyncJobCallback extends AsyncJobCallback +{ + private final AsyncJobStatus asyncJobStatus; + + + + /******************************************************************************* + ** + *******************************************************************************/ + public NonPersistedAsyncJobCallback(UUID jobUUID, AsyncJobStatus asyncJobStatus) + { + super(jobUUID, asyncJobStatus); + this.asyncJobStatus = asyncJobStatus; + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Override + protected void storeUpdatedStatus() + { + /////////////////////////////////////////////////////////////////////////////////////// + // noop - cf. base class, which writes to persistence here (our point is, we do not) // + /////////////////////////////////////////////////////////////////////////////////////// + } + +} diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/AbstractActionInput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/AbstractActionInput.java index 429948d4..3c98715b 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/AbstractActionInput.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/AbstractActionInput.java @@ -26,6 +26,7 @@ import java.util.UUID; import com.fasterxml.jackson.annotation.JsonIgnore; import com.kingsrook.qqq.backend.core.actions.async.AsyncJobCallback; import com.kingsrook.qqq.backend.core.actions.async.AsyncJobStatus; +import com.kingsrook.qqq.backend.core.actions.async.NonPersistedAsyncJobCallback; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.exceptions.QInstanceValidationException; import com.kingsrook.qqq.backend.core.instances.QInstanceValidator; @@ -139,7 +140,7 @@ public class AbstractActionInput //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // don't return null here (too easy to NPE). instead, if someone wants one of these, create one and give it to them. // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - asyncJobCallback = new AsyncJobCallback(UUID.randomUUID(), new AsyncJobStatus()); + asyncJobCallback = new NonPersistedAsyncJobCallback(UUID.randomUUID(), new AsyncJobStatus().withJobName(getClass().getSimpleName())); } return asyncJobCallback; } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/processes/RunBackendStepInput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/processes/RunBackendStepInput.java index 18d63f75..bfaad833 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/processes/RunBackendStepInput.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/processes/RunBackendStepInput.java @@ -30,6 +30,7 @@ import java.util.Map; import java.util.UUID; import com.kingsrook.qqq.backend.core.actions.async.AsyncJobCallback; import com.kingsrook.qqq.backend.core.actions.async.AsyncJobStatus; +import com.kingsrook.qqq.backend.core.actions.async.NonPersistedAsyncJobCallback; import com.kingsrook.qqq.backend.core.actions.processes.QProcessCallback; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.model.actions.AbstractActionInput; @@ -450,7 +451,7 @@ public class RunBackendStepInput extends AbstractActionInput ///////////////////////////////////////////////////////////////////////// // avoid NPE in case we didn't have one of these! create a new one... // ///////////////////////////////////////////////////////////////////////// - asyncJobCallback = new AsyncJobCallback(UUID.randomUUID(), new AsyncJobStatus()); + asyncJobCallback = new NonPersistedAsyncJobCallback(UUID.randomUUID(), new AsyncJobStatus().withJobName(processName + "." + stepName)); } return (asyncJobCallback); } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/InMemoryStateProvider.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/InMemoryStateProvider.java index e63a43ad..52d756ec 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/InMemoryStateProvider.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/InMemoryStateProvider.java @@ -46,8 +46,8 @@ public class InMemoryStateProvider implements StateProviderInterface private final Map map; - private static int jobPeriodSeconds = 60 * 60; // 1 hour - private static int cleanHours = 6; + private static int jobPeriodSeconds = 60 * 30; // 30 minutes + private static int cleanHours = 5; private static int jobInitialDelay = 60 * 60 * cleanHours; @@ -151,6 +151,18 @@ public class InMemoryStateProvider implements StateProviderInterface + /******************************************************************************* + ** Get the current status + * + *******************************************************************************/ + @Override + public String status() + { + return ("InMemoryStateProvider map size: " + map.size()); + } + + + /******************************************************************************* ** Clean entries that started before the given Instant * diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/StateProviderInterface.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/StateProviderInterface.java index c08558d5..43794edd 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/StateProviderInterface.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/StateProviderInterface.java @@ -59,6 +59,11 @@ public interface StateProviderInterface *******************************************************************************/ void remove(AbstractStateKey key); + /******************************************************************************* + ** Get the current status + *******************************************************************************/ + String status(); + /******************************************************************************* ** Clean entries that started before the given Instant *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/TempFileStateProvider.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/TempFileStateProvider.java index 77944945..7f091f1a 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/TempFileStateProvider.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/state/TempFileStateProvider.java @@ -128,6 +128,18 @@ public class TempFileStateProvider implements StateProviderInterface + /******************************************************************************* + ** Get the current status + * + *******************************************************************************/ + @Override + public String status() + { + return ("TempFileStateProvider status not supported"); + } + + + /******************************************************************************* ** Clean entries that started before the given Instant *******************************************************************************/