Skip to content

Commit

Permalink
Include comma separator in byte count for Dynatrace payload splitting
Browse files Browse the repository at this point in the history
The next comma that would be added in case a time series was already added was considered, but previous commas added were not counted.
  • Loading branch information
shakuzen committed Jan 11, 2019
1 parent 9d34a65 commit 508a594
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,7 @@ private List<DynatraceBatchedPayload> createPostMessageBodies(List<DynatraceTime
}
if (payload.length() > 0) {
payload.append(',');
totalByteCount++;
}
payload.append(json);
totalByteCount += jsonByteCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,9 +204,9 @@ void splitsWhenExactlyExceedingMaxByComma() {
List<DynatraceBatchedPayload> messages = meterRegistry.createPostMessages("my.type",
// Max bytes: 15330 (excluding header/footer, 15360 with header/footer)
Arrays.asList(createTimeSeriesWithDimensions(750), // 14861 bytes
createTimeSeriesWithDimensions(23, "asdfg"), // 469 bytes
createTimeSeriesWithDimensions(23, "asdfg"), // 469 bytes (overflows due to comma)
createTimeSeriesWithDimensions(750), // 14861 bytes
createTimeSeriesWithDimensions(23, "asdf") // 468 bytes
createTimeSeriesWithDimensions(23, "asdf") // 468 bytes + comma
));
assertThat(messages).hasSize(3);
assertThat(messages.get(0).metricCount).isEqualTo(1);
Expand All @@ -216,6 +216,20 @@ void splitsWhenExactlyExceedingMaxByComma() {
assertThat(messages.stream().map(message -> message.payload).allMatch(DynatraceMeterRegistryTest::isJSONValid)).isTrue();
}

@Test
void countsPreviousAndNextComma() {
List<DynatraceBatchedPayload> messages = meterRegistry.createPostMessages("my.type",
// Max bytes: 15330 (excluding header/footer, 15360 with header/footer)
Arrays.asList(createTimeSeriesWithDimensions(750), // 14861 bytes
createTimeSeriesWithDimensions(10, "asdf"), // 234 bytes + comma
createTimeSeriesWithDimensions(10, "asdf") // 234 bytes + comma = 15331 bytes (overflow)
));
assertThat(messages).hasSize(2);
assertThat(messages.get(0).metricCount).isEqualTo(2);
assertThat(messages.get(1).metricCount).isEqualTo(1);
assertThat(messages.stream().map(message -> message.payload).allMatch(DynatraceMeterRegistryTest::isJSONValid)).isTrue();
}

private DynatraceTimeSeries createTimeSeriesWithDimensions(int numberOfDimensions) {
return createTimeSeriesWithDimensions(numberOfDimensions, "some.metric");
}
Expand Down

0 comments on commit 508a594

Please sign in to comment.