Skip to content
Snippets Groups Projects
Commit 0cda3fc8 authored by kbeyro's avatar kbeyro
Browse files

Bulk update status command

parent 32cb15fa
No related branches found
No related tags found
3 merge requests!65Resolve "Prevent users from adding an existing SSH key",!601.6.5 fix processing bulk,!25Resolve "Allow for refreshing status information for a single or all application instances in a bulk"
Pipeline #88897 passed
...@@ -133,7 +133,7 @@ public class BulkController { ...@@ -133,7 +133,7 @@ public class BulkController {
User user = this.userService.findByUsername(principal.getName()).orElseThrow(() -> new MissingElementException("Missing user " + principal.getName())); User user = this.userService.findByUsername(principal.getName()).orElseThrow(() -> new MissingElementException("Missing user " + principal.getName()));
return ResponseEntity.ok(mapToView(bulkDeploymentRepository.findByType(BulkType.DOMAIN)).stream() return ResponseEntity.ok(mapToView(bulkDeploymentRepository.findByType(BulkType.DOMAIN)).stream()
.filter(bulk -> bulk.getCreator().getId().equals(user.getId())).collect(Collectors.toList())); .filter(bulk -> bulk.getCreator().getId().equals(user.getId())).collect(Collectors.toList()));
} }
@GetMapping("/apps") @GetMapping("/apps")
...@@ -151,6 +151,12 @@ public class BulkController { ...@@ -151,6 +151,12 @@ public class BulkController {
.filter(bulk -> bulk.getCreator().getId().equals(user.getId())).collect(Collectors.toList())); .filter(bulk -> bulk.getCreator().getId().equals(user.getId())).collect(Collectors.toList()));
} }
@GetMapping("/refresh/{id}")
@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN') || hasRole('ROLE_VL_MANAGER')")
public ResponseEntity<BulkDeploymentViewS> getRefreshedState(@PathVariable Long id) {
return ResponseEntity.ok(mapToView(this.bulkApplicationService.updateState(id)));
}
private List<BulkDeploymentViewS> mapToView(List<BulkDeployment> deployments) { private List<BulkDeploymentViewS> mapToView(List<BulkDeployment> deployments) {
return deployments.stream() return deployments.stream()
.map(bulk -> { .map(bulk -> {
...@@ -162,6 +168,14 @@ public class BulkController { ...@@ -162,6 +168,14 @@ public class BulkController {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
private BulkDeploymentView mapToView(BulkDeployment deployment) {
BulkDeploymentView bulkView = modelMapper.map(deployment, BulkDeploymentView.class);
bulkView.setCreator(getUserView(deployment.getCreatorId()));
mapDetails(deployment, bulkView);
return bulkView;
}
private void mapDetails(BulkDeployment deployment, BulkDeploymentViewS view) { private void mapDetails(BulkDeployment deployment, BulkDeploymentViewS view) {
if (deployment.getType().equals(BulkType.APPLICATION)) { if (deployment.getType().equals(BulkType.APPLICATION)) {
Map<String, String> details = new HashMap<>(); Map<String, String> details = new HashMap<>();
......
...@@ -7,6 +7,7 @@ import net.geant.nmaas.portal.api.bulk.BulkDeploymentView; ...@@ -7,6 +7,7 @@ import net.geant.nmaas.portal.api.bulk.BulkDeploymentView;
import net.geant.nmaas.portal.api.bulk.BulkDeploymentViewS; import net.geant.nmaas.portal.api.bulk.BulkDeploymentViewS;
import net.geant.nmaas.portal.api.bulk.CsvApplication; import net.geant.nmaas.portal.api.bulk.CsvApplication;
import net.geant.nmaas.portal.api.domain.UserViewMinimal; import net.geant.nmaas.portal.api.domain.UserViewMinimal;
import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEvent;
import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.InputStreamResource;
...@@ -24,4 +25,6 @@ public interface BulkApplicationService { ...@@ -24,4 +25,6 @@ public interface BulkApplicationService {
InputStreamResource getInputStreamAppBulkDetails(List<BulkAppDetails> list ); InputStreamResource getInputStreamAppBulkDetails(List<BulkAppDetails> list );
BulkDeployment updateState(Long bulkId);
} }
...@@ -55,6 +55,7 @@ import java.util.List; ...@@ -55,6 +55,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -300,6 +301,58 @@ public class BulkApplicationServiceImpl implements BulkApplicationService { ...@@ -300,6 +301,58 @@ public class BulkApplicationServiceImpl implements BulkApplicationService {
); );
} }
@Override
public BulkDeployment updateState(Long bulkId) {
log.info("Update all states for bulk {}", bulkId);
Optional<BulkDeployment> bulk = this.bulkDeploymentRepository.findById(bulkId);
if(bulk.isPresent()) {
BulkDeployment bulkDeployment = bulk.get();
bulkDeployment.getEntries().forEach(entry -> {
try {
Long instanceId = Long.valueOf(entry.getDetails().get(BULK_ENTRY_DETAIL_KEY_APP_INSTANCE_ID));
AppInstance instance = instanceService.find(instanceId).orElseThrow();
AppLifecycleState state = appDeploymentMonitor.state(instance.getInternalId());
log.error("For bulk entries {} state = {}", entry.getId(), state.toString());
switch (state) {
case APPLICATION_DEPLOYMENT_VERIFIED:
entry.setState(BulkDeploymentState.COMPLETED);
bulkDeploymentEntryRepository.save(entry);
break;
case APPLICATION_CONFIGURATION_FAILED:
case APPLICATION_DEPLOYMENT_FAILED:
case APPLICATION_DEPLOYMENT_VERIFICATION_FAILED:
case INTERNAL_ERROR:
entry.setState(BulkDeploymentState.FAILED);
bulkDeploymentEntryRepository.save(entry);
break;
default:
entry.setState(BulkDeploymentState.PENDING);
bulkDeploymentEntryRepository.save(entry);
break;
}
logBulkStateUpdate(entry.getId(), entry.getState().name());
} catch (Exception e) {
log.error("Can not update state of {} bulk entry", entry.getId());
}
});
if (bulkDeployment.getEntries().stream().allMatch(e -> BulkDeploymentState.COMPLETED.equals(e.getState()))) {
bulkDeployment.setState(BulkDeploymentState.COMPLETED);
} else if (bulkDeployment.getEntries().stream().allMatch(e -> BulkDeploymentState.FAILED.equals(e.getState()))) {
bulkDeployment.setState(BulkDeploymentState.FAILED);
} else if (bulkDeployment.getEntries().stream().anyMatch(e -> BulkDeploymentState.FAILED.equals(e.getState()))) {
bulkDeployment.setState(BulkDeploymentState.PARTIALLY_FAILED);
}
logBulkStateUpdate(bulkDeployment.getId(),bulkDeployment.getState().name());
bulkDeploymentRepository.save(bulkDeployment);
return bulkDeployment;
} else {
log.error("Can not find bulk deployment {}", bulkId);
throw new MissingElementException("Can not find bulk deployment " + bulkId);
}
}
private static BulkDeployment createBulkDeployment(UserViewMinimal creator) { private static BulkDeployment createBulkDeployment(UserViewMinimal creator) {
BulkDeployment bulkDeployment = new BulkDeployment(); BulkDeployment bulkDeployment = new BulkDeployment();
bulkDeployment.setType(BulkType.APPLICATION); bulkDeployment.setType(BulkType.APPLICATION);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment