Skip to content

Commit b149864

Browse files
committed
[Rollup] Move toAggCap() methods out of rollup config objects (#32583)
1 parent 4975b57 commit b149864

File tree

5 files changed

+89
-102
lines changed

5 files changed

+89
-102
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/rollup/action/RollupJobCaps.java

+86-49
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,26 @@
1111
import org.elasticsearch.common.io.stream.Writeable;
1212
import org.elasticsearch.common.xcontent.ToXContentObject;
1313
import org.elasticsearch.common.xcontent.XContentBuilder;
14+
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder;
15+
import org.elasticsearch.search.aggregations.bucket.histogram.HistogramAggregationBuilder;
16+
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
17+
import org.elasticsearch.xpack.core.rollup.job.DateHistogramGroupConfig;
18+
import org.elasticsearch.xpack.core.rollup.job.GroupConfig;
19+
import org.elasticsearch.xpack.core.rollup.job.HistogramGroupConfig;
20+
import org.elasticsearch.xpack.core.rollup.job.MetricConfig;
1421
import org.elasticsearch.xpack.core.rollup.job.RollupJobConfig;
22+
import org.elasticsearch.xpack.core.rollup.job.TermsGroupConfig;
1523

1624
import java.io.IOException;
1725
import java.util.ArrayList;
18-
import java.util.Arrays;
26+
import java.util.Collections;
1927
import java.util.HashMap;
2028
import java.util.List;
2129
import java.util.Map;
2230
import java.util.Objects;
31+
import java.util.stream.Collectors;
32+
33+
import static java.util.Collections.singletonMap;
2334

2435
/**
2536
* Represents the Rollup capabilities for a specific job on a single rollup index
@@ -42,52 +53,7 @@ public RollupJobCaps(RollupJobConfig job) {
4253
jobID = job.getId();
4354
rollupIndex = job.getRollupIndex();
4455
indexPattern = job.getIndexPattern();
45-
Map<String, Object> dateHistoAggCap = job.getGroupConfig().getDateHistogram().toAggCap();
46-
String dateField = job.getGroupConfig().getDateHistogram().getField();
47-
RollupFieldCaps fieldCaps = fieldCapLookup.get(dateField);
48-
if (fieldCaps == null) {
49-
fieldCaps = new RollupFieldCaps();
50-
}
51-
fieldCaps.addAgg(dateHistoAggCap);
52-
fieldCapLookup.put(dateField, fieldCaps);
53-
54-
if (job.getGroupConfig().getHistogram() != null) {
55-
Map<String, Object> histoAggCap = job.getGroupConfig().getHistogram().toAggCap();
56-
Arrays.stream(job.getGroupConfig().getHistogram().getFields()).forEach(field -> {
57-
RollupFieldCaps caps = fieldCapLookup.get(field);
58-
if (caps == null) {
59-
caps = new RollupFieldCaps();
60-
}
61-
caps.addAgg(histoAggCap);
62-
fieldCapLookup.put(field, caps);
63-
});
64-
}
65-
66-
if (job.getGroupConfig().getTerms() != null) {
67-
Map<String, Object> histoAggCap = job.getGroupConfig().getTerms().toAggCap();
68-
Arrays.stream(job.getGroupConfig().getTerms().getFields()).forEach(field -> {
69-
RollupFieldCaps caps = fieldCapLookup.get(field);
70-
if (caps == null) {
71-
caps = new RollupFieldCaps();
72-
}
73-
caps.addAgg(histoAggCap);
74-
fieldCapLookup.put(field, caps);
75-
});
76-
}
77-
78-
if (job.getMetricsConfig().size() > 0) {
79-
job.getMetricsConfig().forEach(metricConfig -> {
80-
List<Map<String, Object>> metrics = metricConfig.toAggCap();
81-
metrics.forEach(m -> {
82-
RollupFieldCaps caps = fieldCapLookup.get(metricConfig.getField());
83-
if (caps == null) {
84-
caps = new RollupFieldCaps();
85-
}
86-
caps.addAgg(m);
87-
fieldCapLookup.put(metricConfig.getField(), caps);
88-
});
89-
});
90-
}
56+
fieldCapLookup = createRollupFieldCaps(job);
9157
}
9258

9359
public RollupJobCaps(StreamInput in) throws IOException {
@@ -149,15 +115,86 @@ public boolean equals(Object other) {
149115
RollupJobCaps that = (RollupJobCaps) other;
150116

151117
return Objects.equals(this.jobID, that.jobID)
152-
&& Objects.equals(this.rollupIndex, that.rollupIndex)
153-
&& Objects.equals(this.fieldCapLookup, that.fieldCapLookup);
118+
&& Objects.equals(this.rollupIndex, that.rollupIndex)
119+
&& Objects.equals(this.fieldCapLookup, that.fieldCapLookup);
154120
}
155121

156122
@Override
157123
public int hashCode() {
158124
return Objects.hash(jobID, rollupIndex, fieldCapLookup);
159125
}
160126

127+
static Map<String, RollupFieldCaps> createRollupFieldCaps(final RollupJobConfig rollupJobConfig) {
128+
final Map<String, RollupFieldCaps> fieldCapLookup = new HashMap<>();
129+
130+
final GroupConfig groupConfig = rollupJobConfig.getGroupConfig();
131+
if (groupConfig != null) {
132+
// Create RollupFieldCaps for the date histogram
133+
final DateHistogramGroupConfig dateHistogram = groupConfig.getDateHistogram();
134+
final Map<String, Object> dateHistogramAggCap = new HashMap<>();
135+
dateHistogramAggCap.put("agg", DateHistogramAggregationBuilder.NAME);
136+
dateHistogramAggCap.put(DateHistogramGroupConfig.INTERVAL, dateHistogram.getInterval().toString());
137+
if (dateHistogram.getDelay() != null) {
138+
dateHistogramAggCap.put(DateHistogramGroupConfig.DELAY, dateHistogram.getDelay().toString());
139+
}
140+
dateHistogramAggCap.put(DateHistogramGroupConfig.TIME_ZONE, dateHistogram.getTimeZone());
141+
142+
final RollupFieldCaps dateHistogramFieldCaps = new RollupFieldCaps();
143+
dateHistogramFieldCaps.addAgg(dateHistogramAggCap);
144+
fieldCapLookup.put(dateHistogram.getField(), dateHistogramFieldCaps);
145+
146+
// Create RollupFieldCaps for the histogram
147+
final HistogramGroupConfig histogram = groupConfig.getHistogram();
148+
if (histogram != null) {
149+
final Map<String, Object> histogramAggCap = new HashMap<>();
150+
histogramAggCap.put("agg", HistogramAggregationBuilder.NAME);
151+
histogramAggCap.put(HistogramGroupConfig.INTERVAL, histogram.getInterval());
152+
for (String field : histogram.getFields()) {
153+
RollupFieldCaps caps = fieldCapLookup.get(field);
154+
if (caps == null) {
155+
caps = new RollupFieldCaps();
156+
}
157+
caps.addAgg(histogramAggCap);
158+
fieldCapLookup.put(field, caps);
159+
}
160+
}
161+
162+
// Create RollupFieldCaps for the term
163+
final TermsGroupConfig terms = groupConfig.getTerms();
164+
if (terms != null) {
165+
final Map<String, Object> termsAggCap = singletonMap("agg", TermsAggregationBuilder.NAME);
166+
for (String field : terms.getFields()) {
167+
RollupFieldCaps caps = fieldCapLookup.get(field);
168+
if (caps == null) {
169+
caps = new RollupFieldCaps();
170+
}
171+
caps.addAgg(termsAggCap);
172+
fieldCapLookup.put(field, caps);
173+
}
174+
}
175+
}
176+
177+
// Create RollupFieldCaps for the metrics
178+
final List<MetricConfig> metricsConfig = rollupJobConfig.getMetricsConfig();
179+
if (metricsConfig.size() > 0) {
180+
metricsConfig.forEach(metricConfig -> {
181+
final List<Map<String, Object>> metrics = metricConfig.getMetrics().stream()
182+
.map(metric -> singletonMap("agg", (Object) metric))
183+
.collect(Collectors.toList());
184+
185+
metrics.forEach(m -> {
186+
RollupFieldCaps caps = fieldCapLookup.get(metricConfig.getField());
187+
if (caps == null) {
188+
caps = new RollupFieldCaps();
189+
}
190+
caps.addAgg(m);
191+
fieldCapLookup.put(metricConfig.getField(), caps);
192+
});
193+
});
194+
}
195+
return Collections.unmodifiableMap(fieldCapLookup);
196+
}
197+
161198
public static class RollupFieldCaps implements Writeable, ToXContentObject {
162199
private List<Map<String, Object>> aggs = new ArrayList<>();
163200

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/rollup/job/DateHistogramGroupConfig.java

+2-18
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
import java.io.IOException;
3131
import java.util.Collections;
32-
import java.util.HashMap;
3332
import java.util.List;
3433
import java.util.Map;
3534
import java.util.Objects;
@@ -55,10 +54,10 @@
5554
public class DateHistogramGroupConfig implements Writeable, ToXContentObject {
5655

5756
static final String NAME = "date_histogram";
58-
private static final String INTERVAL = "interval";
57+
public static final String INTERVAL = "interval";
5958
private static final String FIELD = "field";
6059
public static final String TIME_ZONE = "time_zone";
61-
private static final String DELAY = "delay";
60+
public static final String DELAY = "delay";
6261
private static final String DEFAULT_TIMEZONE = "UTC";
6362
private static final ConstructingObjectParser<DateHistogramGroupConfig, Void> PARSER;
6463
static {
@@ -196,21 +195,6 @@ public List<CompositeValuesSourceBuilder<?>> toBuilders() {
196195
return Collections.singletonList(vsBuilder);
197196
}
198197

199-
/**
200-
* @return A map representing this config object as a RollupCaps aggregation object
201-
*/
202-
public Map<String, Object> toAggCap() {
203-
Map<String, Object> map = new HashMap<>(3);
204-
map.put("agg", DateHistogramAggregationBuilder.NAME);
205-
map.put(INTERVAL, interval.toString());
206-
if (delay != null) {
207-
map.put(DELAY, delay.toString());
208-
}
209-
map.put(TIME_ZONE, timeZone);
210-
211-
return map;
212-
}
213-
214198
public void validateMappings(Map<String, Map<String, FieldCapabilities>> fieldCapsResponse,
215199
ActionRequestValidationException validationException) {
216200

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/rollup/job/HistogramGroupConfig.java

+1-17
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424
import java.io.IOException;
2525
import java.util.Arrays;
2626
import java.util.Collections;
27-
import java.util.HashMap;
2827
import java.util.List;
2928
import java.util.Map;
3029
import java.util.Objects;
31-
import java.util.Set;
3230
import java.util.stream.Collectors;
3331

3432
import static org.elasticsearch.common.xcontent.ConstructingObjectParser.constructorArg;
@@ -48,7 +46,7 @@
4846
public class HistogramGroupConfig implements Writeable, ToXContentObject {
4947

5048
static final String NAME = "histogram";
51-
private static final String INTERVAL = "interval";
49+
public static final String INTERVAL = "interval";
5250
private static final String FIELDS = "fields";
5351
private static final ConstructingObjectParser<HistogramGroupConfig, Void> PARSER;
5452
static {
@@ -106,20 +104,6 @@ public List<CompositeValuesSourceBuilder<?>> toBuilders() {
106104
}).collect(Collectors.toList());
107105
}
108106

109-
/**
110-
* @return A map representing this config object as a RollupCaps aggregation object
111-
*/
112-
public Map<String, Object> toAggCap() {
113-
Map<String, Object> map = new HashMap<>(2);
114-
map.put("agg", HistogramAggregationBuilder.NAME);
115-
map.put(INTERVAL, interval);
116-
return map;
117-
}
118-
119-
public Set<String> getAllFields() {
120-
return Arrays.stream(fields).collect(Collectors.toSet());
121-
}
122-
123107
public void validateMappings(Map<String, Map<String, FieldCapabilities>> fieldCapsResponse,
124108
ActionRequestValidationException validationException) {
125109

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/rollup/job/MetricConfig.java

-8
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.List;
3232
import java.util.Map;
3333
import java.util.Objects;
34-
import java.util.stream.Collectors;
3534

3635
import static org.elasticsearch.common.xcontent.ConstructingObjectParser.constructorArg;
3736

@@ -152,13 +151,6 @@ public List<ValuesSourceAggregationBuilder.LeafOnly> toBuilders() {
152151
return aggs;
153152
}
154153

155-
/**
156-
* @return A map representing this config object as a RollupCaps aggregation object
157-
*/
158-
public List<Map<String, Object>> toAggCap() {
159-
return metrics.stream().map(metric -> Collections.singletonMap("agg", (Object)metric)).collect(Collectors.toList());
160-
}
161-
162154
public void validateMappings(Map<String, Map<String, FieldCapabilities>> fieldCapsResponse,
163155
ActionRequestValidationException validationException) {
164156

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/rollup/job/TermsGroupConfig.java

-10
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
import java.io.IOException;
2727
import java.util.Arrays;
28-
import java.util.HashMap;
2928
import java.util.List;
3029
import java.util.Map;
3130
import java.util.stream.Collectors;
@@ -94,15 +93,6 @@ public List<CompositeValuesSourceBuilder<?>> toBuilders() {
9493
}).collect(Collectors.toList());
9594
}
9695

97-
/**
98-
* @return A map representing this config object as a RollupCaps aggregation object
99-
*/
100-
public Map<String, Object> toAggCap() {
101-
Map<String, Object> map = new HashMap<>(1);
102-
map.put("agg", TermsAggregationBuilder.NAME);
103-
return map;
104-
}
105-
10696
public void validateMappings(Map<String, Map<String, FieldCapabilities>> fieldCapsResponse,
10797
ActionRequestValidationException validationException) {
10898

0 commit comments

Comments
 (0)