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();
}
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);
}
}
}
}
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);
}
Aggregations