diff --git a/changelog/unreleased/pr-21349.toml b/changelog/unreleased/pr-21349.toml new file mode 100644 index 000000000000..9434dec74f64 --- /dev/null +++ b/changelog/unreleased/pr-21349.toml @@ -0,0 +1,5 @@ +type = "fixed" +message = "Fix missing Query Parameters in Event Definitions in Content Packs." + +issues = ["Graylog2/graylog-plugin-enterprise#9274"] +pulls = ["21349"] diff --git a/graylog2-server/src/main/java/org/graylog/events/contentpack/entities/AggregationEventProcessorConfigEntity.java b/graylog2-server/src/main/java/org/graylog/events/contentpack/entities/AggregationEventProcessorConfigEntity.java index 9b212439194d..c22990d11cb1 100644 --- a/graylog2-server/src/main/java/org/graylog/events/contentpack/entities/AggregationEventProcessorConfigEntity.java +++ b/graylog2-server/src/main/java/org/graylog/events/contentpack/entities/AggregationEventProcessorConfigEntity.java @@ -26,6 +26,7 @@ import org.graylog.events.processor.EventProcessorConfig; import org.graylog.events.processor.aggregation.AggregationConditions; import org.graylog.events.processor.aggregation.AggregationEventProcessorConfig; +import org.graylog.plugins.views.search.Parameter; import org.graylog.plugins.views.search.searchfilters.model.UsedSearchFilter; import org.graylog2.contentpacks.exceptions.ContentPackException; import org.graylog2.contentpacks.model.entities.Entity; @@ -40,6 +41,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import static org.graylog2.contentpacks.facades.StreamReferenceFacade.resolveStreamEntity; @@ -52,6 +54,7 @@ public abstract class AggregationEventProcessorConfigEntity implements EventProc public static final String TYPE_NAME = "aggregation-v1"; private static final String FIELD_QUERY = "query"; + private static final String FIELD_QUERY_PARAMETERS = "query_parameters"; private static final String FIELD_FILTERS = "filters"; private static final String FIELD_STREAMS = "streams"; private static final String FIELD_STREAM_CATEGORIES = "stream_categories"; @@ -68,6 +71,10 @@ public abstract class AggregationEventProcessorConfigEntity implements EventProc @JsonProperty(FIELD_QUERY) public abstract ValueReference query(); + @Nullable + @JsonProperty(FIELD_QUERY_PARAMETERS) + public abstract ImmutableSet queryParameters(); + @JsonProperty(FIELD_FILTERS) public abstract List filters(); @@ -126,6 +133,9 @@ public static Builder create() { @JsonProperty(FIELD_QUERY) public abstract Builder query(ValueReference query); + @JsonProperty(FIELD_QUERY_PARAMETERS) + public abstract Builder queryParameters(Set queryParameters); + @JsonProperty public abstract Builder filters(List filters); @@ -186,6 +196,7 @@ public EventProcessorConfig toNativeEntity(Map parameter return AggregationEventProcessorConfig.builder() .type(type()) .query(query().asString(parameters)) + .queryParameters(queryParameters()) .streams(streamSet) .filters(filters().stream().map(filter -> filter.toNativeEntity(parameters, nativeEntities)).toList()) .groupBy(groupBy()) diff --git a/graylog2-server/src/main/java/org/graylog/events/processor/aggregation/AggregationEventProcessorConfig.java b/graylog2-server/src/main/java/org/graylog/events/processor/aggregation/AggregationEventProcessorConfig.java index d497e7377b3d..ae9db56b6f7e 100644 --- a/graylog2-server/src/main/java/org/graylog/events/processor/aggregation/AggregationEventProcessorConfig.java +++ b/graylog2-server/src/main/java/org/graylog/events/processor/aggregation/AggregationEventProcessorConfig.java @@ -86,6 +86,7 @@ public abstract class AggregationEventProcessorConfig implements EventProcessorC @JsonProperty(FIELD_QUERY) public abstract String query(); + @Nullable @JsonProperty(FIELD_QUERY_PARAMETERS) public abstract ImmutableSet queryParameters(); @@ -332,6 +333,7 @@ public EventProcessorConfigEntity toContentPackEntity(EntityDescriptorIds entity return AggregationEventProcessorConfigEntity.builder() .type(type()) .query(ValueReference.of(query())) + .queryParameters(queryParameters()) .filters(filters().stream().map(filter -> filter.toContentPackEntity(entityDescriptorIds)).toList()) .streams(streamRefs) .streamCategories(streamCategories()) @@ -356,6 +358,10 @@ public void resolveNativeEntity(EntityDescriptor entityDescriptor, MutableGraph< .build(); mutableGraph.putEdge(entityDescriptor, depStream); }); + // attribute is tagged @Nullable, so do a null check first + if(queryParameters() != null) { + queryParameters().forEach(parameter -> parameter.resolveNativeEntity(entityDescriptor, mutableGraph)); + } filters().forEach(filter -> filter.resolveNativeEntity(entityDescriptor, mutableGraph)); } diff --git a/graylog2-server/src/main/java/org/graylog/plugins/views/search/Parameter.java b/graylog2-server/src/main/java/org/graylog/plugins/views/search/Parameter.java index a847b6bcc5a8..9fc859da9e0c 100644 --- a/graylog2-server/src/main/java/org/graylog/plugins/views/search/Parameter.java +++ b/graylog2-server/src/main/java/org/graylog/plugins/views/search/Parameter.java @@ -21,6 +21,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.google.common.collect.Maps; +import org.graylog2.contentpacks.ContentPackable; +import org.graylog2.contentpacks.EntityDescriptorIds; import javax.annotation.Nullable; import java.util.Map; @@ -41,7 +43,7 @@ property = Parameter.TYPE_FIELD, visible = true, defaultImpl = ValueParameter.class) -public interface Parameter { +public interface Parameter extends ContentPackable { String TYPE_FIELD = "type"; @JsonProperty(TYPE_FIELD) @@ -74,6 +76,10 @@ public interface Parameter { Parameter applyBindings(Map bindings); + default Parameter toContentPackEntity(EntityDescriptorIds entityDescriptorIds) { + return this; + } + interface Builder { @JsonProperty(TYPE_FIELD) SELF type(String type); diff --git a/graylog2-server/src/main/java/org/graylog2/contentpacks/facades/LookupTableFacade.java b/graylog2-server/src/main/java/org/graylog2/contentpacks/facades/LookupTableFacade.java index b600bf655a26..42dd5a84f82b 100644 --- a/graylog2-server/src/main/java/org/graylog2/contentpacks/facades/LookupTableFacade.java +++ b/graylog2-server/src/main/java/org/graylog2/contentpacks/facades/LookupTableFacade.java @@ -76,6 +76,7 @@ private EntityDescriptor cacheDescriptor(String cacheId) { @VisibleForTesting Entity exportNativeEntity(LookupTableDto lookupTableDto, EntityDescriptorIds entityDescriptorIds) { final String tableId = entityDescriptorIds.get(EntityDescriptor.create(lookupTableDto.id(), ModelTypes.LOOKUP_TABLE_V1)) + .or(() -> entityDescriptorIds.get(EntityDescriptor.create(lookupTableDto.name(), ModelTypes.LOOKUP_TABLE_V1))) .orElseThrow(() -> new ContentPackException("Couldn't find lookup table entity " + lookupTableDto.id())); final String cacheId = entityDescriptorIds.get(cacheDescriptor(lookupTableDto.cacheId())) .orElseThrow(() -> new ContentPackException("Couldn't find lookup cache entity " + lookupTableDto.cacheId()));