Search in sources :

Example 1 with ImportStrategy

use of org.graylog2.grok.GrokPatternService.ImportStrategy in project graylog2-server by Graylog2.

the class GrokResource method bulkUpdatePatterns.

@PUT
@Timed
@ApiOperation("Add a list of new patterns")
@AuditEvent(type = AuditEventTypes.GROK_PATTERN_IMPORT_CREATE)
public Response bulkUpdatePatterns(@ApiParam(name = "patterns", required = true) @NotNull GrokPatternList patternList, // deprecated. used to drop all existing patterns before import
@Deprecated @QueryParam("replace") @DefaultValue("false") boolean deprecatedDropAllExisting, @ApiParam(name = "import-strategy", value = "Strategy to apply when importing.") @QueryParam("import-strategy") ImportStrategy importStrategy) throws ValidationException {
    checkPermission(RestPermissions.INPUTS_CREATE);
    try {
        if (!grokPatternService.validateAll(patternList.patterns())) {
            throw new ValidationException("Invalid pattern contained. Did not save any patterns.");
        }
    } catch (GrokException | IllegalArgumentException e) {
        throw new ValidationException("Invalid pattern. Did not save any patterns\n" + e.getMessage());
    }
    ImportStrategy resolvedStrategy = importStrategy != null ? importStrategy : deprecatedDropAllExisting ? ImportStrategy.DROP_ALL_EXISTING : ImportStrategy.ABORT_ON_CONFLICT;
    grokPatternService.saveAll(patternList.patterns(), resolvedStrategy);
    return Response.accepted().build();
}
Also used : ImportStrategy(org.graylog2.grok.GrokPatternService.ImportStrategy) ValidationException(org.graylog2.plugin.database.ValidationException) GrokException(io.krakens.grok.api.exception.GrokException) Timed(com.codahale.metrics.annotation.Timed) ApiOperation(io.swagger.annotations.ApiOperation) NoAuditEvent(org.graylog2.audit.jersey.NoAuditEvent) AuditEvent(org.graylog2.audit.jersey.AuditEvent) PUT(javax.ws.rs.PUT)

Example 2 with ImportStrategy

use of org.graylog2.grok.GrokPatternService.ImportStrategy in project graylog2-server by Graylog2.

the class GrokResource method bulkUpdatePatternsFromTextFile.

@POST
@Consumes(MediaType.TEXT_PLAIN)
@Timed
@ApiOperation("Add a list of new patterns")
@AuditEvent(type = AuditEventTypes.GROK_PATTERN_IMPORT_CREATE)
public Response bulkUpdatePatternsFromTextFile(@ApiParam(name = "patterns", required = true) @NotNull InputStream patternsFile, // deprecated. used to drop all existing patterns before import
@Deprecated @QueryParam("replace") @DefaultValue("false") boolean deprecatedDropAllExisting, @ApiParam(name = "import-strategy", value = "Strategy to apply when importing.") @QueryParam("import-strategy") ImportStrategy importStrategy) throws ValidationException, IOException {
    checkPermission(RestPermissions.INPUTS_CREATE);
    final List<GrokPattern> grokPatterns = readGrokPatterns(patternsFile);
    if (!grokPatterns.isEmpty()) {
        try {
            if (!grokPatternService.validateAll(grokPatterns)) {
                throw new ValidationException("Invalid pattern contained. Did not save any patterns.");
            }
        } catch (GrokException | IllegalArgumentException e) {
            throw new ValidationException("Invalid pattern. Did not save any patterns\n" + e.getMessage());
        }
        ImportStrategy resolvedStrategy = importStrategy != null ? importStrategy : deprecatedDropAllExisting ? ImportStrategy.DROP_ALL_EXISTING : ImportStrategy.ABORT_ON_CONFLICT;
        grokPatternService.saveAll(grokPatterns, resolvedStrategy);
    }
    return Response.accepted().build();
}
Also used : ImportStrategy(org.graylog2.grok.GrokPatternService.ImportStrategy) ValidationException(org.graylog2.plugin.database.ValidationException) GrokPattern(org.graylog2.grok.GrokPattern) GrokException(io.krakens.grok.api.exception.GrokException) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes) Timed(com.codahale.metrics.annotation.Timed) ApiOperation(io.swagger.annotations.ApiOperation) NoAuditEvent(org.graylog2.audit.jersey.NoAuditEvent) AuditEvent(org.graylog2.audit.jersey.AuditEvent)

