1919import com .google .gson .stream .JsonReader ;
2020import com .google .gson .stream .JsonToken ;
2121import com .google .gson .stream .JsonWriter ;
22+ import jakarta .validation .constraints .NotNull ;
2223import oracle .kubernetes .json .Default ;
2324import oracle .kubernetes .json .Description ;
2425import org .apache .commons .lang3 .builder .EqualsBuilder ;
@@ -96,6 +97,8 @@ static class ExporterQuery extends HashMap<String,ExporterQuery> {
9697 @ Description ("The attributes for which metrics are to be output. If not specified and a prefix is defined, "
9798 + "all values on the MBean will be selected." )
9899 private String [] values ;
100+
101+ private Map <String ,String []> stringValues ;
99102 }
100103
101104 // This class controls serialization of the exporter configuration.
@@ -136,6 +139,7 @@ private void writeQuery(JsonWriter out, ExporterQuery src) throws IOException {
136139 writeOptionalStringField (out , "type" , src .type );
137140 writeOptionalStringField (out , "prefix" , src .prefix );
138141 writeOptionalValueArray (out , src .values );
142+ writeOptionalStringValues (out , src .stringValues );
139143
140144 for (Map .Entry <String , ExporterQuery > entry : src .entrySet ()) {
141145 out .name (entry .getKey ());
@@ -153,16 +157,31 @@ private void writeOptionalStringField(JsonWriter out, String name, @Nullable Str
153157
154158 private void writeOptionalValueArray (JsonWriter out , @ Nullable String [] values ) throws IOException {
155159 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 ));
160179 }
161- out .endArray ();
180+ out .endObject ();
162181 }
163182 }
164183
165- @ Override
184+ @ Override
166185 public MonitoringExporterConfiguration read (JsonReader in ) throws IOException {
167186 MonitoringExporterConfiguration configuration = new MonitoringExporterConfiguration ();
168187 in .beginObject ();
@@ -202,23 +221,13 @@ private ExporterQuery readQuery(JsonReader in) throws IOException {
202221 while (in .hasNext ()) {
203222 String name = in .nextName ();
204223 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 ));
222231 }
223232 }
224233 in .endObject ();
@@ -242,6 +251,17 @@ private void readStringArray(JsonReader in, List<String> result) throws IOExcept
242251 }
243252 in .endArray ();
244253 }
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+ }
245265 }
246266
247267 @ Override
0 commit comments