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