diff --git a/alerting/alerting-core/pom.xml b/alerting/alerting-core/pom.xml
index a2dedc8e..a8c0dc88 100644
--- a/alerting/alerting-core/pom.xml
+++ b/alerting/alerting-core/pom.xml
@@ -11,7 +11,7 @@
uk.co.gresearch.siembol
alerting
- 2.5.1-SNAPSHOT
+ 2.5.2-SNAPSHOT
@@ -35,7 +35,7 @@
uk.co.gresearch.siembol
siembol-common
- 2.5.1-SNAPSHOT
+ 2.5.2-SNAPSHOT
junit
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/common/AlertingFields.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/common/AlertingFields.java
index cc1d02bf..84e58742 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/common/AlertingFields.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/common/AlertingFields.java
@@ -20,9 +20,9 @@ public enum AlertingFields {
static {
for (AlertingFields field : AlertingFields.values()) {
ALERTING_FIELDS.put(field.toString(),
- String.format("%s_%s", ALERTS_PREFIX, field.toString()));
+ String.format("%s_%s", ALERTS_PREFIX, field));
CORRELATION_ALERTING_FIELDS.put(field.toString(),
- String.format("%s_%s", CORRELATION_ALERTS_PREFIX, field.toString()));
+ String.format("%s_%s", CORRELATION_ALERTS_PREFIX, field));
}
}
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/correlationengine/AlertCounterMetadata.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/correlationengine/AlertCounterMetadata.java
index 201225d5..0e6de811 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/correlationengine/AlertCounterMetadata.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/correlationengine/AlertCounterMetadata.java
@@ -4,7 +4,7 @@ import java.util.EnumSet;
public class AlertCounterMetadata {
public enum Flags {
- MANDATORY;
+ MANDATORY
}
private final EnumSet flags;
private final int threshold;
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/correlationengine/CorrelationRule.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/correlationengine/CorrelationRule.java
index cf1cf46b..05872980 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/correlationengine/CorrelationRule.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/correlationengine/CorrelationRule.java
@@ -7,7 +7,6 @@ import uk.co.gresearch.siembol.alerts.common.AlertingResult;
import uk.co.gresearch.siembol.alerts.engine.AbstractRule;
import java.util.*;
-import java.util.stream.Collectors;
import static uk.co.gresearch.siembol.alerts.common.AlertingTags.CORRELATION_KEY_TAG_NAME;
@@ -66,10 +65,7 @@ public class CorrelationRule extends AbstractRule {
}
public List getAlertNames() {
- return alertToCounterIndex
- .keySet()
- .stream()
- .collect(Collectors.toList());
+ return new ArrayList<>(alertToCounterIndex.keySet());
}
@@ -133,7 +129,7 @@ public class CorrelationRule extends AbstractRule {
public static abstract class Builder extends AbstractRule.Builder{
protected static final String ALERT_ALREADY_EXISTS_MSG = "Duplicate alert names for correlation";
protected static final String INVALID_ALERT_COUNTER = "Invalid alert counter specification";
- protected static final String EMTPY_ALERT_COUNTERS_MSG = "Missing alert counters";
+ protected static final String EMPTY_ALERT_COUNTERS_MSG = "Missing alert counters";
protected static final String MISSING_REQUIRED_ATTRIBUTES = "Missing required attributes for alert correlation";
protected static final String WRONG_ALERT_THRESHOLDS = "wrong alert thresholds";
protected static final Integer PROCESSING_TIME_MAX_LAG_TIME = 0;
@@ -181,14 +177,14 @@ public class CorrelationRule extends AbstractRule {
public static CorrelationRule.Builder builder() {
- return new CorrelationRule.Builder() {
+ return new CorrelationRule.Builder<>() {
@Override
protected CorrelationRule buildInternally() {
if (!flags.contains(Flags.USE_EVENT_TIME)) {
maxLagTimeInSec = PROCESSING_TIME_MAX_LAG_TIME;
}
if (alertCountersMetadataTemp.isEmpty()) {
- throw new IllegalArgumentException(EMTPY_ALERT_COUNTERS_MSG);
+ throw new IllegalArgumentException(EMPTY_ALERT_COUNTERS_MSG);
}
if (timeWindowInMs == null || maxLagTimeInSec == null) {
throw new IllegalArgumentException(MISSING_REQUIRED_ATTRIBUTES);
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/AbstractRule.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/AbstractRule.java
index b7963a39..f9e1263f 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/AbstractRule.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/AbstractRule.java
@@ -40,9 +40,7 @@ public abstract class AbstractRule {
outputFields.forEach(x -> event.put(x.getKey(), x.getValue()));
for (Pair variableOutputField : variableOutputFields) {
Optional value = EvaluationLibrary.substitute(event, variableOutputField.getValue());
- if (value.isPresent()) {
- event.put(variableOutputField.getKey(), value.get());
- }
+ value.ifPresent(x -> event.put(variableOutputField.getKey(), x));
}
}
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/BasicMatcher.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/BasicMatcher.java
index 7c4326be..63c0d3c0 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/BasicMatcher.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/BasicMatcher.java
@@ -36,6 +36,11 @@ public abstract class BasicMatcher implements Matcher {
return false;
}
+ @Override
+ public boolean isNegated() {
+ return isNegated;
+ }
+
protected abstract EvaluationResult matchInternally(Map map, String fieldValue);
public static abstract class Builder {
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/CompositeMatcher.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/CompositeMatcher.java
index 06db8803..74b62aee 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/CompositeMatcher.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/CompositeMatcher.java
@@ -29,6 +29,11 @@ public class CompositeMatcher implements Matcher {
return canModifyEvent;
}
+ @Override
+ public boolean isNegated() {
+ return negated;
+ }
+
public static Builder builder() {
return new Builder();
}
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/IsInSetMatcher.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/IsInSetMatcher.java
index 35f7bd35..fbc576c0 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/IsInSetMatcher.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/IsInSetMatcher.java
@@ -28,7 +28,7 @@ public class IsInSetMatcher extends BasicMatcher {
boolean matchedVariable = false;
for (String variableString : variableStrings) {
Optional substituted = EvaluationLibrary.substitute(map, variableString);
- if (!substituted.isPresent()) {
+ if (substituted.isEmpty()) {
continue;
}
@@ -45,7 +45,7 @@ public class IsInSetMatcher extends BasicMatcher {
public static Builder builder() {
- return new Builder() {
+ return new Builder<>() {
@Override
public IsInSetMatcher build() {
if (words == null || words.isEmpty()) {
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/Matcher.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/Matcher.java
index 61bc4b33..ab34c414 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/Matcher.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/Matcher.java
@@ -7,4 +7,5 @@ import java.util.Map;
public interface Matcher {
EvaluationResult match(Map log);
boolean canModifyEvent();
+ boolean isNegated();
}
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/RegexMatcher.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/RegexMatcher.java
index dcb3cd2e..64ff07a7 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/RegexMatcher.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/RegexMatcher.java
@@ -8,7 +8,7 @@ import java.util.regex.Pattern;
public class RegexMatcher extends BasicMatcher {
private static final String EMPTY_PATTERN = "Empty pattern";
private static final Pattern VARIABLE_PATTERN =
- Pattern.compile("\\(\\?<([a-zA-Z][a-zA-Z0-9:_]*)>");
+ Pattern.compile("\\(\\?<([a-zA-Z][a-zA-Z\\d:_]*)>");
private static final String VARIABLE_NAME = "var";
private static final int VAR_PREFIX_SIZE = "(\\<".length();
@@ -43,7 +43,7 @@ public class RegexMatcher extends BasicMatcher {
public static RegexMatcher.Builder builder() {
- return new RegexMatcher.Builder() {
+ return new RegexMatcher.Builder<>() {
@Override
public RegexMatcher build() {
if (pattern == null || variableNames == null) {
@@ -78,7 +78,7 @@ public class RegexMatcher extends BasicMatcher {
}
//NOTE: we rename variables since java does not support '_', ':'
- sb.append(VARIABLE_NAME + variableNames.size());
+ sb.append(VARIABLE_NAME).append(variableNames.size());
variableNames.add(name);
}
diff --git a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/Rule.java b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/Rule.java
index 877df290..b9aad46f 100644
--- a/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/Rule.java
+++ b/alerting/alerting-core/src/main/java/uk/co/gresearch/siembol/alerts/engine/Rule.java
@@ -44,6 +44,7 @@ public class Rule extends AbstractRule {
public static abstract class Builder extends AbstractRule.Builder{
protected static final String MISSING_MATCHERS = "Empty matchers in a rule";
+ protected static final String NEGATED_MATCHERS_ONLY = "The rule contains negated matchers only";
protected List matchers;
protected EnumSet flags = EnumSet.noneOf(RuleFlags.class);
@@ -61,18 +62,23 @@ public class Rule extends AbstractRule {
if (matchers == null || matchers.isEmpty()) {
throw new IllegalArgumentException(MISSING_MATCHERS);
}
+
+ boolean allNegatedMatchers = true;
for (Matcher matcher : matchers) {
if (matcher.canModifyEvent()) {
flags.add(RuleFlags.CAN_MODIFY_EVENT);
- break;
}
+ allNegatedMatchers &= matcher.isNegated();
+ }
+ if (allNegatedMatchers) {
+ throw new IllegalArgumentException(NEGATED_MATCHERS_ONLY);
}
}
}
public static Builder builder() {
- return new Builder() {
+ return new Builder<>() {
@Override
protected Rule buildInternally() {
prepareBuild();
diff --git a/alerting/alerting-core/src/test/java/uk/co/gresearch/siembol/alerts/engine/AlertingEngineImplTest.java b/alerting/alerting-core/src/test/java/uk/co/gresearch/siembol/alerts/engine/AlertingEngineImplTest.java
index 255cc4db..6520e2cd 100644
--- a/alerting/alerting-core/src/test/java/uk/co/gresearch/siembol/alerts/engine/AlertingEngineImplTest.java
+++ b/alerting/alerting-core/src/test/java/uk/co/gresearch/siembol/alerts/engine/AlertingEngineImplTest.java
@@ -139,7 +139,7 @@ public class AlertingEngineImplTest {
@Test
public void testMatchAndException() {
- when(rule1.match(ArgumentMatchers.