19
19
import com .google .gson .stream .JsonReader ;
20
20
import com .google .gson .stream .JsonToken ;
21
21
import com .google .gson .stream .JsonWriter ;
22
+ import jakarta .validation .constraints .NotNull ;
22
23
import oracle .kubernetes .json .Default ;
23
24
import oracle .kubernetes .json .Description ;
24
25
import org .apache .commons .lang3 .builder .EqualsBuilder ;
@@ -96,6 +97,8 @@ static class ExporterQuery extends HashMap<String,ExporterQuery> {
96
97
@ Description ("The attributes for which metrics are to be output. If not specified and a prefix is defined, "
97
98
+ "all values on the MBean will be selected." )
98
99
private String [] values ;
100
+
101
+ private Map <String ,String []> stringValues ;
99
102
}
100
103
101
104
// This class controls serialization of the exporter configuration.
@@ -136,6 +139,7 @@ private void writeQuery(JsonWriter out, ExporterQuery src) throws IOException {
136
139
writeOptionalStringField (out , "type" , src .type );
137
140
writeOptionalStringField (out , "prefix" , src .prefix );
138
141
writeOptionalValueArray (out , src .values );
142
+ writeOptionalStringValues (out , src .stringValues );
139
143
140
144
for (Map .Entry <String , ExporterQuery > entry : src .entrySet ()) {
141
145
out .name (entry .getKey ());
@@ -153,16 +157,31 @@ private void writeOptionalStringField(JsonWriter out, String name, @Nullable Str
153
157
154
158
private void writeOptionalValueArray (JsonWriter out , @ Nullable String [] values ) throws IOException {
155
159
if (values != null && values .length > 0 ) {
156
- out .name ("values" );
157
- out .beginArray ();
158
- for (String value : values ) {
159
- out .value (value );
160
+ writeArray (out , "values" , values );
161
+ }
162
+ }
163
+
164
+ private static void writeArray (JsonWriter out , String name , @ NotNull String [] values ) throws IOException {
165
+ out .name (name );
166
+ out .beginArray ();
167
+ for (String value : values ) {
168
+ out .value (value );
169
+ }
170
+ out .endArray ();
171
+ }
172
+
173
+ private void writeOptionalStringValues (JsonWriter out , @ Nullable Map <String , String []> stringValues ) throws IOException {
174
+ if (stringValues != null && !stringValues .isEmpty ()) {
175
+ out .name ("stringValues" );
176
+ out .beginObject ();
177
+ for (String key : stringValues .keySet ()) {
178
+ writeArray (out , key , stringValues .get (key ));
160
179
}
161
- out .endArray ();
180
+ out .endObject ();
162
181
}
163
182
}
164
183
165
- @ Override
184
+ @ Override
166
185
public MonitoringExporterConfiguration read (JsonReader in ) throws IOException {
167
186
MonitoringExporterConfiguration configuration = new MonitoringExporterConfiguration ();
168
187
in .beginObject ();
@@ -202,23 +221,13 @@ private ExporterQuery readQuery(JsonReader in) throws IOException {
202
221
while (in .hasNext ()) {
203
222
String name = in .nextName ();
204
223
switch (name ) {
205
- case "key" :
206
- query .key = in .nextString ();
207
- break ;
208
- case "keyName" :
209
- query .keyName = in .nextString ();
210
- break ;
211
- case "type" :
212
- query .type = in .nextString ();
213
- break ;
214
- case "prefix" :
215
- query .prefix = in .nextString ();
216
- break ;
217
- case "values" :
218
- query .values = readArrayValue (in );
219
- break ;
220
- default :
221
- query .put (name , readQuery (in ));
224
+ case "key" -> query .key = in .nextString ();
225
+ case "keyName" -> query .keyName = in .nextString ();
226
+ case "type" -> query .type = in .nextString ();
227
+ case "prefix" -> query .prefix = in .nextString ();
228
+ case "values" -> query .values = readArrayValue (in );
229
+ case "stringValues" -> query .stringValues = readStringValues (in );
230
+ default -> query .put (name , readQuery (in ));
222
231
}
223
232
}
224
233
in .endObject ();
@@ -242,6 +251,17 @@ private void readStringArray(JsonReader in, List<String> result) throws IOExcept
242
251
}
243
252
in .endArray ();
244
253
}
254
+
255
+ private Map <String ,String []> readStringValues (JsonReader in ) throws IOException {
256
+ Map <String ,String []> result = new HashMap <>();
257
+ in .beginObject ();
258
+ while (in .hasNext ()) {
259
+ String name = in .nextName ();
260
+ result .put (name , readArrayValue (in ));
261
+ }
262
+ in .endObject ();
263
+ return result ;
264
+ }
245
265
}
246
266
247
267
@ Override
0 commit comments