Example 3 with ImportStrategy

use of org.graylog2.grok.GrokPatternService.ImportStrategy in project graylog2-server by Graylog2.

the class MongoDbGrokPatternService method saveAll.

@Override
public List<GrokPattern> saveAll(Collection<GrokPattern> patterns, ImportStrategy importStrategy) throws ValidationException {
    final Map<String, GrokPattern> newPatternsByName;
    try {
        newPatternsByName = patterns.stream().collect(Collectors.toMap(GrokPattern::name, Function.identity()));
    } catch (IllegalStateException e) {
        throw new ValidationException("The supplied Grok patterns contain conflicting names: " + e.getLocalizedMessage());
    }
    final Map<String, GrokPattern> existingPatternsByName = loadAll().stream().collect(Collectors.toMap(GrokPattern::name, Function.identity()));
    if (importStrategy == ABORT_ON_CONFLICT) {
        final Sets.SetView<String> conflictingNames = Sets.intersection(newPatternsByName.keySet(), existingPatternsByName.keySet());
        if (!conflictingNames.isEmpty()) {
            final Iterable<String> limited = Iterables.limit(conflictingNames, MAX_DISPLAYED_CONFLICTS);
            throw new ValidationException("The following Grok patterns already exist: " + StringUtils.join(limited, ", ") + (conflictingNames.size() > MAX_DISPLAYED_CONFLICTS ? " (+ " + (conflictingNames.size() - MAX_DISPLAYED_CONFLICTS) + " more)" : "") + ".");
        }
    }
    try {
        if (!validateAll(patterns)) {
            throw new ValidationException("Invalid patterns");
        }
    } catch (GrokException | PatternSyntaxException e) {
        throw new ValidationException("Invalid patterns.\n" + e.getMessage());
    }
    if (importStrategy == DROP_ALL_EXISTING) {
        deleteAll();
    }
    final List<GrokPattern> savedPatterns = patterns.stream().map(newPattern -> {
        final GrokPattern existingPattern = existingPatternsByName.get(newPattern.name());
        if (existingPattern != null) {
            return newPattern.toBuilder().id(existingPattern.id()).build();
        } else {
            return newPattern;
        }
    }).map(dbCollection::save).map(WriteResult::getSavedObject).collect(Collectors.toList());
    clusterBus.post(GrokPatternsUpdatedEvent.create(newPatternsByName.keySet()));
    return savedPatterns;
}
Also used : Iterables(com.google.common.collect.Iterables) DROP_ALL_EXISTING(org.graylog2.grok.GrokPatternService.ImportStrategy.DROP_ALL_EXISTING) LoggerFactory(org.slf4j.LoggerFactory) StringUtils(org.apache.commons.lang3.StringUtils) Function(java.util.function.Function) WriteResult(org.mongojack.WriteResult) Inject(javax.inject.Inject) Strings(com.google.common.base.Strings) Map(java.util.Map) NotFoundException(org.graylog2.database.NotFoundException) ImmutableSet(com.google.common.collect.ImmutableSet) Logger(org.slf4j.Logger) PatternSyntaxException(java.util.regex.PatternSyntaxException) Iterator(java.util.Iterator) GrokException(io.krakens.grok.api.exception.GrokException) DBCursor(org.mongojack.DBCursor) Collection(java.util.Collection) MongoJackObjectMapperProvider(org.graylog2.bindings.providers.MongoJackObjectMapperProvider) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) JacksonDBCollection(org.mongojack.JacksonDBCollection) Set(java.util.Set) DBQuery(org.mongojack.DBQuery) IndexOptions(com.mongodb.client.model.IndexOptions) ABORT_ON_CONFLICT(org.graylog2.grok.GrokPatternService.ImportStrategy.ABORT_ON_CONFLICT) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) Indexes(com.mongodb.client.model.Indexes) List(java.util.List) ClusterEventBus(org.graylog2.events.ClusterEventBus) Grok(io.krakens.grok.api.Grok) ValidationException(org.graylog2.plugin.database.ValidationException) ObjectId(org.bson.types.ObjectId) Optional(java.util.Optional) GrokCompiler(io.krakens.grok.api.GrokCompiler) MongoConnection(org.graylog2.database.MongoConnection) ValidationException(org.graylog2.plugin.database.ValidationException) Sets(com.google.common.collect.Sets) GrokException(io.krakens.grok.api.exception.GrokException) PatternSyntaxException(java.util.regex.PatternSyntaxException)

