use of org.graylog2.plugin.streams.StreamRule in project graylog2-server by Graylog2.
the class StreamRuleResource method update.
@PUT
@Path("/{streamRuleId}")
@Timed
@ApiOperation(value = "Update a stream rule")
@ApiResponses(value = { @ApiResponse(code = 404, message = "Stream or stream rule not found."), @ApiResponse(code = 400, message = "Invalid JSON Body.") })
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@AuditEvent(type = AuditEventTypes.STREAM_RULE_UPDATE)
public SingleStreamRuleSummaryResponse update(@ApiParam(name = "streamid", value = "The stream id this rule belongs to.", required = true) @PathParam("streamid") String streamid, @ApiParam(name = "streamRuleId", value = "The stream rule id we are updating", required = true) @PathParam("streamRuleId") String streamRuleId, @ApiParam(name = "JSON body", required = true) @Valid @NotNull CreateStreamRuleRequest cr) throws NotFoundException, ValidationException {
checkPermission(RestPermissions.STREAMS_EDIT, streamid);
checkNotDefaultStream(streamid, "Cannot update stream rules on default stream.");
final StreamRule streamRule;
streamRule = streamRuleService.load(streamRuleId);
if (!streamRule.getStreamId().equals(streamid)) {
throw new NotFoundException("Couldn't update stream rule " + streamRuleId + "in stream " + streamid);
}
final StreamRuleType streamRuleType = StreamRuleType.fromInteger(cr.type());
if (null == streamRuleType) {
throw new BadRequestException("Unknown stream rule type " + cr.type());
}
streamRule.setField(cr.field());
streamRule.setType(streamRuleType);
streamRule.setInverted(cr.inverted());
streamRule.setValue(cr.value());
streamRule.setDescription(cr.description());
streamRuleService.save(streamRule);
clusterEventBus.post(StreamsChangedEvent.create(streamid));
return SingleStreamRuleSummaryResponse.create(streamRule.getId());
}
use of org.graylog2.plugin.streams.StreamRule in project graylog2-server by Graylog2.
the class SmallerMatcherTest method testMissedInvertedMatchWithMissingField.
@Test
public void testMissedInvertedMatchWithMissingField() {
StreamRule rule = getSampleRule();
rule.setValue("23");
rule.setInverted(true);
Message msg = getSampleMessage();
msg.addField("someother", "42");
StreamRuleMatcher matcher = getMatcher(rule);
assertFalse(matcher.match(msg, rule));
}
use of org.graylog2.plugin.streams.StreamRule in project graylog2-server by Graylog2.
the class SmallerMatcherTest method testSuccessfullInvertedMatchWithEqualValues.
@Test
public void testSuccessfullInvertedMatchWithEqualValues() {
StreamRule rule = getSampleRule();
rule.setValue("-9001");
rule.setInverted(true);
Message msg = getSampleMessage();
msg.addField("something", "-9001");
StreamRuleMatcher matcher = getMatcher(rule);
assertTrue(matcher.match(msg, rule));
}
use of org.graylog2.plugin.streams.StreamRule in project graylog2-server by Graylog2.
the class StreamRouterEngineTest method testMultipleStreamWithDifferentMatching.
@Test
public void testMultipleStreamWithDifferentMatching() {
final String dummyField = "dummyField";
final String dummyValue = "dummyValue";
final StreamRule streamRule1 = getStreamRuleMock("StreamRule1Id", StreamRuleType.EXACT, dummyField, dummyValue);
final StreamRule streamRule2 = getStreamRuleMock("StreamRule2Id", StreamRuleType.EXACT, dummyField, "not" + dummyValue);
final Stream stream1 = mock(Stream.class);
when(stream1.getId()).thenReturn("Stream1Id");
when(stream1.getMatchingType()).thenReturn(Stream.MatchingType.OR);
when(stream1.getStreamRules()).thenReturn(Lists.newArrayList(streamRule1, streamRule2));
final Stream stream2 = mock(Stream.class);
when(stream2.getId()).thenReturn("Stream2Id");
when(stream2.getMatchingType()).thenReturn(Stream.MatchingType.AND);
when(stream2.getStreamRules()).thenReturn(Lists.newArrayList(streamRule1, streamRule2));
final Message message = mock(Message.class);
when(message.getField(eq(dummyField))).thenReturn(dummyValue);
final StreamRouterEngine engine = newEngine(Lists.newArrayList(stream1, stream2));
final List<Stream> result = engine.match(message);
assertThat(result).hasSize(1);
assertThat(result).contains(stream1);
assertThat(result).doesNotContain(stream2);
}
use of org.graylog2.plugin.streams.StreamRule in project graylog2-server by Graylog2.
the class StreamRouterEngineTest method testOrTestMatch.
@Test
public void testOrTestMatch() throws Exception {
final StreamMock stream = getStreamMock("test", Stream.MatchingType.OR);
final StreamRuleMock rule1 = new StreamRuleMock(ImmutableMap.of("_id", new ObjectId(), "field", "testfield1", "type", StreamRuleType.PRESENCE.toInteger(), "stream_id", stream.getId()));
final StreamRuleMock rule2 = new StreamRuleMock(ImmutableMap.of("_id", new ObjectId(), "field", "testfield2", "value", "^test", "type", StreamRuleType.REGEX.toInteger(), "stream_id", stream.getId()));
stream.setStreamRules(Lists.newArrayList(rule1, rule2));
final StreamRouterEngine engine = newEngine(Lists.newArrayList(stream));
// Without testfield1 and testfield2 in the message.
final Message message1 = getMessage();
final StreamRouterEngine.StreamTestMatch testMatch1 = engine.testMatch(message1).get(0);
final Map<StreamRule, Boolean> matches1 = testMatch1.getMatches();
assertFalse(testMatch1.isMatched());
assertFalse(matches1.get(rule1));
assertFalse(matches1.get(rule2));
// With testfield1 but no-matching testfield2 in the message.
final Message message2 = getMessage();
message2.addField("testfield1", "testvalue");
message2.addField("testfield2", "no-testvalue");
final StreamRouterEngine.StreamTestMatch testMatch2 = engine.testMatch(message2).get(0);
final Map<StreamRule, Boolean> matches2 = testMatch2.getMatches();
assertTrue(testMatch2.isMatched());
assertTrue(matches2.get(rule1));
assertFalse(matches2.get(rule2));
// With testfield1 and matching testfield2 in the message.
final Message message3 = getMessage();
message3.addField("testfield1", "testvalue");
message3.addField("testfield2", "testvalue2");
final StreamRouterEngine.StreamTestMatch testMatch3 = engine.testMatch(message3).get(0);
final Map<StreamRule, Boolean> matches3 = testMatch3.getMatches();
assertTrue(testMatch3.isMatched());
assertTrue(matches3.get(rule1));
assertTrue(matches3.get(rule2));
}
Aggregations