From ff1ddb61defa34157700dfa5b07c8a6dbb68304e Mon Sep 17 00:00:00 2001 From: Bernd Ahlers Date: Thu, 5 Mar 2015 14:57:04 +0100 Subject: [PATCH] Add "replace" query param to Grok bulk import REST API endpoint. Existing Grok patterns will be removed before adding the new ones if set to true. Fixes #937 Refs Graylog2/graylog2-web-interface#1150 --- .../org/graylog2/restclient/models/ExtractorService.java | 3 ++- .../main/java/org/graylog2/grok/GrokPatternService.java | 2 ++ .../java/org/graylog2/grok/GrokPatternServiceImpl.java | 5 +++++ .../org/graylog2/rest/resources/system/GrokResource.java | 8 +++++++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/graylog2-rest-client/src/main/java/org/graylog2/restclient/models/ExtractorService.java b/graylog2-rest-client/src/main/java/org/graylog2/restclient/models/ExtractorService.java index dc3994d2dca5..28cebb314ec2 100644 --- a/graylog2-rest-client/src/main/java/org/graylog2/restclient/models/ExtractorService.java +++ b/graylog2-rest-client/src/main/java/org/graylog2/restclient/models/ExtractorService.java @@ -130,8 +130,9 @@ public void deleteGrokPattern(GrokPattern pattern) throws APIException, IOExcept api.path(routes.GrokResource().removePattern(pattern.id)).execute(); } - public void bulkLoadGrokPatterns(Collection patterns) throws APIException, IOException { + public void bulkLoadGrokPatterns(Collection patterns, boolean replace) throws APIException, IOException { api.path(routes.GrokResource().bulkUpdatePatterns()) + .queryParam("replace", String.valueOf(replace)) .body(new GrokPatternUpdateRequest(patterns)) .execute(); diff --git a/graylog2-server/src/main/java/org/graylog2/grok/GrokPatternService.java b/graylog2-server/src/main/java/org/graylog2/grok/GrokPatternService.java index 32e48e106346..9421d59ac17e 100644 --- a/graylog2-server/src/main/java/org/graylog2/grok/GrokPatternService.java +++ b/graylog2-server/src/main/java/org/graylog2/grok/GrokPatternService.java @@ -33,4 +33,6 @@ public interface GrokPatternService { boolean validate(GrokPattern pattern); int delete(String patternName); + + void deleteAll(); } diff --git a/graylog2-server/src/main/java/org/graylog2/grok/GrokPatternServiceImpl.java b/graylog2-server/src/main/java/org/graylog2/grok/GrokPatternServiceImpl.java index 0ea84713de12..1a4e0f3dcf70 100644 --- a/graylog2-server/src/main/java/org/graylog2/grok/GrokPatternServiceImpl.java +++ b/graylog2-server/src/main/java/org/graylog2/grok/GrokPatternServiceImpl.java @@ -98,4 +98,9 @@ public boolean validate(GrokPattern pattern) { public int delete(String patternId) { return dbCollection.removeById(new ObjectId(patternId)).getN(); } + + @Override + public void deleteAll() { + dbCollection.drop(); + } } diff --git a/graylog2-server/src/main/java/org/graylog2/rest/resources/system/GrokResource.java b/graylog2-server/src/main/java/org/graylog2/rest/resources/system/GrokResource.java index 9ec2ddfbbc3a..15671b8edfc7 100644 --- a/graylog2-server/src/main/java/org/graylog2/rest/resources/system/GrokResource.java +++ b/graylog2-server/src/main/java/org/graylog2/rest/resources/system/GrokResource.java @@ -40,6 +40,7 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; import java.net.URI; @@ -96,7 +97,9 @@ public Response createPattern(@ApiParam(name = "pattern", required = true) @PUT @Timed @ApiOperation("Add a list of new patterns") - public Response bulkUpdatePatterns(@ApiParam(name = "patterns", required = true) @NotNull GrokPatternList patternList) throws ValidationException { + public Response bulkUpdatePatterns(@ApiParam(name = "patterns", required = true) @NotNull GrokPatternList patternList, + @ApiParam(name = "replace", value = "Replace all patterns with the new ones.") + @QueryParam("replace") boolean replace) throws ValidationException { checkPermission(RestPermissions.INPUTS_CREATE); for (final GrokPattern pattern : patternList.patterns()) { @@ -104,6 +107,9 @@ public Response bulkUpdatePatterns(@ApiParam(name = "patterns", required = true) throw new ValidationException("Invalid pattern " + pattern + ". Did not save any patterns."); } } + if (replace) { + grokPatternService.deleteAll(); + } for (final GrokPattern pattern : patternList.patterns()) { grokPatternService.save(pattern); }