11
11
import org .elasticsearch .common .io .stream .Writeable ;
12
12
import org .elasticsearch .common .xcontent .ToXContentObject ;
13
13
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 ;
14
21
import org .elasticsearch .xpack .core .rollup .job .RollupJobConfig ;
22
+ import org .elasticsearch .xpack .core .rollup .job .TermsGroupConfig ;
15
23
16
24
import java .io .IOException ;
17
25
import java .util .ArrayList ;
18
- import java .util .Arrays ;
26
+ import java .util .Collections ;
19
27
import java .util .HashMap ;
20
28
import java .util .List ;
21
29
import java .util .Map ;
22
30
import java .util .Objects ;
31
+ import java .util .stream .Collectors ;
32
+
33
+ import static java .util .Collections .singletonMap ;
23
34
24
35
/**
25
36
* Represents the Rollup capabilities for a specific job on a single rollup index
@@ -42,52 +53,7 @@ public RollupJobCaps(RollupJobConfig job) {
42
53
jobID = job .getId ();
43
54
rollupIndex = job .getRollupIndex ();
44
55
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 );
91
57
}
92
58
93
59
public RollupJobCaps (StreamInput in ) throws IOException {
@@ -149,15 +115,86 @@ public boolean equals(Object other) {
149
115
RollupJobCaps that = (RollupJobCaps ) other ;
150
116
151
117
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 );
154
120
}
155
121
156
122
@ Override
157
123
public int hashCode () {
158
124
return Objects .hash (jobID , rollupIndex , fieldCapLookup );
159
125
}
160
126
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
+
161
198
public static class RollupFieldCaps implements Writeable , ToXContentObject {
162
199
private List <Map <String , Object >> aggs = new ArrayList <>();
163
200
0 commit comments