|
63 | 63 | import org.elasticsearch.search.SearchHits; |
64 | 64 | import org.elasticsearch.search.aggregations.Aggregation; |
65 | 65 | import org.elasticsearch.search.aggregations.AggregationBuilders; |
| 66 | +import org.elasticsearch.search.aggregations.Aggregations; |
66 | 67 | import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; |
67 | 68 | import org.elasticsearch.search.aggregations.metrics.stats.Stats; |
68 | 69 | import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats; |
@@ -1142,22 +1143,23 @@ public void getForecastStats(String jobId, Consumer<ForecastStats> handler, Cons |
1142 | 1143 |
|
1143 | 1144 | executeAsyncWithOrigin(client.threadPool().getThreadContext(), ML_ORIGIN, searchRequest, |
1144 | 1145 | ActionListener.<SearchResponse>wrap(searchResponse -> { |
1145 | | - |
1146 | 1146 | long totalHits = searchResponse.getHits().getTotalHits(); |
1147 | | - Map<String, Aggregation> aggregations = searchResponse.getAggregations().asMap(); |
1148 | | - |
| 1147 | + Aggregations aggregations = searchResponse.getAggregations(); |
| 1148 | + if (totalHits == 0 || aggregations == null) { |
| 1149 | + handler.accept(new ForecastStats()); |
| 1150 | + return; |
| 1151 | + } |
| 1152 | + Map<String, Aggregation> aggregationsAsMap = aggregations.asMap(); |
1149 | 1153 | StatsAccumulator memoryStats = StatsAccumulator |
1150 | | - .fromStatsAggregation((Stats) aggregations.get(ForecastStats.Fields.MEMORY)); |
| 1154 | + .fromStatsAggregation((Stats) aggregationsAsMap.get(ForecastStats.Fields.MEMORY)); |
1151 | 1155 | StatsAccumulator recordStats = StatsAccumulator |
1152 | | - .fromStatsAggregation((Stats) aggregations.get(ForecastStats.Fields.RECORDS)); |
| 1156 | + .fromStatsAggregation((Stats) aggregationsAsMap.get(ForecastStats.Fields.RECORDS)); |
1153 | 1157 | StatsAccumulator runtimeStats = StatsAccumulator |
1154 | | - .fromStatsAggregation((Stats) aggregations.get(ForecastStats.Fields.RUNTIME)); |
| 1158 | + .fromStatsAggregation((Stats) aggregationsAsMap.get(ForecastStats.Fields.RUNTIME)); |
1155 | 1159 | CountAccumulator statusCount = CountAccumulator |
1156 | | - .fromTermsAggregation((StringTerms) aggregations.get(ForecastStats.Fields.STATUSES)); |
1157 | | - |
1158 | | - ForecastStats forecastStats = new ForecastStats(totalHits, memoryStats, recordStats, |
1159 | | - runtimeStats, statusCount); |
| 1160 | + .fromTermsAggregation((StringTerms) aggregationsAsMap.get(ForecastStats.Fields.STATUSES)); |
1160 | 1161 |
|
| 1162 | + ForecastStats forecastStats = new ForecastStats(totalHits, memoryStats, recordStats, runtimeStats, statusCount); |
1161 | 1163 | handler.accept(forecastStats); |
1162 | 1164 | }, errorHandler), client::search); |
1163 | 1165 |
|
|
0 commit comments