Skip to content

Commit 4a03d32

Browse files
fix terms/histogram fields, fix bugs with column groups
1 parent c3cfbf9 commit 4a03d32

5 files changed

Lines changed: 91 additions & 57 deletions

File tree

graylog-sdk-spring-boot-samples/src/main/java/com/joonsang/graylog/sdk/spring/samples/controller/GraylogSearchController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public ResponseEntity<?> getSuccessfulMessages(
5353
@GetMapping({"/terms"})
5454
public ResponseEntity<?> getTerms() throws IOException {
5555
Terms terms = graylogSearchService.getTerms(
56-
"2020-07-28T09:00:00Z",
56+
"2020-07-27T10:00:00Z",
5757
"2020-07-28T10:00:00Z",
5858
GraylogQuery.builder()
5959
.field("message", "API_REQUEST_FINISHED")

graylog-sdk-spring-boot-starter/src/main/java/com/joonsang/graylog/sdk/spring/starter/domain/Histogram.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ public static class HistogramData implements Serializable {
3535
private final List<Statistics> statisticsList;
3636

3737
@JsonProperty("stacked_columns")
38-
private final List<Value> stackedColumns;
38+
private final List<StackedColumn> stackedColumns;
39+
}
40+
41+
@Builder
42+
@ToString
43+
public static class StackedColumn implements Serializable {
44+
45+
@JsonProperty("column_labels")
46+
private final List<String> columnLabels;
47+
48+
@JsonProperty("statistics_list")
49+
private final List<Statistics> statisticsList;
3950
}
4051
}

graylog-sdk-spring-boot-starter/src/main/java/com/joonsang/graylog/sdk/spring/starter/domain/Terms.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ public static class TermsData implements Serializable {
3535
private final List<Statistics> statisticsList;
3636

3737
@JsonProperty("stacked_columns")
38-
private final List<Value> stackedColumns;
38+
private final List<StackedColumn> stackedColumns;
39+
}
40+
41+
@Builder
42+
@ToString
43+
public static class StackedColumn implements Serializable {
44+
45+
@JsonProperty("column_labels")
46+
private final List<String> columnLabels;
47+
48+
@JsonProperty("statistics_list")
49+
private final List<Statistics> statisticsList;
3950
}
4051
}

graylog-sdk-spring-boot-starter/src/main/java/com/joonsang/graylog/sdk/spring/starter/domain/Value.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import lombok.*;
44

5-
import java.io.Serializable;
65
import java.util.List;
76

87
/**
@@ -13,14 +12,7 @@
1312
@Getter
1413
@Setter
1514
@NoArgsConstructor
16-
@ToString
17-
public class Value implements Serializable {
18-
19-
@Builder
20-
public Value(List<String> labels, Statistics statistics) {
21-
this.labels = labels;
22-
this.statistics = statistics;
23-
}
15+
public class Value {
2416

2517
private List<String> labels;
2618

graylog-sdk-spring-boot-starter/src/main/java/com/joonsang/graylog/sdk/spring/starter/search/Search.java

Lines changed: 65 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public List<Statistics> getStatistics(
140140
@SuppressWarnings("unchecked")
141141
List<Map<String, ?>> values = JsonPath.parse(body).read(searchResultPath, List.class);
142142

143-
Map<String, Value> converted = convertToValueMap(requestSeries, values).get("row-leaf");
143+
Map<String, Value> converted = convertToValueMap(requestSeries, values).get("row-leaf").get(StringUtils.EMPTY);
144144

145145
return converted.values().stream()
146146
.map(Value::getStatistics)
@@ -211,26 +211,32 @@ public Terms getTerms(
211211
@SuppressWarnings("unchecked")
212212
List<Map<String, ?>> values = (List<Map<String, ?>>) result.get("values");
213213

214-
Map<String, Map<String, Value>> valueMap = convertToValueMap(requestSeries, values);
214+
Map<String, Map<String, Map<String, Value>>> valueMap = convertToValueMap(requestSeries, values);
215215

216-
List<Statistics> statsList = valueMap.get("row-leaf").values().stream()
216+
List<Statistics> statsList = valueMap.get("row-leaf").get(StringUtils.EMPTY).values().stream()
217217
.map(Value::getStatistics)
218218
.collect(Collectors.toList());
219219

220-
List<Value> addCol = valueMap.get("col-leaf").values().stream()
221-
.map(
222-
value -> Value.builder()
223-
.labels(value.getLabels())
224-
.statistics(value.getStatistics())
220+
List<Terms.StackedColumn> stackedColumns = new ArrayList<>();
221+
222+
for (Map<String, Value> colLeaf : valueMap.get("col-leaf").values()) {
223+
stackedColumns.add(
224+
Terms.StackedColumn.builder()
225+
.columnLabels(colLeaf.get(colLeaf.keySet().iterator().next()).getLabels())
226+
.statisticsList(
227+
colLeaf.values().stream()
228+
.map(Value::getStatistics)
229+
.collect(Collectors.toList())
230+
)
225231
.build()
226-
)
227-
.collect(Collectors.toList());
232+
);
233+
}
228234

229235
termsDataList.add(
230236
Terms.TermsData.builder()
231237
.baseLabels(labels)
232238
.statisticsList(statsList)
233-
.stackedColumns(addCol)
239+
.stackedColumns(stackedColumns)
234240
.build()
235241
);
236242
}
@@ -308,28 +314,34 @@ public Histogram getHistogram(
308314
@SuppressWarnings("unchecked")
309315
List<Map<String, ?>> values = (List<Map<String, ?>>) result.get("values");
310316

311-
String timestamp = CollectionUtils.isEmpty(labels) ? "" : labels.get(0);
317+
String timestamp = CollectionUtils.isEmpty(labels) ? StringUtils.EMPTY : labels.get(0);
312318

313-
Map<String, Map<String, Value>> valueMap = convertToValueMap(requestSeries, values);
319+
Map<String, Map<String, Map<String, Value>>> valueMap = convertToValueMap(requestSeries, values);
314320

315-
List<Statistics> statsList = valueMap.get("row-leaf").values().stream()
321+
List<Statistics> statsList = valueMap.get("row-leaf").get(StringUtils.EMPTY).values().stream()
316322
.map(Value::getStatistics)
317323
.collect(Collectors.toList());
318324

319-
List<Value> addCol = valueMap.get("col-leaf").values().stream()
320-
.map(
321-
value -> Value.builder()
322-
.labels(value.getLabels())
323-
.statistics(value.getStatistics())
325+
List<Histogram.StackedColumn> stackedColumns = new ArrayList<>();
326+
327+
for (Map<String, Value> colLeaf : valueMap.get("col-leaf").values()) {
328+
stackedColumns.add(
329+
Histogram.StackedColumn.builder()
330+
.columnLabels(colLeaf.get(colLeaf.keySet().iterator().next()).getLabels())
331+
.statisticsList(
332+
colLeaf.values().stream()
333+
.map(Value::getStatistics)
334+
.collect(Collectors.toList())
335+
)
324336
.build()
325-
)
326-
.collect(Collectors.toList());
337+
);
338+
}
327339

328340
histogramDataList.add(
329341
Histogram.HistogramData.builder()
330342
.baseLabel(timestamp)
331343
.statisticsList(statsList)
332-
.stackedColumns(addCol)
344+
.stackedColumns(stackedColumns)
333345
.build()
334346
);
335347
}
@@ -363,7 +375,7 @@ public String syncSearch(SearchSpec searchSpec) throws IOException {
363375
* @return Value map
364376
* @since 2.0.0
365377
*/
366-
private Map<String, Map<String, Value>> convertToValueMap(
378+
private Map<String, Map<String, Map<String, Value>>> convertToValueMap(
367379
List<Map<String, ?>> requestSeries,
368380
List<Map<String, ?>> values
369381
) {
@@ -380,7 +392,7 @@ private Map<String, Map<String, Value>> convertToValueMap(
380392
)
381393
);
382394

383-
Map<String, Map<String, Value>> leafFieldValueMap = ImmutableMap.of(
395+
Map<String, Map<String, Map<String, Value>>> leafFieldValueMap = ImmutableMap.of(
384396
"row-leaf", new HashMap<>(),
385397
"col-leaf", new HashMap<>()
386398
);
@@ -396,7 +408,8 @@ private Map<String, Map<String, Value>> convertToValueMap(
396408
List<String> keys = (List<String>) valueMap.get("key");
397409

398410
List<String> columnLabels = new ArrayList<>();
399-
String id = "";
411+
StringBuilder keyName = new StringBuilder();
412+
String id = StringUtils.EMPTY;
400413

401414
for (String key : keys) {
402415
if (keyMap.containsKey(key)) {
@@ -405,48 +418,55 @@ private Map<String, Map<String, Value>> convertToValueMap(
405418
}
406419

407420
columnLabels.add(key);
421+
keyName.append(key);
408422
}
409423

410424
String field = keyMap.get(id).get("field");
411425
String type = keyMap.get(id).get("type");
412426
String percentile = keyMap.get(id).get("percentile");
413427

414-
if (!leafFieldValueMap.get(source).containsKey(field)) {
415-
leafFieldValueMap.get(source).put(field, new Value());
416-
leafFieldValueMap.get(source).get(field).setLabels(columnLabels);
417-
leafFieldValueMap.get(source).get(field).setStatistics(new Statistics());
418-
leafFieldValueMap.get(source).get(field).getStatistics().setField(field);
428+
if (!leafFieldValueMap.get(source).containsKey(keyName.toString())) {
429+
leafFieldValueMap.get(source).put(keyName.toString(), new HashMap<>());
430+
}
431+
432+
if (!leafFieldValueMap.get(source).get(keyName.toString()).containsKey(field)) {
433+
leafFieldValueMap.get(source).get(keyName.toString()).put(field, new Value());
434+
leafFieldValueMap.get(source).get(keyName.toString()).get(field).setLabels(columnLabels);
435+
leafFieldValueMap.get(source).get(keyName.toString()).get(field).setStatistics(new Statistics());
436+
leafFieldValueMap.get(source).get(keyName.toString()).get(field).getStatistics().setField(field);
419437
}
420438

439+
Statistics statistics = leafFieldValueMap.get(source).get(keyName.toString()).get(field).getStatistics();
440+
421441
if (type.equals(SeriesType.avg.toString())) {
422-
leafFieldValueMap.get(source).get(field).getStatistics().setAverage((Double) valueMap.get("value"));
442+
statistics.setAverage((Double) valueMap.get("value"));
423443
} else if (type.equals(SeriesType.card.toString())) {
424-
leafFieldValueMap.get(source).get(field).getStatistics().setCardinality((Integer) valueMap.get("value"));
444+
statistics.setCardinality((Integer) valueMap.get("value"));
425445
} else if (type.equals(SeriesType.count.toString())) {
426-
leafFieldValueMap.get(source).get(field).getStatistics().setCount((Integer) valueMap.get("value"));
446+
statistics.setCount((Integer) valueMap.get("value"));
427447
} else if (type.equals(SeriesType.max.toString())) {
428-
leafFieldValueMap.get(source).get(field).getStatistics().setMax((Double) valueMap.get("value"));
448+
statistics.setMax((Double) valueMap.get("value"));
429449
} else if (type.equals(SeriesType.min.toString())) {
430-
leafFieldValueMap.get(source).get(field).getStatistics().setMin((Double) valueMap.get("value"));
450+
statistics.setMin((Double) valueMap.get("value"));
431451
} else if (type.equals(SeriesType.stddev.toString())) {
432-
leafFieldValueMap.get(source).get(field).getStatistics().setStdDeviation((Double) valueMap.get("value"));
452+
statistics.setStdDeviation((Double) valueMap.get("value"));
433453
} else if (type.equals(SeriesType.sum.toString())) {
434-
leafFieldValueMap.get(source).get(field).getStatistics().setSum((Double) valueMap.get("value"));
454+
statistics.setSum((Double) valueMap.get("value"));
435455
} else if (type.equals(SeriesType.sumofsquares.toString())) {
436-
leafFieldValueMap.get(source).get(field).getStatistics().setSum((Double) valueMap.get("value"));
456+
statistics.setSum((Double) valueMap.get("value"));
437457
} else if (type.equals(SeriesType.variance.toString())) {
438-
leafFieldValueMap.get(source).get(field).getStatistics().setSum((Double) valueMap.get("value"));
458+
statistics.setSum((Double) valueMap.get("value"));
439459
} else if (type.equals(SeriesType.percentile.toString())) {
440-
if (leafFieldValueMap.get(source).get(field).getStatistics().getPercentiles() == null) {
441-
leafFieldValueMap.get(source).get(field).getStatistics().setPercentiles(new ArrayList<>());
460+
if (statistics.getPercentiles() == null) {
461+
statistics.setPercentiles(new ArrayList<>());
442462
}
443463

444-
if (leafFieldValueMap.get(source).get(field).getStatistics().getPercentileRanks() == null) {
445-
leafFieldValueMap.get(source).get(field).getStatistics().setPercentileRanks(new ArrayList<>());
464+
if (statistics.getPercentileRanks() == null) {
465+
statistics.setPercentileRanks(new ArrayList<>());
446466
}
447467

448-
leafFieldValueMap.get(source).get(field).getStatistics().getPercentiles().add((Double) valueMap.get("value"));
449-
leafFieldValueMap.get(source).get(field).getStatistics().getPercentileRanks().add(percentile);
468+
statistics.getPercentiles().add((Double) valueMap.get("value"));
469+
statistics.getPercentileRanks().add(percentile);
450470
}
451471
}
452472

0 commit comments

Comments
 (0)