Example 4 with ImportStrategy

use of org.graylog2.grok.GrokPatternService.ImportStrategy in project graylog2-server by Graylog2.

the class InMemoryGrokPatternService method saveAll.

@Override
public List<GrokPattern> saveAll(Collection<GrokPattern> patterns, ImportStrategy importStrategy) throws ValidationException {
    if (importStrategy == ABORT_ON_CONFLICT) {
        for (GrokPattern pattern : loadAll()) {
            final boolean patternExists = patterns.stream().anyMatch(p -> p.name().equals(pattern.name()));
            if (patternExists) {
                throw new ValidationException("Grok pattern " + pattern.name() + " already exists");
            }
        }
    }
    try {
        if (!validateAll(patterns)) {
            throw new ValidationException("Patterns invalid.");
        }
    } catch (GrokException | PatternSyntaxException e) {
        throw new ValidationException("Invalid patterns.\n" + e.getMessage());
    }
    if (importStrategy == DROP_ALL_EXISTING) {
        deleteAll();
    }
    final List<GrokPattern> grokPatterns = patterns.stream().map(this::uncheckedSave).collect(Collectors.toList());
    final Set<String> patternNames = grokPatterns.stream().map(GrokPattern::name).collect(Collectors.toSet());
    if (!patternNames.isEmpty()) {
        clusterBus.post(GrokPatternsUpdatedEvent.create(patternNames));
    }
    return grokPatterns;
}
Also used : ValidationException(org.graylog2.plugin.database.ValidationException) GrokException(io.krakens.grok.api.exception.GrokException) PatternSyntaxException(java.util.regex.PatternSyntaxException)

Aggregations

GrokException (io.krakens.grok.api.exception.GrokException)4 ValidationException (org.graylog2.plugin.database.ValidationException)4 Timed (com.codahale.metrics.annotation.Timed)2 ApiOperation (io.swagger.annotations.ApiOperation)2 PatternSyntaxException (java.util.regex.PatternSyntaxException)2 AuditEvent (org.graylog2.audit.jersey.AuditEvent)2 NoAuditEvent (org.graylog2.audit.jersey.NoAuditEvent)2 ImportStrategy (org.graylog2.grok.GrokPatternService.ImportStrategy)2 Preconditions.checkNotNull (com.google.common.base.Preconditions.checkNotNull)1 Strings (com.google.common.base.Strings)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 Iterables (com.google.common.collect.Iterables)1 Sets (com.google.common.collect.Sets)1 IndexOptions (com.mongodb.client.model.IndexOptions)1 Indexes (com.mongodb.client.model.Indexes)1 Grok (io.krakens.grok.api.Grok)1 GrokCompiler (io.krakens.grok.api.GrokCompiler)1 Collection (java.util.Collection)1 Iterator (java.util.Iterator)1 List (java.util.List)1