Search in sources :

Example 61 with Status

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.Status in project cloudbreak by hortonworks.

the class FreeipaChecker method getStatus.

public SyncResult getStatus(Stack stack, Set<InstanceMetaData> checkableInstances) {
    try {
        if (checkableInstances.isEmpty()) {
            throw new UnsupportedOperationException("There are no instances of FreeIPA to check the status of");
        }
        // Exclude terminated but include deleted
        Set<InstanceMetaData> notTermiatedStackInstances = stack.getAllInstanceMetaDataList().stream().filter(Predicate.not(InstanceMetaData::isTerminated)).collect(Collectors.toSet());
        Pair<Map<InstanceMetaData, DetailedStackStatus>, String> statusCheckPair = checkStatus(stack, checkableInstances);
        List<DetailedStackStatus> responses = new ArrayList<>(statusCheckPair.getFirst().values());
        DetailedStackStatus status;
        if (areAllStatusTheSame(responses) && !hasMissingStatus(responses, notTermiatedStackInstances)) {
            status = responses.get(0);
        } else {
            status = DetailedStackStatus.UNHEALTHY;
        }
        return new SyncResult("FreeIpa is " + status + ", " + statusCheckPair.getSecond(), status, statusCheckPair.getFirst());
    } catch (Exception e) {
        LOGGER.info("Error occurred during status fetch: " + e.getMessage(), e);
        return new SyncResult("FreeIpa is unreachable, because error occurred: " + e.getMessage(), DetailedStackStatus.UNREACHABLE, null);
    }
}
Also used : InstanceMetaData(com.sequenceiq.freeipa.entity.InstanceMetaData) ArrayList(java.util.ArrayList) DetailedStackStatus(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.DetailedStackStatus) HashMap(java.util.HashMap) Map(java.util.Map)

Example 62 with Status

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.Status in project cloudbreak by hortonworks.

the class FreeipaChecker method checkStatus.

private Pair<Map<InstanceMetaData, DetailedStackStatus>, String> checkStatus(Stack stack, Set<InstanceMetaData> checkableInstances) throws Exception {
    return checkedMeasure(() -> {
        Map<InstanceMetaData, DetailedStackStatus> statuses = new HashMap<>();
        List<RPCResponse<Boolean>> responses = new LinkedList<>();
        LOGGER.info("Checking FreeIPA status for instance IDs {}", checkableInstances.stream().map(InstanceMetaData::getInstanceId).collect(Collectors.toList()));
        for (InstanceMetaData instanceMetaData : checkableInstances) {
            try {
                RPCResponse<Boolean> response = checkedMeasure(() -> freeIpaInstanceHealthDetailsService.checkFreeIpaHealth(stack, instanceMetaData), LOGGER, ":::Auto sync::: FreeIPA health check ran in {}ms");
                responses.add(response);
                DetailedStackStatus newDetailedStackStatus;
                if (response.getResult()) {
                    newDetailedStackStatus = DetailedStackStatus.AVAILABLE;
                } else {
                    newDetailedStackStatus = DetailedStackStatus.UNHEALTHY;
                }
                LOGGER.info("FreeIpa health check reported {} for {}", newDetailedStackStatus, instanceMetaData);
                statuses.put(instanceMetaData, newDetailedStackStatus);
            } catch (Exception e) {
                LOGGER.info("FreeIpaClientException occurred during status fetch for {}: {}", instanceMetaData, e.getMessage(), e);
                statuses.put(instanceMetaData, DetailedStackStatus.UNREACHABLE);
            }
        }
        String message = getMessages(responses);
        return Pair.of(statuses, message);
    }, LOGGER, ":::Auto sync::: freeipa server status is checked in {}ms");
}
Also used : InstanceMetaData(com.sequenceiq.freeipa.entity.InstanceMetaData) HashMap(java.util.HashMap) RPCResponse(com.sequenceiq.cloudbreak.client.RPCResponse) DetailedStackStatus(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.DetailedStackStatus) LinkedList(java.util.LinkedList)

