private void completeFlowFile(final ProcessSession session, final FlowFile flowFile, final RecordSetWriter writer, final Relationship relationship, final String details) throws IOException { final WriteResult writeResult = writer.finishRecordSet(); writer.close(); final Map<String, String> attributes = new HashMap<>(); attributes.putAll(writeResult.getAttributes()); attributes.put("record.count", String.valueOf(writeResult.getRecordCount())); attributes.put(CoreAttributes.MIME_TYPE.key(), writer.getMimeType()); session.putAllAttributes(flowFile, attributes); session.transfer(flowFile, relationship); session.getProvenanceReporter().route(flowFile, relationship, details); }
session.getProvenanceReporter().route(flowFile, REL_VALID); session.transfer(flowFile, REL_VALID); } else { flowFile = session.putAttribute(flowFile, ERROR_ATTRIBUTE_KEY, exception.get().getLocalizedMessage()); logger.info("Failed to validate {} against schema due to {}; routing to 'invalid'", new Object[]{flowFile, exception.get().getLocalizedMessage()}); session.getProvenanceReporter().route(flowFile, REL_INVALID); session.transfer(flowFile, REL_INVALID);
logger.info("Routing {} to unmatched", new Object[]{ flowFile }); flowFile = session.putAttribute(flowFile, ROUTE_ATTRIBUTE_KEY, REL_NO_MATCH.getName()); session.getProvenanceReporter().route(flowFile, REL_NO_MATCH); session.transfer(flowFile, REL_NO_MATCH); } else { logger.info("Cloned {} into {} and routing clone to relationship {}", new Object[]{ flowFile, entry.getValue(), entry.getKey() }); FlowFile updatedFlowFile = session.putAttribute(entry.getValue(), ROUTE_ATTRIBUTE_KEY, entry.getKey().getName()); session.getProvenanceReporter().route(updatedFlowFile, entry.getKey()); session.transfer(updatedFlowFile, entry.getKey()); session.getProvenanceReporter().route(flowFile, firstRelationship); flowFile = session.putAttribute(flowFile, ROUTE_ATTRIBUTE_KEY, firstRelationship.getName()); session.transfer(flowFile, firstRelationship);
if (valid.get()) { logger.debug("Successfully validated {} against schema; routing to 'valid'", new Object[]{flowFile}); session.getProvenanceReporter().route(flowFile, REL_VALID); session.transfer(flowFile, REL_VALID); } else { session.getProvenanceReporter().route(flowFile, REL_INVALID); session.putAttribute(flowFile, "validation.error.message", validationError.get()); session.transfer(flowFile, REL_INVALID); if (valid.get()) { logger.debug("Successfully validated {} against schema; routing to 'valid'", new Object[]{validFF.get()}); session.getProvenanceReporter().route(validFF.get(), REL_VALID, "All " + totalCount.get() + " line(s) are valid"); session.putAttribute(validFF.get(), "count.valid.lines", Integer.toString(totalCount.get())); session.putAttribute(validFF.get(), "count.total.lines", Integer.toString(totalCount.get())); session.getProvenanceReporter().route(validFF.get(), REL_VALID, okCount.get() + " valid line(s)"); session.putAttribute(validFF.get(), "count.total.lines", Integer.toString(totalCount.get())); session.putAttribute(validFF.get(), "count.valid.lines", Integer.toString(okCount.get())); session.transfer(validFF.get(), REL_VALID); session.getProvenanceReporter().route(invalidFF.get(), REL_INVALID, (totalCount.get() - okCount.get()) + " invalid line(s)"); session.putAttribute(invalidFF.get(), "count.invalid.lines", Integer.toString((totalCount.get() - okCount.get()))); session.putAttribute(invalidFF.get(), "count.total.lines", Integer.toString(totalCount.get())); } else { logger.debug("All lines in {} are invalid; routing to 'invalid'", new Object[]{invalidFF.get()}); session.getProvenanceReporter().route(invalidFF.get(), REL_INVALID, "All " + totalCount.get() + " line(s) are invalid"); session.putAttribute(invalidFF.get(), "count.invalid.lines", Integer.toString(totalCount.get())); session.putAttribute(invalidFF.get(), "count.total.lines", Integer.toString(totalCount.get()));
flowFile = session.putAttribute(flowFile, ROUTE_ATTRIBUTE_KEY, REL_NO_MATCH.getName()); session.transfer(flowFile, REL_NO_MATCH); session.getProvenanceReporter().route(flowFile, REL_NO_MATCH); logger.info("Routing {} to 'unmatched'", new Object[]{flowFile}); } else { FlowFile clone = session.clone(flowFile); clone = session.putAttribute(clone, ROUTE_ATTRIBUTE_KEY, relationship.getName()); session.getProvenanceReporter().route(clone, relationship); session.transfer(clone, relationship); logger.info("Cloning {} to {} and routing clone to {}", new Object[]{flowFile, clone, relationship}); session.getProvenanceReporter().route(flowFile, firstRelationship); session.transfer(flowFile, firstRelationship); logger.info("Routing {} to {}", new Object[]{flowFile, firstRelationship});
session.getProvenanceReporter().route(updatedFlowFile, entry.getKey()); session.transfer(updatedFlowFile, entry.getKey()); session.getProvenanceReporter().route(originalFlowFile, REL_ORIGINAL); flowFile = session.putAttribute(flowFile, ROUTE_ATTRIBUTE_KEY, REL_ORIGINAL.getName()); session.transfer(flowFile, REL_ORIGINAL);
if (matchingTerm == null) { logger.info("Routing {} to 'unmatched'", new Object[]{flowFile}); session.getProvenanceReporter().route(flowFile, REL_NO_MATCH); session.transfer(flowFile, REL_NO_MATCH); } else { logger.info("Routing {} to 'matched' because it matched term {}", new Object[]{flowFile, matchingTermString}); flowFile = session.putAttribute(flowFile, MATCH_ATTRIBUTE_KEY, matchingTermString); session.getProvenanceReporter().route(flowFile, REL_MATCH); session.transfer(flowFile, REL_MATCH);
@Override public void onTrigger(final ProcessContext context, final ProcessSession session) throws ProcessException { final List<FlowFile> flowFiles = session.get(50); if (flowFiles.isEmpty()) { return; } final ComponentLog logger = getLogger(); try { if (fileWatcher.checkAndReset()) { this.dictionaryTerms = createDictionary(context); } } catch (final IOException e) { logger.error("Unable to reload dictionary due to {}", e); } final boolean matchAll = context.getProperty(MATCHING_CRITERIA).getValue().equals(MATCH_CRITERIA_ALL); for (final FlowFile flowFile : flowFiles) { final boolean matched = matchAll ? allMatch(flowFile, attributePattern, dictionaryTerms) : anyMatch(flowFile, attributePattern, dictionaryTerms); final Relationship relationship = matched ? REL_MATCHED : REL_UNMATCHED; session.getProvenanceReporter().route(flowFile, relationship); session.transfer(flowFile, relationship); logger.info("Transferred {} to {}", new Object[]{flowFile, relationship}); } }
@Override public void onTrigger(final ProcessContext context, final ProcessSession session) { final FlowFile flowFile = session.get(); if (flowFile == null) { return; } final DistributionStrategy strategy = strategyRef.get(); final Set<Relationship> available = context.getAvailableRelationships(); final int numRelationships = context.getProperty(NUM_RELATIONSHIPS).asInteger(); final boolean allDestinationsAvailable = (available.size() == numRelationships); if (!allDestinationsAvailable && strategy.requiresAllDestinationsAvailable()) { // can't transfer the FlowFiles. Roll back and yield session.rollback(); context.yield(); return; } final Relationship relationship = strategy.mapToRelationship(context, flowFile); if (relationship == null) { // can't transfer the FlowFiles. Roll back and yield session.rollback(); context.yield(); return; } session.transfer(flowFile, relationship); session.getProvenanceReporter().route(flowFile, relationship); }
} else if (!Files.exists(filePath)) { getLogger().log(levelFileNotFound, "Could not fetch file {} from file system for {} because the file does not exist; routing to not.found", new Object[] {file, flowFile}); session.getProvenanceReporter().route(flowFile, REL_NOT_FOUND); session.transfer(session.penalize(flowFile), REL_NOT_FOUND); return; getLogger().log(levelPermDenied, "Could not fetch file {} from file system for {} due to user {} not having sufficient permissions to read the file; routing to permission.denied", new Object[] {file, flowFile, user}); session.getProvenanceReporter().route(flowFile, REL_PERMISSION_DENIED); session.transfer(session.penalize(flowFile), REL_PERMISSION_DENIED); return;
session.getProvenanceReporter().route(flowFile, REL_FAILURE); session.transfer(flowFile, REL_FAILURE); session.commit();
clone = session.putAttribute(clone, "RouteHL7.Route", relationship.getName()); session.transfer(clone, relationship); session.getProvenanceReporter().route(clone, relationship); matchingRels.add(relationship.getName());
new Object[]{flowFile, filename, host, REL_NOT_FOUND.getName()}); session.transfer(session.penalize(flowFile), REL_NOT_FOUND); session.getProvenanceReporter().route(flowFile, REL_NOT_FOUND); return; } catch (final PermissionDeniedException e) { new Object[]{flowFile, filename, host, REL_PERMISSION_DENIED.getName()}); session.transfer(session.penalize(flowFile), REL_PERMISSION_DENIED); session.getProvenanceReporter().route(flowFile, REL_PERMISSION_DENIED); return; } catch (final ProcessException | IOException e) {
final Relationship relationship = entry.getValue(); session.getProvenanceReporter().route(transformed, relationship); session.transfer(transformed, relationship);
session.adjustCounter("Records Routed to " + relationship.getName(), writeResult.getRecordCount(), false); session.getProvenanceReporter().route(childFlowFile, relationship);
session.getProvenanceReporter().route(flowFile, REL_DUPLICATE, "Duplicate of: " + ORIGINAL_DESCRIPTION_ATTRIBUTE_NAME); String originalFlowFileDescription = originalCacheValue.getDescription(); flowFile = session.putAttribute(flowFile, ORIGINAL_DESCRIPTION_ATTRIBUTE_NAME, originalFlowFileDescription); session.adjustCounter("Duplicates Detected", 1L, false); } else { session.getProvenanceReporter().route(flowFile, REL_NON_DUPLICATE); session.transfer(flowFile, REL_NON_DUPLICATE); logger.info("Could not find a duplicate entry in cache for {}; routing to non-duplicate", new Object[]{flowFile});
private void completeFlowFile(final ProcessSession session, final FlowFile flowFile, final RecordSetWriter writer, final Relationship relationship, final String details) throws IOException { final WriteResult writeResult = writer.finishRecordSet(); writer.close(); final Map<String, String> attributes = new HashMap<>(); attributes.putAll(writeResult.getAttributes()); attributes.put("record.count", String.valueOf(writeResult.getRecordCount())); attributes.put(CoreAttributes.MIME_TYPE.key(), writer.getMimeType()); session.putAllAttributes(flowFile, attributes); session.transfer(flowFile, relationship); session.getProvenanceReporter().route(flowFile, relationship, details); }
@Override public void onTrigger(final ProcessContext context, final ProcessSession session) throws ProcessException { final List<FlowFile> flowFiles = session.get(50); if (flowFiles.isEmpty()) { return; } final ComponentLog logger = getLogger(); try { if (fileWatcher.checkAndReset()) { this.dictionaryTerms = createDictionary(context); } } catch (final IOException e) { logger.error("Unable to reload dictionary due to {}", e); } final boolean matchAll = context.getProperty(MATCHING_CRITERIA).getValue().equals(MATCH_CRITERIA_ALL); for (final FlowFile flowFile : flowFiles) { final boolean matched = matchAll ? allMatch(flowFile, attributePattern, dictionaryTerms) : anyMatch(flowFile, attributePattern, dictionaryTerms); final Relationship relationship = matched ? REL_MATCHED : REL_UNMATCHED; session.getProvenanceReporter().route(flowFile, relationship); session.transfer(flowFile, relationship); logger.info("Transferred {} to {}", new Object[]{flowFile, relationship}); } }
@Override public void onTrigger(final ProcessContext context, final ProcessSession session) { final FlowFile flowFile = session.get(); if (flowFile == null) { return; } final DistributionStrategy strategy = strategyRef.get(); final Set<Relationship> available = context.getAvailableRelationships(); final int numRelationships = context.getProperty(NUM_RELATIONSHIPS).asInteger(); final boolean allDestinationsAvailable = (available.size() == numRelationships); if (!allDestinationsAvailable && strategy.requiresAllDestinationsAvailable()) { // can't transfer the FlowFiles. Roll back and yield session.rollback(); context.yield(); return; } final Relationship relationship = strategy.mapToRelationship(context, flowFile); if (relationship == null) { // can't transfer the FlowFiles. Roll back and yield session.rollback(); context.yield(); return; } session.transfer(flowFile, relationship); session.getProvenanceReporter().route(flowFile, relationship); }