Search in sources :

Example 1 with VariableDTO

use of org.apache.nifi.web.api.dto.VariableDTO in project nifi by apache.

the class PGSetVar method doExecute.

@Override
public VoidResult doExecute(final NiFiClient client, final Properties properties) throws NiFiClientException, IOException, MissingOptionException, CommandException {
    final String pgId = getRequiredArg(properties, CommandOption.PG_ID);
    final String varName = getRequiredArg(properties, CommandOption.PG_VAR_NAME);
    final String varVal = getRequiredArg(properties, CommandOption.PG_VAR_VALUE);
    final ProcessGroupClient pgClient = client.getProcessGroupClient();
    final VariableRegistryEntity variableRegistry = pgClient.getVariables(pgId);
    final VariableRegistryDTO variableRegistryDTO = variableRegistry.getVariableRegistry();
    final VariableDTO variableDTO = new VariableDTO();
    variableDTO.setName(varName);
    variableDTO.setValue(varVal);
    final VariableEntity variableEntity = new VariableEntity();
    variableEntity.setVariable(variableDTO);
    // take the existing DTO and set only the requested variable for this command
    variableRegistryDTO.setVariables(Collections.singleton(variableEntity));
    // initiate the update request by posting the updated variable registry
    final VariableRegistryUpdateRequestEntity createdUpdateRequest = pgClient.updateVariableRegistry(pgId, variableRegistry);
    // poll the update request for up to 30 seconds to see if it has completed
    // if it doesn't complete then an exception will be thrown, but in either case the request will be deleted
    final String updateRequestId = createdUpdateRequest.getRequest().getRequestId();
    try {
        boolean completed = false;
        for (int i = 0; i < 30; i++) {
            final VariableRegistryUpdateRequestEntity updateRequest = pgClient.getVariableRegistryUpdateRequest(pgId, updateRequestId);
            if (updateRequest != null && updateRequest.getRequest().isComplete()) {
                completed = true;
                break;
            } else {
                try {
                    if (getContext().isInteractive()) {
                        println("Waiting for update request to complete...");
                    }
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        if (!completed) {
            throw new NiFiClientException("Unable to update variables of process group, cancelling request");
        }
    } finally {
        pgClient.deleteVariableRegistryUpdateRequest(pgId, updateRequestId);
    }
    return VoidResult.getInstance();
}
Also used : NiFiClientException(org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException) VariableEntity(org.apache.nifi.web.api.entity.VariableEntity) VariableRegistryUpdateRequestEntity(org.apache.nifi.web.api.entity.VariableRegistryUpdateRequestEntity) VariableRegistryDTO(org.apache.nifi.web.api.dto.VariableRegistryDTO) VariableRegistryEntity(org.apache.nifi.web.api.entity.VariableRegistryEntity) VariableDTO(org.apache.nifi.web.api.dto.VariableDTO) ProcessGroupClient(org.apache.nifi.toolkit.cli.impl.client.nifi.ProcessGroupClient)

Example 2 with VariableDTO

use of org.apache.nifi.web.api.dto.VariableDTO in project nifi by apache.

the class VariableRegistryEndpointMerger method mergeResponses.

@Override
protected void mergeResponses(final VariableRegistryEntity clientEntity, final Map<NodeIdentifier, VariableRegistryEntity> entityMap, final Set<NodeResponse> successfulResponses, final Set<NodeResponse> problematicResponses) {
    final VariableRegistryDTO clientVariableRegistry = clientEntity.getVariableRegistry();
    final Set<VariableEntity> clientVariableEntities = clientVariableRegistry.getVariables();
    if (clientVariableEntities != null) {
        for (final Iterator<VariableEntity> i = clientVariableEntities.iterator(); i.hasNext(); ) {
            final VariableEntity clientVariableEntity = i.next();
            final VariableDTO clientVariable = clientVariableEntity.getVariable();
            final Map<NodeIdentifier, Set<AffectedComponentEntity>> nodeAffectedComponentEntities = new HashMap<>();
            boolean retainClientVariable = true;
            for (final Map.Entry<NodeIdentifier, VariableRegistryEntity> nodeEntry : entityMap.entrySet()) {
                final VariableRegistryEntity nodeVariableRegistry = nodeEntry.getValue();
                final Set<VariableEntity> nodeVariableEntities = nodeVariableRegistry.getVariableRegistry().getVariables();
                // if this node has no variables, then the current client variable should be removed
                if (nodeVariableEntities == null) {
                    retainClientVariable = false;
                    break;
                }
                boolean variableFound = false;
                for (final VariableEntity nodeVariableEntity : nodeVariableEntities) {
                    final VariableDTO nodeVariable = nodeVariableEntity.getVariable();
                    // identify the current clientVariable for each node
                    if (clientVariable.getProcessGroupId().equals(nodeVariable.getProcessGroupId()) && clientVariable.getName().equals(nodeVariable.getName())) {
                        variableFound = true;
                        if (Boolean.FALSE.equals(nodeVariableEntity.getCanWrite())) {
                            clientVariableEntity.setCanWrite(false);
                        }
                        nodeAffectedComponentEntities.put(nodeEntry.getKey(), nodeVariableEntity.getVariable().getAffectedComponents());
                        break;
                    }
                }
                if (!variableFound) {
                    retainClientVariable = false;
                    break;
                }
            }
            if (!retainClientVariable) {
                i.remove();
            } else {
                final Set<AffectedComponentEntity> clientAffectedComponentEntities = clientVariableEntity.getVariable().getAffectedComponents();
                affectedComponentEntityMerger.mergeAffectedComponents(clientAffectedComponentEntities, nodeAffectedComponentEntities);
            }
        }
    }
}
Also used : Set(java.util.Set) HashMap(java.util.HashMap) VariableRegistryDTO(org.apache.nifi.web.api.dto.VariableRegistryDTO) VariableRegistryEntity(org.apache.nifi.web.api.entity.VariableRegistryEntity) VariableEntity(org.apache.nifi.web.api.entity.VariableEntity) VariableDTO(org.apache.nifi.web.api.dto.VariableDTO) NodeIdentifier(org.apache.nifi.cluster.protocol.NodeIdentifier) HashMap(java.util.HashMap) Map(java.util.Map) AffectedComponentEntity(org.apache.nifi.web.api.entity.AffectedComponentEntity)

Example 3 with VariableDTO

use of org.apache.nifi.web.api.dto.VariableDTO in project nifi by apache.

the class VariableRegistryResult method writeSimpleResult.

@Override
protected void writeSimpleResult(final PrintStream output) {
    final VariableRegistryDTO variableRegistryDTO = variableRegistryEntity.getVariableRegistry();
    if (variableRegistryDTO == null || variableRegistryDTO.getVariables() == null) {
        return;
    }
    final List<VariableDTO> variables = variableRegistryDTO.getVariables().stream().map(v -> v.getVariable()).collect(Collectors.toList());
    Collections.sort(variables, Comparator.comparing(VariableDTO::getName));
    final Table table = new Table.Builder().column("#", 3, 3, false).column("Name", 5, 40, false).column("Value", 5, 40, false).build();
    for (int i = 0; i < variables.size(); i++) {
        final VariableDTO var = variables.get(i);
        table.addRow(String.valueOf(i + 1), var.getName(), var.getValue());
    }
    final TableWriter tableWriter = new DynamicTableWriter();
    tableWriter.write(table, output);
}
Also used : VariableDTO(org.apache.nifi.web.api.dto.VariableDTO) PrintStream(java.io.PrintStream) DynamicTableWriter(org.apache.nifi.toolkit.cli.impl.result.writer.DynamicTableWriter) TableWriter(org.apache.nifi.toolkit.cli.impl.result.writer.TableWriter) VariableRegistryEntity(org.apache.nifi.web.api.entity.VariableRegistryEntity) Collectors(java.util.stream.Collectors) List(java.util.List) Validate(org.apache.commons.lang3.Validate) ResultType(org.apache.nifi.toolkit.cli.api.ResultType) Table(org.apache.nifi.toolkit.cli.impl.result.writer.Table) VariableRegistryDTO(org.apache.nifi.web.api.dto.VariableRegistryDTO) Comparator(java.util.Comparator) Collections(java.util.Collections) Table(org.apache.nifi.toolkit.cli.impl.result.writer.Table) DynamicTableWriter(org.apache.nifi.toolkit.cli.impl.result.writer.DynamicTableWriter) TableWriter(org.apache.nifi.toolkit.cli.impl.result.writer.TableWriter) VariableRegistryDTO(org.apache.nifi.web.api.dto.VariableRegistryDTO) VariableDTO(org.apache.nifi.web.api.dto.VariableDTO) DynamicTableWriter(org.apache.nifi.toolkit.cli.impl.result.writer.DynamicTableWriter)

Aggregations

VariableDTO (org.apache.nifi.web.api.dto.VariableDTO)3 VariableRegistryDTO (org.apache.nifi.web.api.dto.VariableRegistryDTO)3 VariableRegistryEntity (org.apache.nifi.web.api.entity.VariableRegistryEntity)3 VariableEntity (org.apache.nifi.web.api.entity.VariableEntity)2 PrintStream (java.io.PrintStream)1 Collections (java.util.Collections)1 Comparator (java.util.Comparator)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1 Collectors (java.util.stream.Collectors)1 Validate (org.apache.commons.lang3.Validate)1 NodeIdentifier (org.apache.nifi.cluster.protocol.NodeIdentifier)1 ResultType (org.apache.nifi.toolkit.cli.api.ResultType)1 NiFiClientException (org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException)1 ProcessGroupClient (org.apache.nifi.toolkit.cli.impl.client.nifi.ProcessGroupClient)1 DynamicTableWriter (org.apache.nifi.toolkit.cli.impl.result.writer.DynamicTableWriter)1 Table (org.apache.nifi.toolkit.cli.impl.result.writer.Table)1 TableWriter (org.apache.nifi.toolkit.cli.impl.result.writer.TableWriter)1