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