Skip to content

Commit 44b7184

Browse files
authored
Refactoring/series spec handler (#24448)
* Value class becomes a record * Value record is not duplicated in storage modules anymore * SeriesSpecHandler has proper return values instead of Object * Unused search type handler removed from the whole series handler API * Proper line formatting * Minor fix of generics usage * Further generics improvements
1 parent 6d65f4e commit 44b7184

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+174
-306
lines changed

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/pivot/ESPivot.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ private Stream<SeriesAggregationBuilder> seriesStream(Pivot pivot, ESGeneratedQu
167167
if (esPivotSeriesSpecHandler == null) {
168168
throw new IllegalArgumentException("No series handler registered for: " + seriesSpec.type());
169169
}
170-
return esPivotSeriesSpecHandler.createAggregation(seriesName, pivot, seriesSpec, this, queryContext).stream();
170+
return esPivotSeriesSpecHandler.createAggregation(seriesName, pivot, seriesSpec, queryContext).stream();
171171
});
172172
}
173173

@@ -252,7 +252,7 @@ private void processSeries(PivotResult.Row.Builder rowBuilder,
252252
pivot.series().forEach(seriesSpec -> {
253253
final ESPivotSeriesSpecHandler<? extends SeriesSpec, ? extends Aggregation> seriesHandler = this.seriesHandlers.get(seriesSpec.type());
254254
final Aggregation series = seriesHandler.extractAggregationFromResult(pivot, seriesSpec, aggregation, queryContext);
255-
seriesHandler.handleResult(pivot, seriesSpec, searchResult, series, this, queryContext)
255+
seriesHandler.handleResult(pivot, seriesSpec, searchResult, series, queryContext)
256256
.map(value -> {
257257
columnKeys.addLast(value.id());
258258
final PivotResult.Value v = PivotResult.Value.create(columnKeys, value.value(), rollup, source);

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/pivot/ESPivotSeriesSpecHandler.java

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
*/
1717
package org.graylog.storage.elasticsearch7.views.searchtypes.pivot;
1818

19-
import org.graylog.plugins.views.search.engine.GeneratedQueryContext;
20-
import org.graylog.plugins.views.search.engine.SearchTypeHandler;
2119
import org.graylog.plugins.views.search.searchtypes.pivot.Pivot;
2220
import org.graylog.plugins.views.search.searchtypes.pivot.PivotSpec;
2321
import org.graylog.plugins.views.search.searchtypes.pivot.SeriesSpec;
@@ -26,12 +24,11 @@
2624
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.Aggregation;
2725
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.HasAggregations;
2826
import org.graylog.storage.elasticsearch7.views.ESGeneratedQueryContext;
29-
import org.graylog.storage.elasticsearch7.views.searchtypes.ESSearchTypeHandler;
3027

3128
import java.util.stream.Stream;
3229

3330
public abstract class ESPivotSeriesSpecHandler<SPEC_TYPE extends SeriesSpec, AGGREGATION_RESULT extends Aggregation>
34-
implements SeriesSpecHandler<SPEC_TYPE, SeriesAggregationBuilder, SearchResponse, AGGREGATION_RESULT, ESSearchTypeHandler<Pivot>, ESGeneratedQueryContext> {
31+
implements SeriesSpecHandler<SPEC_TYPE, SeriesAggregationBuilder, SearchResponse, AGGREGATION_RESULT, ESGeneratedQueryContext> {
3532

3633
public Aggregation extractAggregationFromResult(Pivot pivot, PivotSpec spec, HasAggregations currentAggregationOrBucket, ESGeneratedQueryContext queryContext) {
3734
final String aggName = queryContext.getAggNameForPivotSpecFromContext(pivot, spec);
@@ -40,39 +37,11 @@ public Aggregation extractAggregationFromResult(Pivot pivot, PivotSpec spec, Has
4037

4138
@SuppressWarnings("unchecked")
4239
@Override
43-
public Stream<Value> handleResult(Pivot pivot, SeriesSpec seriesSpec, Object queryResult, Object aggregationResult, SearchTypeHandler searchTypeHandler, GeneratedQueryContext queryContext) {
44-
return doHandleResult(pivot, (SPEC_TYPE) seriesSpec, (SearchResponse) queryResult, (AGGREGATION_RESULT) aggregationResult, (ESSearchTypeHandler<Pivot>) searchTypeHandler, (ESGeneratedQueryContext) queryContext);
40+
public Stream<Value> handleResult(Pivot pivot, SeriesSpec seriesSpec, SearchResponse queryResult, Aggregation aggregationResult, ESGeneratedQueryContext queryContext) {
41+
return doHandleResult(pivot, (SPEC_TYPE) seriesSpec, queryResult, (AGGREGATION_RESULT) aggregationResult, queryContext);
4542
}
4643

4744
@Override
48-
public abstract Stream<Value> doHandleResult(Pivot pivot, SPEC_TYPE seriesSpec, SearchResponse searchResult, AGGREGATION_RESULT aggregationResult, ESSearchTypeHandler<Pivot> searchTypeHandler, ESGeneratedQueryContext queryContext);
45+
public abstract Stream<Value> doHandleResult(Pivot pivot, SPEC_TYPE seriesSpec, SearchResponse searchResult, AGGREGATION_RESULT aggregationResult, ESGeneratedQueryContext queryContext);
4946

50-
public static class Value {
51-
52-
private final String id;
53-
private final String key;
54-
private final Object value;
55-
56-
public Value(String id, String key, Object value) {
57-
this.id = id;
58-
this.key = key;
59-
this.value = value;
60-
}
61-
62-
public static Value create(String id, String key, Object value) {
63-
return new Value(id, key, value);
64-
}
65-
66-
public String id() {
67-
return id;
68-
}
69-
70-
public String key() {
71-
return key;
72-
}
73-
74-
public Object value() {
75-
return value;
76-
}
77-
}
7847
}

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/pivot/series/ESAverageHandler.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
package org.graylog.storage.elasticsearch7.views.searchtypes.pivot.series;
1818

1919
import org.graylog.plugins.views.search.searchtypes.pivot.Pivot;
20+
import org.graylog.plugins.views.search.searchtypes.pivot.SeriesSpecHandler;
2021
import org.graylog.plugins.views.search.searchtypes.pivot.series.Average;
2122
import org.graylog.shaded.elasticsearch7.org.elasticsearch.action.search.SearchResponse;
2223
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.AggregationBuilders;
2324
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.Avg;
2425
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder;
2526
import org.graylog.storage.elasticsearch7.views.ESGeneratedQueryContext;
26-
import org.graylog.storage.elasticsearch7.views.searchtypes.ESSearchTypeHandler;
2727
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.ESPivotSeriesSpecHandler;
2828
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.SeriesAggregationBuilder;
2929

@@ -34,18 +34,18 @@
3434
public class ESAverageHandler extends ESPivotSeriesSpecHandler<Average, Avg> {
3535
@Nonnull
3636
@Override
37-
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Average avgSpec, ESSearchTypeHandler<Pivot> searchTypeHandler, ESGeneratedQueryContext queryContext) {
37+
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Average avgSpec, ESGeneratedQueryContext queryContext) {
3838
final AvgAggregationBuilder avg = AggregationBuilders.avg(name).field(avgSpec.field());
3939
queryContext.recordNameForPivotSpec(pivot, avgSpec, name);
4040
return List.of(SeriesAggregationBuilder.metric(avg));
4141
}
4242

4343
@Override
44-
public Stream<ESPivotSeriesSpecHandler.Value> doHandleResult(Pivot pivot, Average pivotSpec,
44+
public Stream<ESPivotSeriesSpecHandler.Value> doHandleResult(Pivot pivot,
45+
Average pivotSpec,
4546
SearchResponse searchResult,
4647
Avg avgAggregation,
47-
ESSearchTypeHandler<Pivot> searchTypeHandler,
4848
ESGeneratedQueryContext esGeneratedQueryContext) {
49-
return Stream.of(ESPivotSeriesSpecHandler.Value.create(pivotSpec.id(), Average.NAME, avgAggregation.getValue()));
49+
return Stream.of(SeriesSpecHandler.Value.create(pivotSpec.id(), Average.NAME, avgAggregation.getValue()));
5050
}
5151
}

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/pivot/series/ESCardinalityHandler.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
package org.graylog.storage.elasticsearch7.views.searchtypes.pivot.series;
1818

1919
import org.graylog.plugins.views.search.searchtypes.pivot.Pivot;
20+
import org.graylog.plugins.views.search.searchtypes.pivot.SeriesSpecHandler;
2021
import org.graylog.plugins.views.search.searchtypes.pivot.series.Cardinality;
2122
import org.graylog.shaded.elasticsearch7.org.elasticsearch.action.search.SearchResponse;
2223
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.AggregationBuilders;
2324
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.CardinalityAggregationBuilder;
2425
import org.graylog.storage.elasticsearch7.views.ESGeneratedQueryContext;
25-
import org.graylog.storage.elasticsearch7.views.searchtypes.ESSearchTypeHandler;
2626
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.ESPivotSeriesSpecHandler;
2727
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.SeriesAggregationBuilder;
2828

@@ -33,18 +33,18 @@
3333
public class ESCardinalityHandler extends ESPivotSeriesSpecHandler<Cardinality, org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.Cardinality> {
3434
@Nonnull
3535
@Override
36-
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Cardinality cardinalitySpec, ESSearchTypeHandler<Pivot> searchTypeHandler, ESGeneratedQueryContext queryContext) {
36+
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Cardinality cardinalitySpec, ESGeneratedQueryContext queryContext) {
3737
final CardinalityAggregationBuilder card = AggregationBuilders.cardinality(name).field(cardinalitySpec.field());
3838
queryContext.recordNameForPivotSpec(pivot, cardinalitySpec, name);
3939
return List.of(SeriesAggregationBuilder.metric(card));
4040
}
4141

4242
@Override
43-
public Stream<Value> doHandleResult(Pivot pivot, Cardinality pivotSpec,
43+
public Stream<Value> doHandleResult(Pivot pivot,
44+
Cardinality pivotSpec,
4445
SearchResponse searchResult,
4546
org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.Cardinality cardinalityAggregation,
46-
ESSearchTypeHandler<Pivot> searchTypeHandler,
4747
ESGeneratedQueryContext esGeneratedQueryContext) {
48-
return Stream.of(ESPivotSeriesSpecHandler.Value.create(pivotSpec.id(), Cardinality.NAME, cardinalityAggregation.getValue()));
48+
return Stream.of(SeriesSpecHandler.Value.create(pivotSpec.id(), Cardinality.NAME, cardinalityAggregation.getValue()));
4949
}
5050
}

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/pivot/series/ESCountHandler.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.ValueCount;
3131
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.ValueCountAggregationBuilder;
3232
import org.graylog.storage.elasticsearch7.views.ESGeneratedQueryContext;
33-
import org.graylog.storage.elasticsearch7.views.searchtypes.ESSearchTypeHandler;
3433
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.ESPivotSeriesSpecHandler;
3534
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.SeriesAggregationBuilder;
3635
import org.slf4j.Logger;
@@ -47,7 +46,7 @@ public class ESCountHandler extends ESPivotSeriesSpecHandler<Count, ValueCount>
4746

4847
@Nonnull
4948
@Override
50-
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Count count, ESSearchTypeHandler<Pivot> searchTypeHandler, ESGeneratedQueryContext queryContext) {
49+
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Count count, ESGeneratedQueryContext queryContext) {
5150
return count.field()
5251
.map(field -> {
5352
// the request was for a field count, we have to add a value_count sub aggregation
@@ -64,7 +63,6 @@ public Stream<Value> doHandleResult(Pivot pivot,
6463
Count count,
6564
SearchResponse searchResult,
6665
ValueCount valueCount,
67-
ESSearchTypeHandler<Pivot> searchTypeHandler,
6866
ESGeneratedQueryContext esGeneratedQueryContext) {
6967
final Object value;
7068
if (valueCount == null) {

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/pivot/series/ESLatestHandler.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.sort.SortBuilders;
3030
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.sort.SortOrder;
3131
import org.graylog.storage.elasticsearch7.views.ESGeneratedQueryContext;
32-
import org.graylog.storage.elasticsearch7.views.searchtypes.ESSearchTypeHandler;
3332
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.ESPivotSeriesSpecHandler;
3433
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.SeriesAggregationBuilder;
3534

@@ -43,7 +42,7 @@ public class ESLatestHandler extends ESPivotSeriesSpecHandler<Latest, ParsedFilt
4342

4443
@Nonnull
4544
@Override
46-
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Latest latestSpec, ESSearchTypeHandler<Pivot> searchTypeHandler, ESGeneratedQueryContext queryContext) {
45+
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Latest latestSpec, ESGeneratedQueryContext queryContext) {
4746
final FilterAggregationBuilder latest = AggregationBuilders.filter(name, QueryBuilders.existsQuery(latestSpec.field()))
4847
.subAggregation(AggregationBuilders.topHits(AGG_NAME)
4948
.size(1)
@@ -58,7 +57,6 @@ public Stream<Value> doHandleResult(Pivot pivot,
5857
Latest pivotSpec,
5958
SearchResponse searchResult,
6059
ParsedFilter filterAggregation,
61-
ESSearchTypeHandler<Pivot> searchTypeHandler,
6260
ESGeneratedQueryContext esGeneratedQueryContext) {
6361
final TopHits latestAggregation = filterAggregation.getAggregations().get(AGG_NAME);
6462
final Optional<Value> latestValue = Optional.ofNullable(latestAggregation)

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/pivot/series/ESMaxHandler.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
package org.graylog.storage.elasticsearch7.views.searchtypes.pivot.series;
1818

1919
import org.graylog.plugins.views.search.searchtypes.pivot.Pivot;
20+
import org.graylog.plugins.views.search.searchtypes.pivot.SeriesSpecHandler;
2021
import org.graylog.plugins.views.search.searchtypes.pivot.series.Max;
2122
import org.graylog.shaded.elasticsearch7.org.elasticsearch.action.search.SearchResponse;
2223
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.AggregationBuilders;
2324
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.MaxAggregationBuilder;
2425
import org.graylog.storage.elasticsearch7.views.ESGeneratedQueryContext;
25-
import org.graylog.storage.elasticsearch7.views.searchtypes.ESSearchTypeHandler;
2626
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.ESPivotSeriesSpecHandler;
2727
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.SeriesAggregationBuilder;
2828

@@ -33,7 +33,7 @@
3333
public class ESMaxHandler extends ESPivotSeriesSpecHandler<Max, org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.Max> {
3434
@Nonnull
3535
@Override
36-
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Max maxSpec, ESSearchTypeHandler<Pivot> searchTypeHandler, ESGeneratedQueryContext queryContext) {
36+
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Max maxSpec, ESGeneratedQueryContext queryContext) {
3737
final MaxAggregationBuilder max = AggregationBuilders.max(name).field(maxSpec.field());
3838
queryContext.recordNameForPivotSpec(pivot, maxSpec, name);
3939
return List.of(SeriesAggregationBuilder.metric(max));
@@ -44,8 +44,7 @@ public Stream<Value> doHandleResult(Pivot pivot,
4444
Max pivotSpec,
4545
SearchResponse searchResult,
4646
org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.Max maxAggregation,
47-
ESSearchTypeHandler<Pivot> searchTypeHandler,
4847
ESGeneratedQueryContext esGeneratedQueryContext) {
49-
return Stream.of(ESPivotSeriesSpecHandler.Value.create(pivotSpec.id(), Max.NAME, maxAggregation.getValue()));
48+
return Stream.of(SeriesSpecHandler.Value.create(pivotSpec.id(), Max.NAME, maxAggregation.getValue()));
5049
}
5150
}

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/pivot/series/ESMinHandler.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
package org.graylog.storage.elasticsearch7.views.searchtypes.pivot.series;
1818

1919
import org.graylog.plugins.views.search.searchtypes.pivot.Pivot;
20+
import org.graylog.plugins.views.search.searchtypes.pivot.SeriesSpecHandler;
2021
import org.graylog.plugins.views.search.searchtypes.pivot.series.Min;
2122
import org.graylog.shaded.elasticsearch7.org.elasticsearch.action.search.SearchResponse;
2223
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.AggregationBuilders;
2324
import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder;
2425
import org.graylog.storage.elasticsearch7.views.ESGeneratedQueryContext;
25-
import org.graylog.storage.elasticsearch7.views.searchtypes.ESSearchTypeHandler;
2626
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.ESPivotSeriesSpecHandler;
2727
import org.graylog.storage.elasticsearch7.views.searchtypes.pivot.SeriesAggregationBuilder;
2828

@@ -33,7 +33,7 @@
3333
public class ESMinHandler extends ESPivotSeriesSpecHandler<Min, org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.Min> {
3434
@Nonnull
3535
@Override
36-
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Min minSpec, ESSearchTypeHandler<Pivot> searchTypeHandler, ESGeneratedQueryContext queryContext) {
36+
public List<SeriesAggregationBuilder> doCreateAggregation(String name, Pivot pivot, Min minSpec, ESGeneratedQueryContext queryContext) {
3737
final MinAggregationBuilder min = AggregationBuilders.min(name).field(minSpec.field());
3838
queryContext.recordNameForPivotSpec(pivot, minSpec, name);
3939
return List.of(SeriesAggregationBuilder.metric(min));
@@ -44,8 +44,7 @@ public Stream<Value> doHandleResult(Pivot pivot,
4444
Min pivotSpec,
4545
SearchResponse searchResult,
4646
org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.metrics.Min minAggregation,
47-
ESSearchTypeHandler<Pivot> searchTypeHandler,
4847
ESGeneratedQueryContext esGeneratedQueryContext) {
49-
return Stream.of(ESPivotSeriesSpecHandler.Value.create(pivotSpec.id(), Min.NAME, minAggregation.getValue()));
48+
return Stream.of(SeriesSpecHandler.Value.create(pivotSpec.id(), Min.NAME, minAggregation.getValue()));
5049
}
5150
}

0 commit comments

Comments
 (0)