Skip to content

Commit 65f1e22

Browse files
authored
NIFI-15022 Added Log Level Property Validator for EnrichIP Processors (#10546)
Signed-off-by: David Handermann <[email protected]>
1 parent 158784b commit 65f1e22

File tree

2 files changed

+49
-3
lines changed

2 files changed

+49
-3
lines changed

nifi-extension-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/AbstractEnrichIP.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.apache.nifi.annotation.lifecycle.OnScheduled;
2121
import org.apache.nifi.annotation.lifecycle.OnStopped;
2222
import org.apache.nifi.components.PropertyDescriptor;
23+
import org.apache.nifi.components.ValidationResult;
24+
import org.apache.nifi.components.Validator;
2325
import org.apache.nifi.components.resource.ResourceCardinality;
2426
import org.apache.nifi.components.resource.ResourceType;
2527
import org.apache.nifi.expression.AttributeExpression;
@@ -43,6 +45,7 @@
4345
import java.util.concurrent.locks.Lock;
4446
import java.util.concurrent.locks.ReadWriteLock;
4547
import java.util.concurrent.locks.ReentrantReadWriteLock;
48+
import java.util.regex.Pattern;
4649

4750
public abstract class AbstractEnrichIP extends AbstractProcessor {
4851

@@ -63,11 +66,30 @@ public abstract class AbstractEnrichIP extends AbstractProcessor {
6366
.addValidator(StandardValidators.createAttributeExpressionLanguageValidator(AttributeExpression.ResultType.STRING))
6467
.build();
6568

69+
private static final Pattern LOG_LEVEL_PATTERN = Pattern.compile("^(?:INFO|DEBUG|WARN|ERROR)$");
70+
private static final Validator LOG_LEVEL_VALIDATOR = (subject, input, context) -> {
71+
final boolean matches = LOG_LEVEL_PATTERN.matcher(input).matches();
72+
if (matches || context.isExpressionLanguagePresent(input)) {
73+
return (new ValidationResult.Builder())
74+
.subject(subject)
75+
.input(input)
76+
.valid(true)
77+
.build();
78+
} else {
79+
return (new ValidationResult.Builder())
80+
.subject(subject)
81+
.valid(false)
82+
.explanation(String.format("%s must be either INFO, DEBUG, WARN or ERROR", subject))
83+
.input(input)
84+
.build();
85+
}
86+
};
87+
6688
public static final PropertyDescriptor LOG_LEVEL = new PropertyDescriptor.Builder()
6789
.name("Log Level")
6890
.required(true)
6991
.description("The Log Level to use when an IP is not found in the database. Accepted values: INFO, DEBUG, WARN, ERROR.")
70-
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
92+
.addValidator(LOG_LEVEL_VALIDATOR)
7193
.defaultValue(MessageLogLevel.WARN.toString())
7294
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
7395
.build();

nifi-extension-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/test/java/org/apache/nifi/processors/TestGeoEnrichIPRecord.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,17 @@
3939
import org.apache.nifi.util.TestRunners;
4040
import org.junit.jupiter.api.BeforeEach;
4141
import org.junit.jupiter.api.Test;
42+
import org.junit.jupiter.params.ParameterizedTest;
43+
import org.junit.jupiter.params.provider.Arguments;
44+
import org.junit.jupiter.params.provider.MethodSource;
4245

4346
import java.io.InputStream;
4447
import java.net.InetAddress;
4548
import java.nio.charset.StandardCharsets;
4649
import java.util.HashMap;
4750
import java.util.List;
4851
import java.util.Map;
52+
import java.util.stream.Stream;
4953

5054
import static org.apache.nifi.processors.GeoEnrichTestUtils.getFullCityResponse;
5155
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -90,7 +94,29 @@ public void setup() throws Exception {
9094
runner.enableControllerService(registry);
9195
runner.enableControllerService(reader);
9296
runner.enableControllerService(writer);
97+
}
98+
99+
@ParameterizedTest
100+
@MethodSource("logLevelArgs")
101+
void testSpecifiedLogLevels(String logLevel, boolean expectValid) {
102+
runner.setProperty(AbstractEnrichIP.LOG_LEVEL, logLevel);
103+
104+
if (expectValid) {
105+
runner.assertValid();
106+
} else {
107+
runner.assertNotValid();
108+
}
109+
}
93110

111+
private static Stream<Arguments> logLevelArgs() {
112+
return Stream.of(
113+
Arguments.argumentSet("Valid Log Level Specified", "WARN", true),
114+
Arguments.argumentSet("Invalid Log Level Specified", "GIBBERISH", false),
115+
Arguments.argumentSet("Log Level Specified as Expression Language Expression", "${log.level}", true)
116+
);
117+
}
118+
119+
private void commonTest(String path, int not, int found, int original) {
94120
runner.setProperty(GeoEnrichIPRecord.GEO_CITY, "/geo/city");
95121
runner.setProperty(GeoEnrichIPRecord.GEO_COUNTRY, "/geo/country");
96122
runner.setProperty(GeoEnrichIPRecord.GEO_COUNTRY_ISO, "/geo/country_iso");
@@ -99,9 +125,7 @@ public void setup() throws Exception {
99125
runner.setProperty(GeoEnrichIPRecord.GEO_LONGITUDE, "/geo/lon");
100126
runner.setProperty(AbstractEnrichIP.LOG_LEVEL, "WARN");
101127
runner.assertValid();
102-
}
103128

104-
private void commonTest(String path, int not, int found, int original) {
105129
Map<String, String> attrs = new HashMap<>();
106130
attrs.put("schema.name", "record");
107131
runner.enqueue(getClass().getResourceAsStream(path), attrs);

0 commit comments

Comments
 (0)