Merge remote-tracking branch 'origin/DATALAB-1895' into DATALAB-1895
# Conflicts:
# services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ExploratoryDAO.java
# services/self-service/src/main/java/com/epam/datalab/backendapi/schedulers/CheckInfrastructureStatusScheduler.java
# services/self-service/src/main/java/com/epam/datalab/backendapi/service/InfrastructureInfoService.java
# services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/InfrastructureInfoServiceImpl.java
diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ResourcesStatusCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ResourcesStatusCallbackHandler.java
index 53e8d8a..9ca477b 100644
--- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ResourcesStatusCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/core/response/handlers/ResourcesStatusCallbackHandler.java
@@ -41,16 +41,14 @@
@Slf4j
public class ResourcesStatusCallbackHandler extends ResourceCallbackHandler<EnvStatusDTO> {
+ private EnvResourceList datalabResourceList;
+
@JsonCreator
public ResourcesStatusCallbackHandler(
- @JacksonInject RESTService selfService, @JsonProperty("action") DockerAction
- action, @JsonProperty("uuid") String uuid, @JsonProperty("user") String user) {
+ @JacksonInject RESTService selfService, @JsonProperty("action") DockerAction action, @JsonProperty("uuid") String uuid,
+ @JsonProperty("user") String user, EnvResourceList resourceList) {
super(selfService, user, uuid, action);
- }
-
- @Override
- protected String getCallbackURI() {
- return INFRASTRUCTURE + STATUS_URI;
+ this.datalabResourceList = resourceList;
}
@Override
@@ -59,15 +57,15 @@
return baseStatus;
}
- EnvResourceList resourceList;
+ EnvResourceList cloudResourceList;
try {
- resourceList = mapper.readValue(resultNode.toString(), EnvResourceList.class);
+ cloudResourceList = mapper.readValue(resultNode.toString(), EnvResourceList.class);
} catch (IOException e) {
- throw new DatalabException("Docker response for UUID " + getUUID() + " not valid: " + e.getLocalizedMessage()
- , e);
+ throw new DatalabException("Docker response for UUID " + getUUID() + " not valid: " + e.getLocalizedMessage(), e);
}
- baseStatus.withResourceList(resourceList)
+ baseStatus
+ .withResourceList(cloudResourceList)
.withUptime(Date.from(Instant.now()));
log.trace("Inner status {}", baseStatus);
@@ -76,17 +74,22 @@
}
@Override
- public boolean handle(String fileName, byte[] content) throws Exception {
+ public boolean handle(String fileName, byte[] content) {
try {
return super.handle(fileName, content);
} catch (Exception e) {
- log.warn("Could not retrive the status of resources for UUID {} and user {}: {}",
+ log.warn("Could not retrieve the status of resources for UUID {} and user {}: {}",
getUUID(), getUser(), e.getLocalizedMessage(), e);
}
return true; // Always necessary return true for status response
}
@Override
+ protected String getCallbackURI() {
+ return INFRASTRUCTURE + STATUS_URI;
+ }
+
+ @Override
public void handleError(String errorMessage) {
// Nothing action for status response
}
diff --git a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/base/InfrastructureService.java b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/base/InfrastructureService.java
index e9c29ce..6a2d870 100644
--- a/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/base/InfrastructureService.java
+++ b/services/provisioning-service/src/main/java/com/epam/datalab/backendapi/resources/base/InfrastructureService.java
@@ -33,6 +33,7 @@
import com.epam.datalab.cloud.CloudProvider;
import com.epam.datalab.dto.UserEnvironmentResources;
import com.epam.datalab.dto.status.EnvResource;
+import com.epam.datalab.dto.status.EnvResourceList;
import com.epam.datalab.exceptions.DatalabException;
import com.epam.datalab.process.model.ProcessInfo;
import com.epam.datalab.rest.client.RESTService;
@@ -68,7 +69,7 @@
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getRequestEnvStatusTimeout(),
- getFileHandlerCallback(dockerAction, uuid, iamUser));
+ getFileHandlerCallback(dockerAction, uuid, iamUser, dto.getResourceList()));
try {
removeResourcesWithRunningContainers(username, dto);
@@ -143,8 +144,8 @@
return runningContainerNames.stream().noneMatch(container -> container.matches(regex));
}
- protected FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, String user) {
- return new ResourcesStatusCallbackHandler(selfService, action, uuid, user);
+ protected FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, String user, EnvResourceList resourceList) {
+ return new ResourcesStatusCallbackHandler(selfService, action, uuid, user, resourceList);
}
private String nameContainer(String user, DockerAction action, String name) {
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ExploratoryDAO.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ExploratoryDAO.java
index 2bb60c7..0657107 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ExploratoryDAO.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ExploratoryDAO.java
@@ -208,27 +208,27 @@
public List<UserInstanceDTO> fetchProjectExploratoriesWhereStatusNotIn(String project, String endpoint,
UserInstanceStatus... statuses) {
- final List<String> statusList = statusList(statuses);
- return getUserInstances(
- and(
- eq(PROJECT, project),
- eq(ENDPOINT, endpoint),
- not(in(STATUS, statusList))
- ),
- false);
+ final List<String> statusList = statusList(statuses);
+ return getUserInstances(
+ and(
+ eq(PROJECT, project),
+ eq(ENDPOINT, endpoint),
+ not(in(STATUS, statusList))
+ ),
+ false);
}
- public List<UserInstanceDTO> fetchExploratoriesByEndpointWhereStatusIn(List<String> endpoint, List<UserInstanceStatus> statuses,
- boolean computationalFieldsRequired) {
- final List<String> exploratoryStatusList = statusList(statuses);
+ public List<UserInstanceDTO> fetchExploratoriesByEndpointWhereStatusIn(List<String> endpoints, List<UserInstanceStatus> statuses,
+ boolean computationalFieldsRequired) {
+ final List<String> exploratoryStatusList = statusList(statuses);
- return getUserInstances(
- and(
- eq(ENDPOINT, endpoint),
- in(STATUS, exploratoryStatusList)
- ),
- computationalFieldsRequired);
- }
+ return getUserInstances(
+ and(
+ in(ENDPOINT, endpoints),
+ in(STATUS, exploratoryStatusList)
+ ),
+ computationalFieldsRequired);
+ }
public List<UserInstanceDTO> fetchExploratoriesByEndpointWhereStatusNotIn(String endpoint, List<UserInstanceStatus> statuses,
boolean computationalFieldsRequired) {
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 da0f350..55caf85 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
@@ -39,6 +39,7 @@
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -76,42 +77,41 @@
List<UserInstanceDTO> userInstanceDTOS = exploratoryDAO.fetchExploratoriesByEndpointWhereStatusIn(activeEndpoints, statusesToCheck, Boolean.TRUE);
- Map<String, List<EnvResource>> hostInstanceIds = userInstanceDTOS
+ Map<String, List<EnvResource>> exploratoryAndSparkInstances = userInstanceDTOS
.stream()
- .collect(Collectors.toMap(UserInstanceDTO::getEndpoint, this::getHostInstanceIds));
+ .collect(Collectors.toMap(UserInstanceDTO::getEndpoint, this::getExploratoryAndSparkInstances));
- activeEndpoints.forEach(e ->
- hostInstanceIds.merge(e, getEdgeInstanceIds(e), (v1, v2) ->
- Stream.of(v1, v2)
- .flatMap(Collection::stream)
- .collect(Collectors.toList())
- )
+ activeEndpoints.forEach(e -> {
+ List<EnvResource> hostInstances = Stream.of(getEdgeInstances(e), exploratoryAndSparkInstances.get(e))
+ .flatMap(Collection::stream)
+ .collect(Collectors.toList());
+ infrastructureInfoService.updateInfrastructureStatuses(serviceUser, e, hostInstances, Collections.emptyList());
+ }
);
-
- hostInstanceIds.forEach((endpoint, ids) ->
- infrastructureInfoService.updateInfrastructureStatuses(serviceUser, endpoint, ids));
}
- private List<EnvResource> getHostInstanceIds(UserInstanceDTO userInstanceDTO) {
- List<EnvResource> instanceIds = userInstanceDTO.getResources()
+ private List<EnvResource> getExploratoryAndSparkInstances(UserInstanceDTO userInstanceDTO) {
+ List<EnvResource> instances = userInstanceDTO.getResources()
.stream()
.filter(c -> DataEngineType.SPARK_STANDALONE == DataEngineType.fromDockerImageName(c.getImageName()))
.filter(c -> statusesToCheck.contains(UserInstanceStatus.of(c.getStatus())))
.map(r -> new EnvResource()
.withId(r.getInstanceId())
.withName(r.getComputationalName())
+ .withStatus(r.getStatus())
.withResourceType(ResourceType.COMPUTATIONAL))
.collect(Collectors.toList());
- instanceIds.add(new EnvResource()
+ instances.add(new EnvResource()
.withId(userInstanceDTO.getInstanceId())
.withName(userInstanceDTO.getExploratoryName())
+ .withStatus(userInstanceDTO.getStatus())
.withResourceType(ResourceType.EXPLORATORY));
- return instanceIds;
+ return instances;
}
- private List<EnvResource> getEdgeInstanceIds(String endpoint) {
+ private List<EnvResource> getEdgeInstances(String endpoint) {
return projectService.getProjectsByEndpoint(endpoint)
.stream()
.map(ProjectDTO::getEndpoints)
@@ -122,6 +122,7 @@
.map(e -> new EnvResource()
.withId(e.getEdgeInfo().getInstanceId())
.withName(e.getName())
+ .withStatus(e.getStatus().toString())
.withResourceType(ResourceType.EDGE)
)
.collect(Collectors.toList());
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/InfrastructureInfoService.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/InfrastructureInfoService.java
index fb49c77..b8950ef 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/InfrastructureInfoService.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/InfrastructureInfoService.java
@@ -34,5 +34,5 @@
InfrastructureMetaInfoDTO getInfrastructureMetaInfo();
- void updateInfrastructureStatuses(UserInfo user, String endpoint, List<EnvResource> instanceIds);
+ void updateInfrastructureStatuses(UserInfo user, String endpoint, List<EnvResource> hostInstanceIds, List<EnvResource> clusterInstanceIds);
}
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/InfrastructureInfoServiceImpl.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/InfrastructureInfoServiceImpl.java
index ce81180..efd4088 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/InfrastructureInfoServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/InfrastructureInfoServiceImpl.java
@@ -146,20 +146,16 @@
}
@Override
- public void updateInfrastructureStatuses(UserInfo user, String endpoint, List<EnvResource> instanceIds) {
- try {
- EnvResourceList envResourceList = new EnvResourceList()
-// .withClusterList(envResources)
- .withHostList(instanceIds);
+ public void updateInfrastructureStatuses(UserInfo user, String endpoint, List<EnvResource> hostInstances, List<EnvResource> clusterInstances) {
+ EnvResourceList envResourceList = new EnvResourceList()
+ .withClusterList(clusterInstances)
+ .withHostList(hostInstances);
- EndpointDTO endpointDTO = endpointService.get(endpoint);
- String uuid = provisioningService.post(endpointDTO.getUrl() + INFRASTRUCTURE_STAUS, user.getAccessToken(),
- requestBuilder.newInfrastructureStatus(user.getName(), endpointDTO.getCloudProvider(), envResourceList),
- String.class);
- requestId.put(user.getName(), uuid);
- } catch (Exception e) {
- log.error("Can not post to {} project due to: {}", endpoint, e.getMessage(), e);
- }
+ EndpointDTO endpointDTO = endpointService.get(endpoint);
+ String uuid = provisioningService.post(endpointDTO.getUrl() + INFRASTRUCTURE_STAUS, user.getAccessToken(),
+ requestBuilder.newInfrastructureStatus(user.getName(), endpointDTO.getCloudProvider(), envResourceList),
+ String.class);
+ requestId.put(user.getName(), uuid);
}
private List<BillingReport> getExploratoryBillingData(List<UserInstanceDTO> exploratories) {