Example 63 with Status

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.Status in project cloudbreak by hortonworks.

the class StackUpdater method saveStackNewStatus.

private Stack saveStackNewStatus(Stack stack, DetailedStackStatus newDetailedStatus, String newStatusReason, Status newStatus, StackStatus stackStatus) {
    LOGGER.debug("Updated: status from {} to {} - detailed status from {} to {} - reason from {} to {}", stackStatus.getStatus(), newStatus, stackStatus.getDetailedStackStatus(), newDetailedStatus, stackStatus.getStatusReason(), newStatusReason);
    stack.setStackStatus(new StackStatus(stack, newStatus, newStatusReason, newDetailedStatus));
    stack = stackService.save(stack);
    return stack;
}
Also used : StackStatus(com.sequenceiq.freeipa.entity.StackStatus) DetailedStackStatus(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.DetailedStackStatus)

Example 64 with Status

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.Status in project cloudbreak by hortonworks.

the class InstanceUpdater method setStatusIfNotTheSame.

private void setStatusIfNotTheSame(InstanceMetaData instanceMetaData, InstanceStatus newStatus) {
    InstanceStatus oldStatus = instanceMetaData.getInstanceStatus();
    if (oldStatus != newStatus) {
        instanceMetaData.setInstanceStatus(newStatus);
        LOGGER.info("The instance status updated from {} to {}", oldStatus, newStatus);
    }
}
Also used : InstanceStatus(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceStatus)

Example 65 with Status

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.Status in project cloudbreak by hortonworks.

the class ProviderChecker method setStatusIfNotTheSame.

private void setStatusIfNotTheSame(InstanceMetaData instanceMetaData, InstanceStatus newStatus) {
    InstanceStatus oldStatus = instanceMetaData.getInstanceStatus();
    if (oldStatus != newStatus) {
        if (updateStatus) {
            instanceMetaData.setInstanceStatus(newStatus);
            LOGGER.info(":::Auto sync::: The instance status updated from {} to {}", oldStatus, newStatus);
        } else {
            LOGGER.info(":::Auto sync::: The instance status would be had to update from {} to {}", oldStatus, newStatus);
        }
    }
}
Also used : InstanceStatus(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceStatus) CloudVmInstanceStatus(com.sequenceiq.cloudbreak.cloud.model.CloudVmInstanceStatus)

Aggregations

Test (org.junit.jupiter.api.Test)30 SyncOperationStatus (com.sequenceiq.freeipa.api.v1.freeipa.user.model.SyncOperationStatus)23 Stack (com.sequenceiq.freeipa.entity.Stack)16 DetailedStackStatus (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.DetailedStackStatus)14 DescribeFreeIpaResponse (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.describe.DescribeFreeIpaResponse)14 Operation (com.sequenceiq.freeipa.entity.Operation)14 OperationToSyncOperationStatus (com.sequenceiq.freeipa.converter.freeipa.user.OperationToSyncOperationStatus)12 StackStatus (com.sequenceiq.freeipa.entity.StackStatus)11 InstanceStatus (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceStatus)10 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)10 UserSyncRequestFilter (com.sequenceiq.freeipa.service.freeipa.user.UserSyncRequestFilter)8 OperationStatus (com.sequenceiq.freeipa.api.v1.operation.model.OperationStatus)7 ArrayList (java.util.ArrayList)7 List (java.util.List)7 Map (java.util.Map)7 EnumSource (org.junit.jupiter.params.provider.EnumSource)7 Status (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.Status)6 SynchronizeAllUsersRequest (com.sequenceiq.freeipa.api.v1.freeipa.user.model.SynchronizeAllUsersRequest)6 InstanceMetaData (com.sequenceiq.freeipa.entity.InstanceMetaData)6 FailureDetails (com.sequenceiq.freeipa.api.v1.freeipa.user.model.FailureDetails)5