[DATALAB-2318] -- refactoring
diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/ChangePropertiesResource.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/ChangePropertiesResource.java
index 710e557..9589f27 100644
--- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/ChangePropertiesResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/ChangePropertiesResource.java
@@ -3,13 +3,15 @@
import com.epam.datalab.auth.UserInfo;
import com.epam.datalab.backendapi.ProvisioningServiceApplicationConfiguration;
import com.epam.datalab.backendapi.core.FileHandlerCallback;
+import com.epam.datalab.backendapi.core.response.folderlistener.FolderListener;
import com.epam.datalab.backendapi.core.response.folderlistener.FolderListenerExecutor;
+import com.epam.datalab.backendapi.core.response.folderlistener.WatchItem;
+import com.epam.datalab.backendapi.core.response.folderlistener.WatchItemList;
import com.epam.datalab.backendapi.core.response.handlers.dao.CallbackHandlerDao;
import com.epam.datalab.properties.ChangePropertiesConst;
import com.epam.datalab.properties.DynamicChangeProperties;
import com.epam.datalab.properties.RestartForm;
import com.epam.datalab.properties.YmlDTO;
-import com.google.common.base.Strings;
import io.dropwizard.auth.Auth;
import lombok.extern.slf4j.Slf4j;
@@ -17,6 +19,13 @@
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.function.Predicate;
+
+import static com.epam.datalab.backendapi.core.response.folderlistener.WatchItem.ItemStatus.INPROGRESS;
+import static com.epam.datalab.backendapi.core.response.folderlistener.WatchItem.ItemStatus.WAIT_FOR_FILE;
@Path("config")
@Produces(MediaType.APPLICATION_JSON)
@@ -25,18 +34,13 @@
public class ChangePropertiesResource implements ChangePropertiesConst {
private final DynamicChangeProperties dynamicChangeProperties;
- private final FolderListenerExecutor folderListenerExecutor;
- private final FileHandlerCallback fileHandlerCallback;
- private final CallbackHandlerDao handlerDao;
+ private final List<WatchItem.ItemStatus> inProgressStatuses = Arrays.asList(INPROGRESS, WAIT_FOR_FILE);
@Inject
public ChangePropertiesResource(DynamicChangeProperties dynamicChangeProperties,
- ProvisioningServiceApplicationConfiguration conf, FolderListenerExecutor folderListenerExecutor, FileHandlerCallback fileHandlerCallback, CallbackHandlerDao handlerDao) {
+ ProvisioningServiceApplicationConfiguration conf, FolderListenerExecutor folderListenerExecutor, FileHandlerCallback fileHandlerCallback, CallbackHandlerDao handlerDao, FolderListener listener) {
this.dynamicChangeProperties = dynamicChangeProperties;
- this.folderListenerExecutor = folderListenerExecutor;
- this.fileHandlerCallback = fileHandlerCallback;
- this.handlerDao = handlerDao;
}
@GET
@@ -80,11 +84,29 @@
}
private void checkResponseFiles(RestartForm restartForm) {
- boolean isNoneFinishedRequests = handlerDao.findAll().stream()
- .anyMatch(x -> Strings.isNullOrEmpty(x.getHandler().getUUID()));
+ List<WatchItem> watchItems = new ArrayList<>();
+ //or check getFileHandlerCallback().getId()/uuid
+ boolean isNoneFinishedRequests = FolderListener.getListeners().stream()
+ .filter(FolderListener::isAlive)
+ .filter(FolderListener::isListen)
+ .map(FolderListener::getItemList)
+ .anyMatch(findAnyInStatus(watchItems, inProgressStatuses));
if (isNoneFinishedRequests) {
- log.info("Found unchecked response file from docker. Provisioning restart is denied");
+ log.info("Found unchecked response file from docker : {}." +
+ " Provisioning restart is denied", watchItems);
restartForm.setProvserv(false);
}
}
+
+ private Predicate<WatchItemList> findAnyInStatus(List<WatchItem> watchItems,
+ List<WatchItem.ItemStatus> statuses) {
+ return watchItemList -> {
+ for (int i = 0; i < watchItemList.size(); i++) {
+ if (statuses.contains(watchItemList.get(i).getStatus())) {
+ watchItems.add(watchItemList.get(i));
+ }
+ }
+ return !watchItems.isEmpty();
+ };
+ }
}
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/schedulers/CheckInfrastructureStatusScheduler.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/schedulers/CheckInfrastructureStatusScheduler.java
index 0961b68..0bc5ec0 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/schedulers/CheckInfrastructureStatusScheduler.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/schedulers/CheckInfrastructureStatusScheduler.java
@@ -50,7 +50,7 @@
public class CheckInfrastructureStatusScheduler implements Job {
private static final List<UserInstanceStatus> statusesToCheck =
- Arrays.asList(RUNNING, STARTING, CREATING, CREATING_IMAGE, CREATED,
+ Arrays.asList(RUNNING, STARTING, CREATING, CREATING_IMAGE,
CONFIGURING, STOPPING, RECONFIGURING, STOPPED, TERMINATING);
private final InfrastructureInfoService infrastructureInfoService;