32
32
33
33
package org .opensearch .action .admin .cluster .stats ;
34
34
35
+ import org .opensearch .action .admin .cluster .stats .ClusterStatsRequest .Metric ;
35
36
import org .opensearch .action .admin .indices .stats .CommonStats ;
36
37
import org .opensearch .common .annotation .PublicApi ;
37
38
import org .opensearch .core .xcontent .ToXContentFragment ;
47
48
import java .util .HashMap ;
48
49
import java .util .List ;
49
50
import java .util .Map ;
51
+ import java .util .Set ;
52
+ import java .util .function .Consumer ;
50
53
51
54
/**
52
55
* Cluster Stats per index
@@ -68,14 +71,52 @@ public class ClusterStatsIndices implements ToXContentFragment {
68
71
private MappingStats mappings ;
69
72
70
73
public ClusterStatsIndices (List <ClusterStatsNodeResponse > nodeResponses , MappingStats mappingStats , AnalysisStats analysisStats ) {
74
+ this (Metric .allIndicesMetrics (), nodeResponses , mappingStats , analysisStats );
75
+
76
+ }
77
+
78
+ public ClusterStatsIndices (Set <String > requestedMetrics , List <ClusterStatsNodeResponse > nodeResponses , MappingStats mappingStats , AnalysisStats analysisStats ) {
71
79
Map <String , ShardStats > countsPerIndex = new HashMap <>();
72
80
73
- this .docs = new DocsStats ();
74
- this .store = new StoreStats ();
75
- this .fieldData = new FieldDataStats ();
76
- this .queryCache = new QueryCacheStats ();
77
- this .completion = new CompletionStats ();
78
- this .segments = new SegmentsStats ();
81
+ Consumer <DocsStats > docsStatsConsumer = (docs ) -> {
82
+ if (Metric .DOCS .containedIn (requestedMetrics )) {
83
+ if (this .docs == null ) this .docs = new DocsStats ();
84
+ this .docs .add (docs );
85
+ }
86
+ };
87
+ Consumer <StoreStats > storeStatsConsumer = (store ) -> {
88
+ if (Metric .STORE .containedIn (requestedMetrics )) {
89
+ if (this .store == null ) this .store = new StoreStats ();
90
+ this .store .add (store );
91
+ }
92
+ };
93
+ Consumer <FieldDataStats > fieldDataConsumer = (fieldDataStats ) -> {
94
+ if (Metric .FIELD_DATA .containedIn (requestedMetrics )) {
95
+ if (this .fieldData == null ) this .fieldData = new FieldDataStats ();
96
+ this .fieldData .add (fieldDataStats );
97
+ }
98
+ };
99
+
100
+ Consumer <QueryCacheStats > queryCacheStatsConsumer = (queryCacheStats ) -> {
101
+ if (Metric .QUERY_CACHE .containedIn (requestedMetrics )) {
102
+ if (this .queryCache == null ) this .queryCache = new QueryCacheStats ();
103
+ this .queryCache .add (queryCacheStats );
104
+ }
105
+ };
106
+
107
+ Consumer <CompletionStats > completionStatsConsumer = (completionStats ) -> {
108
+ if (Metric .COMPLETION .containedIn (requestedMetrics )) {
109
+ if (this .completion == null ) this .completion = new CompletionStats ();
110
+ this .completion .add (completionStats );
111
+ }
112
+ };
113
+
114
+ Consumer <SegmentsStats > segmentsStatsConsumer = (segmentsStats ) -> {
115
+ if (Metric .SEGMENTS .containedIn (requestedMetrics )) {
116
+ if (this .segments == null ) this .segments = new SegmentsStats ();
117
+ this .segments .add (segmentsStats );
118
+ }
119
+ };
79
120
80
121
for (ClusterStatsNodeResponse r : nodeResponses ) {
81
122
// Aggregated response from the node
@@ -92,12 +133,12 @@ public ClusterStatsIndices(List<ClusterStatsNodeResponse> nodeResponses, Mapping
92
133
}
93
134
}
94
135
95
- docs . add (r .getAggregatedNodeLevelStats ().commonStats .docs );
96
- store . add (r .getAggregatedNodeLevelStats ().commonStats .store );
97
- fieldData . add (r .getAggregatedNodeLevelStats ().commonStats .fieldData );
98
- queryCache . add (r .getAggregatedNodeLevelStats ().commonStats .queryCache );
99
- completion . add (r .getAggregatedNodeLevelStats ().commonStats .completion );
100
- segments . add (r .getAggregatedNodeLevelStats ().commonStats .segments );
136
+ docsStatsConsumer . accept (r .getAggregatedNodeLevelStats ().commonStats .docs );
137
+ storeStatsConsumer . accept (r .getAggregatedNodeLevelStats ().commonStats .store );
138
+ fieldDataConsumer . accept (r .getAggregatedNodeLevelStats ().commonStats .fieldData );
139
+ queryCacheStatsConsumer . accept (r .getAggregatedNodeLevelStats ().commonStats .queryCache );
140
+ completionStatsConsumer . accept (r .getAggregatedNodeLevelStats ().commonStats .completion );
141
+ segmentsStatsConsumer . accept (r .getAggregatedNodeLevelStats ().commonStats .segments );
101
142
} else {
102
143
// Default response from the node
103
144
for (org .opensearch .action .admin .indices .stats .ShardStats shardStats : r .shardsStats ()) {
@@ -113,21 +154,24 @@ public ClusterStatsIndices(List<ClusterStatsNodeResponse> nodeResponses, Mapping
113
154
114
155
if (shardStats .getShardRouting ().primary ()) {
115
156
indexShardStats .primaries ++;
116
- docs . add (shardCommonStats .docs );
157
+ docsStatsConsumer . accept (shardCommonStats .docs );
117
158
}
118
- store . add (shardCommonStats .store );
119
- fieldData . add (shardCommonStats .fieldData );
120
- queryCache . add (shardCommonStats .queryCache );
121
- completion . add (shardCommonStats .completion );
122
- segments . add (shardCommonStats .segments );
159
+ storeStatsConsumer . accept (shardCommonStats .store );
160
+ fieldDataConsumer . accept (shardCommonStats .fieldData );
161
+ queryCacheStatsConsumer . accept (shardCommonStats .queryCache );
162
+ completionStatsConsumer . accept (shardCommonStats .completion );
163
+ segmentsStatsConsumer . accept (shardCommonStats .segments );
123
164
}
124
165
}
125
166
}
126
167
127
- shards = new ShardStats ();
168
+
128
169
indexCount = countsPerIndex .size ();
129
- for (final ShardStats indexCountsCursor : countsPerIndex .values ()) {
130
- shards .addIndexShardCount (indexCountsCursor );
170
+ if (Metric .SHARDS .containedIn (requestedMetrics )) {
171
+ shards = new ShardStats ();
172
+ for (final ShardStats indexCountsCursor : countsPerIndex .values ()) {
173
+ shards .addIndexShardCount (indexCountsCursor );
174
+ }
131
175
}
132
176
133
177
this .mappings = mappingStats ;
@@ -186,13 +230,27 @@ static final class Fields {
186
230
@ Override
187
231
public XContentBuilder toXContent (XContentBuilder builder , Params params ) throws IOException {
188
232
builder .field (Fields .COUNT , indexCount );
189
- shards .toXContent (builder , params );
190
- docs .toXContent (builder , params );
191
- store .toXContent (builder , params );
192
- fieldData .toXContent (builder , params );
193
- queryCache .toXContent (builder , params );
194
- completion .toXContent (builder , params );
195
- segments .toXContent (builder , params );
233
+ if (shards != null ) {
234
+ shards .toXContent (builder , params );
235
+ }
236
+ if (docs != null ) {
237
+ docs .toXContent (builder , params );
238
+ }
239
+ if (store != null ) {
240
+ store .toXContent (builder , params );
241
+ }
242
+ if (fieldData != null ) {
243
+ fieldData .toXContent (builder , params );
244
+ }
245
+ if (queryCache != null ) {
246
+ queryCache .toXContent (builder , params );
247
+ }
248
+ if (completion != null ) {
249
+ completion .toXContent (builder , params );
250
+ }
251
+ if (segments != null ) {
252
+ segments .toXContent (builder , params );
253
+ }
196
254
if (mappings != null ) {
197
255
mappings .toXContent (builder , params );
198
256
}
0 commit comments