diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/core/IndexerJobStats.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/core/IndexerJobStats.java index 5e59b4b19db..dc332fa8a4a 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/core/IndexerJobStats.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/core/IndexerJobStats.java @@ -31,8 +31,10 @@ public abstract class IndexerJobStats { public static ParseField NUM_INVOCATIONS = new ParseField("trigger_count"); public static ParseField INDEX_TIME_IN_MS = new ParseField("index_time_in_ms"); public static ParseField SEARCH_TIME_IN_MS = new ParseField("search_time_in_ms"); + public static ParseField PROCESSING_TIME_IN_MS = new ParseField("processing_time_in_ms"); public static ParseField INDEX_TOTAL = new ParseField("index_total"); public static ParseField SEARCH_TOTAL = new ParseField("search_total"); + public static ParseField PROCESSING_TOTAL = new ParseField("processing_total"); public static ParseField SEARCH_FAILURES = new ParseField("search_failures"); public static ParseField INDEX_FAILURES = new ParseField("index_failures"); @@ -44,11 +46,14 @@ public abstract class IndexerJobStats { protected final long indexTotal; protected final long searchTime; protected final long searchTotal; + protected final long processingTime; + protected final long processingTotal; protected final long indexFailures; protected final long searchFailures; public IndexerJobStats(long numPages, long numInputDocuments, long numOutputDocuments, long numInvocations, - long indexTime, long searchTime, long indexTotal, long searchTotal, long indexFailures, long searchFailures) { + long indexTime, long searchTime, long processingTime, long indexTotal, long searchTotal, long processingTotal, + long indexFailures, long searchFailures) { this.numPages = numPages; this.numInputDocuments = numInputDocuments; this.numOuputDocuments = numOutputDocuments; @@ -57,6 +62,8 @@ public abstract class IndexerJobStats { this.indexTotal = indexTotal; this.searchTime = searchTime; this.searchTotal = searchTotal; + this.processingTime = processingTime; + this.processingTotal = processingTotal; this.indexFailures = indexFailures; this.searchFailures = searchFailures; } @@ -117,6 +124,13 @@ public abstract class IndexerJobStats { return searchTime; } + /** + * Returns the time spent processing (cumulative) in milliseconds + */ + public long getProcessingTime() { + return processingTime; + } + /** * Returns the total number of indexing requests that have been processed * (Note: this is not the number of _documents_ that have been indexed) @@ -132,6 +146,14 @@ public abstract class IndexerJobStats { return searchTotal; } + /** + * Returns the total number of processing runs that have been made + */ + public long getProcessingTotal() { + return processingTotal; + } + + @Override public boolean equals(Object other) { if (this == other) { @@ -149,16 +171,19 @@ public abstract class IndexerJobStats { && Objects.equals(this.numInvocations, that.numInvocations) && Objects.equals(this.indexTime, that.indexTime) && Objects.equals(this.searchTime, that.searchTime) + && Objects.equals(this.processingTime, that.processingTime) && Objects.equals(this.indexFailures, that.indexFailures) && Objects.equals(this.searchFailures, that.searchFailures) && Objects.equals(this.searchTotal, that.searchTotal) + && Objects.equals(this.processingTotal, that.processingTotal) && Objects.equals(this.indexTotal, that.indexTotal); } @Override public int hashCode() { return Objects.hash(numPages, numInputDocuments, numOuputDocuments, numInvocations, - indexTime, searchTime, indexFailures, searchFailures, searchTotal, indexTotal); + indexTime, searchTime, processingTime, indexFailures, searchFailures, searchTotal, + indexTotal, processingTotal); } @Override @@ -172,6 +197,8 @@ public abstract class IndexerJobStats { + ", index_time_in_ms=" + indexTime + ", index_total=" + indexTotal + ", search_time_in_ms=" + searchTime - + ", search_total=" + searchTotal+ "}"; + + ", search_total=" + searchTotal + + ", processing_time_in_ms=" + processingTime + + ", processing_total=" + processingTotal + "}"; } } diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/rollup/GetRollupJobResponse.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/rollup/GetRollupJobResponse.java index 125bd6dab6c..b21a43d2cc7 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/rollup/GetRollupJobResponse.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/rollup/GetRollupJobResponse.java @@ -177,16 +177,18 @@ public class GetRollupJobResponse { public static class RollupIndexerJobStats extends IndexerJobStats { RollupIndexerJobStats(long numPages, long numInputDocuments, long numOuputDocuments, long numInvocations, - long indexTime, long indexTotal, long searchTime, long searchTotal, long indexFailures, long searchFailures) { + long indexTime, long indexTotal, long searchTime, long searchTotal, long processingTime, + long processingTotal, long indexFailures, long searchFailures) { super(numPages, numInputDocuments, numOuputDocuments, numInvocations, - indexTime, searchTime, indexTotal, searchTotal, indexFailures, searchFailures); + indexTime, searchTime, processingTime, indexTotal, searchTotal, processingTotal, indexFailures, searchFailures); } private static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>( STATS.getPreferredName(), true, args -> new RollupIndexerJobStats((long) args[0], (long) args[1], (long) args[2], (long) args[3], - (long) args[4], (long) args[5], (long) args[6], (long) args[7], (long) args[8], (long) args[9])); + (long) args[4], (long) args[5], (long) args[6], (long) args[7], (long) args[8], (long) args[9], + (long) args[10], (long) args[11])); static { PARSER.declareLong(constructorArg(), NUM_PAGES); PARSER.declareLong(constructorArg(), NUM_INPUT_DOCUMENTS); @@ -196,6 +198,8 @@ public class GetRollupJobResponse { PARSER.declareLong(constructorArg(), INDEX_TOTAL); PARSER.declareLong(constructorArg(), SEARCH_TIME_IN_MS); PARSER.declareLong(constructorArg(), SEARCH_TOTAL); + PARSER.declareLong(constructorArg(), PROCESSING_TIME_IN_MS); + PARSER.declareLong(constructorArg(), PROCESSING_TOTAL); PARSER.declareLong(constructorArg(), INDEX_FAILURES); PARSER.declareLong(constructorArg(), SEARCH_FAILURES); } diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/transforms/TransformIndexerStats.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/transforms/TransformIndexerStats.java index 2a04c6ea45e..e3a0032e55b 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/transforms/TransformIndexerStats.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/transforms/TransformIndexerStats.java @@ -27,7 +27,6 @@ import org.elasticsearch.common.xcontent.XContentParser; import java.io.IOException; import java.util.Objects; -import static org.elasticsearch.common.xcontent.ConstructingObjectParser.constructorArg; import static org.elasticsearch.common.xcontent.ConstructingObjectParser.optionalConstructorArg; public class TransformIndexerStats extends IndexerJobStats { @@ -39,21 +38,38 @@ public class TransformIndexerStats extends IndexerJobStats { public static final ConstructingObjectParser LENIENT_PARSER = new ConstructingObjectParser<>( NAME, true, - args -> new TransformIndexerStats((long) args[0], (long) args[1], (long) args[2], - (long) args[3], (long) args[4], (long) args[5], (long) args[6], (long) args[7], (long) args[8], (long) args[9], - (Double) args[10], (Double) args[11], (Double) args[12])); + args -> new TransformIndexerStats( + unboxSafe(args[0], 0L), + unboxSafe(args[1], 0L), + unboxSafe(args[2], 0L), + unboxSafe(args[3], 0L), + unboxSafe(args[4], 0L), + unboxSafe(args[5], 0L), + unboxSafe(args[6], 0L), + unboxSafe(args[7], 0L), + unboxSafe(args[8], 0L), + unboxSafe(args[9], 0L), + unboxSafe(args[10], 0L), + unboxSafe(args[11], 0L), + unboxSafe(args[12], 0.0), + unboxSafe(args[13], 0.0), + unboxSafe(args[14], 0.0) + ) + ); static { - LENIENT_PARSER.declareLong(constructorArg(), NUM_PAGES); - LENIENT_PARSER.declareLong(constructorArg(), NUM_INPUT_DOCUMENTS); - LENIENT_PARSER.declareLong(constructorArg(), NUM_OUTPUT_DOCUMENTS); - LENIENT_PARSER.declareLong(constructorArg(), NUM_INVOCATIONS); - LENIENT_PARSER.declareLong(constructorArg(), INDEX_TIME_IN_MS); - LENIENT_PARSER.declareLong(constructorArg(), SEARCH_TIME_IN_MS); - LENIENT_PARSER.declareLong(constructorArg(), INDEX_TOTAL); - LENIENT_PARSER.declareLong(constructorArg(), SEARCH_TOTAL); - LENIENT_PARSER.declareLong(constructorArg(), INDEX_FAILURES); - LENIENT_PARSER.declareLong(constructorArg(), SEARCH_FAILURES); + LENIENT_PARSER.declareLong(optionalConstructorArg(), NUM_PAGES); + LENIENT_PARSER.declareLong(optionalConstructorArg(), NUM_INPUT_DOCUMENTS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), NUM_OUTPUT_DOCUMENTS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), NUM_INVOCATIONS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), INDEX_TIME_IN_MS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), SEARCH_TIME_IN_MS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), PROCESSING_TIME_IN_MS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), INDEX_TOTAL); + LENIENT_PARSER.declareLong(optionalConstructorArg(), SEARCH_TOTAL); + LENIENT_PARSER.declareLong(optionalConstructorArg(), PROCESSING_TOTAL); + LENIENT_PARSER.declareLong(optionalConstructorArg(), INDEX_FAILURES); + LENIENT_PARSER.declareLong(optionalConstructorArg(), SEARCH_FAILURES); LENIENT_PARSER.declareDouble(optionalConstructorArg(), EXPONENTIAL_AVG_CHECKPOINT_DURATION_MS); LENIENT_PARSER.declareDouble(optionalConstructorArg(), EXPONENTIAL_AVG_DOCUMENTS_INDEXED); LENIENT_PARSER.declareDouble(optionalConstructorArg(), EXPONENTIAL_AVG_DOCUMENTS_PROCESSED); @@ -67,16 +83,40 @@ public class TransformIndexerStats extends IndexerJobStats { private final double expAvgDocumentsIndexed; private final double expAvgDocumentsProcessed; - public TransformIndexerStats(long numPages, long numInputDocuments, long numOuputDocuments, - long numInvocations, long indexTime, long searchTime, - long indexTotal, long searchTotal, long indexFailures, long searchFailures, - Double expAvgCheckpointDurationMs, Double expAvgDocumentsIndexed, - Double expAvgDocumentsProcessed) { - super(numPages, numInputDocuments, numOuputDocuments, numInvocations, indexTime, searchTime, - indexTotal, searchTotal, indexFailures, searchFailures); - this.expAvgCheckpointDurationMs = expAvgCheckpointDurationMs == null ? 0.0 : expAvgCheckpointDurationMs; - this.expAvgDocumentsIndexed = expAvgDocumentsIndexed == null ? 0.0 : expAvgDocumentsIndexed; - this.expAvgDocumentsProcessed = expAvgDocumentsProcessed == null ? 0.0 : expAvgDocumentsProcessed; + public TransformIndexerStats( + long numPages, + long numInputDocuments, + long numOuputDocuments, + long numInvocations, + long indexTime, + long searchTime, + long processingTime, + long indexTotal, + long searchTotal, + long processingTotal, + long indexFailures, + long searchFailures, + double expAvgCheckpointDurationMs, + double expAvgDocumentsIndexed, + double expAvgDocumentsProcessed + ) { + super( + numPages, + numInputDocuments, + numOuputDocuments, + numInvocations, + indexTime, + searchTime, + processingTime, + indexTotal, + searchTotal, + processingTotal, + indexFailures, + searchFailures + ); + this.expAvgCheckpointDurationMs = expAvgCheckpointDurationMs; + this.expAvgDocumentsIndexed = expAvgDocumentsIndexed; + this.expAvgDocumentsProcessed = expAvgDocumentsProcessed; } public double getExpAvgCheckpointDurationMs() { @@ -109,10 +149,12 @@ public class TransformIndexerStats extends IndexerJobStats { && Objects.equals(this.numInvocations, that.numInvocations) && Objects.equals(this.indexTime, that.indexTime) && Objects.equals(this.searchTime, that.searchTime) + && Objects.equals(this.processingTime, that.processingTime) && Objects.equals(this.indexFailures, that.indexFailures) && Objects.equals(this.searchFailures, that.searchFailures) && Objects.equals(this.indexTotal, that.indexTotal) && Objects.equals(this.searchTotal, that.searchTotal) + && Objects.equals(this.processingTotal, that.processingTotal) && Objects.equals(this.expAvgCheckpointDurationMs, that.expAvgCheckpointDurationMs) && Objects.equals(this.expAvgDocumentsIndexed, that.expAvgDocumentsIndexed) && Objects.equals(this.expAvgDocumentsProcessed, that.expAvgDocumentsProcessed); @@ -120,8 +162,31 @@ public class TransformIndexerStats extends IndexerJobStats { @Override public int hashCode() { - return Objects.hash(numPages, numInputDocuments, numOuputDocuments, numInvocations, - indexTime, searchTime, indexFailures, searchFailures, indexTotal, searchTotal, - expAvgCheckpointDurationMs, expAvgDocumentsIndexed, expAvgDocumentsProcessed); + return Objects.hash( + numPages, + numInputDocuments, + numOuputDocuments, + numInvocations, + indexTime, + searchTime, + processingTime, + indexFailures, + searchFailures, + indexTotal, + searchTotal, + processingTotal, + expAvgCheckpointDurationMs, + expAvgDocumentsIndexed, + expAvgDocumentsProcessed + ); + } + + @SuppressWarnings("unchecked") + private static T unboxSafe(Object l, T default_value) { + if (l == null) { + return default_value; + } else { + return (T) l; + } } } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/TransformIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/TransformIT.java index 4135c64da16..9dd347912fd 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/TransformIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/TransformIT.java @@ -442,6 +442,8 @@ public class TransformIT extends ESRestHighLevelClientTestCase { 0L, 0L, 0L, + 0L, + 0L, 0.0, 0.0, 0.0); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/rollup/GetRollupJobResponseTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/rollup/GetRollupJobResponseTests.java index 67e118215d7..8130ee071b9 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/rollup/GetRollupJobResponseTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/rollup/GetRollupJobResponseTests.java @@ -64,8 +64,9 @@ public class GetRollupJobResponseTests extends ESTestCase { private RollupIndexerJobStats randomStats() { return new RollupIndexerJobStats(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), - randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), - randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong()); + randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), + randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), + randomNonNegativeLong()); } private RollupJobStatus randomStatus() { @@ -124,6 +125,8 @@ public class GetRollupJobResponseTests extends ESTestCase { builder.field(IndexerJobStats.SEARCH_TIME_IN_MS.getPreferredName(), stats.getSearchTime()); builder.field(IndexerJobStats.SEARCH_TOTAL.getPreferredName(), stats.getSearchTotal()); builder.field(IndexerJobStats.SEARCH_FAILURES.getPreferredName(), stats.getSearchFailures()); + builder.field(IndexerJobStats.PROCESSING_TIME_IN_MS.getPreferredName(), stats.getProcessingTime()); + builder.field(IndexerJobStats.PROCESSING_TOTAL.getPreferredName(), stats.getProcessingTotal()); builder.endObject(); } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/TransformIndexerStatsTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/TransformIndexerStatsTests.java index 018cab89b0f..e06a7cddb93 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/TransformIndexerStatsTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/TransformIndexerStatsTests.java @@ -31,41 +31,103 @@ public class TransformIndexerStatsTests extends ESTestCase { public void testFromXContent() throws IOException { xContentTester( - this::createParser, - TransformIndexerStatsTests::randomStats, - TransformIndexerStatsTests::toXContent, - TransformIndexerStats::fromXContent) - .supportsUnknownFields(true) - .test(); + this::createParser, + TransformIndexerStatsTests::randomStats, + TransformIndexerStatsTests::toXContent, + TransformIndexerStats::fromXContent + ).supportsUnknownFields(true).test(); } public static TransformIndexerStats randomStats() { - return new TransformIndexerStats(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), - randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), - randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), - randomBoolean() ? null : randomDouble(), - randomBoolean() ? null : randomDouble(), - randomBoolean() ? null : randomDouble()); + return new TransformIndexerStats( + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomNonNegativeLong(), + randomDouble(), + randomDouble(), + randomDouble() + ); } public static void toXContent(TransformIndexerStats stats, XContentBuilder builder) throws IOException { builder.startObject(); - builder.field(IndexerJobStats.NUM_PAGES.getPreferredName(), stats.getNumPages()); - builder.field(IndexerJobStats.NUM_INPUT_DOCUMENTS.getPreferredName(), stats.getNumDocuments()); - builder.field(IndexerJobStats.NUM_OUTPUT_DOCUMENTS.getPreferredName(), stats.getOutputDocuments()); - builder.field(IndexerJobStats.NUM_INVOCATIONS.getPreferredName(), stats.getNumInvocations()); - builder.field(IndexerJobStats.INDEX_TIME_IN_MS.getPreferredName(), stats.getIndexTime()); - builder.field(IndexerJobStats.INDEX_TOTAL.getPreferredName(), stats.getIndexTotal()); - builder.field(IndexerJobStats.INDEX_FAILURES.getPreferredName(), stats.getIndexFailures()); - builder.field(IndexerJobStats.SEARCH_TIME_IN_MS.getPreferredName(), stats.getSearchTime()); - builder.field(IndexerJobStats.SEARCH_TOTAL.getPreferredName(), stats.getSearchTotal()); - builder.field(IndexerJobStats.SEARCH_FAILURES.getPreferredName(), stats.getSearchFailures()); - builder.field(TransformIndexerStats.EXPONENTIAL_AVG_CHECKPOINT_DURATION_MS.getPreferredName(), - stats.getExpAvgCheckpointDurationMs()); - builder.field(TransformIndexerStats.EXPONENTIAL_AVG_DOCUMENTS_INDEXED.getPreferredName(), - stats.getExpAvgDocumentsIndexed()); - builder.field(TransformIndexerStats.EXPONENTIAL_AVG_DOCUMENTS_PROCESSED.getPreferredName(), - stats.getExpAvgDocumentsProcessed()); + if (randomBoolean()) { + builder.field(IndexerJobStats.NUM_PAGES.getPreferredName(), stats.getNumPages()); + builder.field(IndexerJobStats.NUM_INPUT_DOCUMENTS.getPreferredName(), stats.getNumDocuments()); + builder.field(IndexerJobStats.NUM_OUTPUT_DOCUMENTS.getPreferredName(), stats.getOutputDocuments()); + builder.field(IndexerJobStats.NUM_INVOCATIONS.getPreferredName(), stats.getNumInvocations()); + builder.field(IndexerJobStats.INDEX_TIME_IN_MS.getPreferredName(), stats.getIndexTime()); + builder.field(IndexerJobStats.INDEX_TOTAL.getPreferredName(), stats.getIndexTotal()); + builder.field(IndexerJobStats.INDEX_FAILURES.getPreferredName(), stats.getIndexFailures()); + builder.field(IndexerJobStats.SEARCH_TIME_IN_MS.getPreferredName(), stats.getSearchTime()); + builder.field(IndexerJobStats.SEARCH_TOTAL.getPreferredName(), stats.getSearchTotal()); + builder.field(IndexerJobStats.PROCESSING_TIME_IN_MS.getPreferredName(), stats.getProcessingTime()); + builder.field(IndexerJobStats.PROCESSING_TOTAL.getPreferredName(), stats.getProcessingTotal()); + builder.field(IndexerJobStats.SEARCH_FAILURES.getPreferredName(), stats.getSearchFailures()); + builder.field( + TransformIndexerStats.EXPONENTIAL_AVG_CHECKPOINT_DURATION_MS.getPreferredName(), + stats.getExpAvgCheckpointDurationMs() + ); + builder.field(TransformIndexerStats.EXPONENTIAL_AVG_DOCUMENTS_INDEXED.getPreferredName(), stats.getExpAvgDocumentsIndexed()); + builder.field( + TransformIndexerStats.EXPONENTIAL_AVG_DOCUMENTS_PROCESSED.getPreferredName(), + stats.getExpAvgDocumentsProcessed() + ); + } else { + // a toXContent version which leaves out field with value 0 (simulating the case that an older version misses a field) + xContentFieldIfNotZero(builder, IndexerJobStats.NUM_PAGES.getPreferredName(), stats.getNumPages()); + xContentFieldIfNotZero(builder, IndexerJobStats.NUM_INPUT_DOCUMENTS.getPreferredName(), stats.getNumDocuments()); + xContentFieldIfNotZero(builder, IndexerJobStats.NUM_OUTPUT_DOCUMENTS.getPreferredName(), stats.getOutputDocuments()); + xContentFieldIfNotZero(builder, IndexerJobStats.NUM_INVOCATIONS.getPreferredName(), stats.getNumInvocations()); + xContentFieldIfNotZero(builder, IndexerJobStats.INDEX_TIME_IN_MS.getPreferredName(), stats.getIndexTime()); + xContentFieldIfNotZero(builder, IndexerJobStats.INDEX_TOTAL.getPreferredName(), stats.getIndexTotal()); + xContentFieldIfNotZero(builder, IndexerJobStats.INDEX_FAILURES.getPreferredName(), stats.getIndexFailures()); + xContentFieldIfNotZero(builder, IndexerJobStats.SEARCH_TIME_IN_MS.getPreferredName(), stats.getSearchTime()); + xContentFieldIfNotZero(builder, IndexerJobStats.SEARCH_TOTAL.getPreferredName(), stats.getSearchTotal()); + xContentFieldIfNotZero(builder, IndexerJobStats.PROCESSING_TIME_IN_MS.getPreferredName(), stats.getProcessingTime()); + xContentFieldIfNotZero(builder, IndexerJobStats.PROCESSING_TOTAL.getPreferredName(), stats.getProcessingTotal()); + xContentFieldIfNotZero(builder, IndexerJobStats.SEARCH_FAILURES.getPreferredName(), stats.getSearchFailures()); + xContentFieldIfNotZero( + builder, + TransformIndexerStats.EXPONENTIAL_AVG_CHECKPOINT_DURATION_MS.getPreferredName(), + stats.getExpAvgCheckpointDurationMs() + ); + xContentFieldIfNotZero( + builder, + TransformIndexerStats.EXPONENTIAL_AVG_DOCUMENTS_INDEXED.getPreferredName(), + stats.getExpAvgDocumentsIndexed() + ); + xContentFieldIfNotZero( + builder, + TransformIndexerStats.EXPONENTIAL_AVG_DOCUMENTS_PROCESSED.getPreferredName(), + stats.getExpAvgDocumentsProcessed() + ); + } builder.endObject(); } + + private static XContentBuilder xContentFieldIfNotZero(XContentBuilder builder, String name, long value) throws IOException { + if (value > 0) { + builder.field(name, value); + } + + return builder; + } + + private static XContentBuilder xContentFieldIfNotZero(XContentBuilder builder, String name, double value) throws IOException { + if (value > 0.0) { + builder.field(name, value); + } + + return builder; + } } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/hlrc/TransformIndexerStatsTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/hlrc/TransformIndexerStatsTests.java index 50c98bcd8f0..eb74164be53 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/hlrc/TransformIndexerStatsTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/hlrc/TransformIndexerStatsTests.java @@ -30,17 +30,31 @@ import static org.elasticsearch.client.transform.transforms.hlrc.TransformStatsT public class TransformIndexerStatsTests extends AbstractResponseTestCase< org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats, - TransformIndexerStats> { + TransformIndexerStats> { + + public static org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats randomStats() { + return new org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats( + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomDouble(), + randomDouble(), + randomDouble() + ); + } @Override protected org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats createServerTestInstance(XContentType xContentType) { - return new org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats(randomLongBetween(10L, 10000L), - randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), - randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), - randomLongBetween(0L, 10000L), - randomBoolean() ? null : randomDouble(), - randomBoolean() ? null : randomDouble(), - randomBoolean() ? null : randomDouble()); + return randomStats(); } @Override @@ -49,8 +63,10 @@ public class TransformIndexerStatsTests extends AbstractResponseTestCase< } @Override - protected void assertInstances(org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats serverTestInstance, - TransformIndexerStats clientInstance) { + protected void assertInstances( + org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats serverTestInstance, + TransformIndexerStats clientInstance + ) { assertTransformIndexerStats(serverTestInstance, clientInstance); } } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/hlrc/TransformStatsTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/hlrc/TransformStatsTests.java index 63f6bffdf63..c732c425fe4 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/hlrc/TransformStatsTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/transform/transforms/hlrc/TransformStatsTests.java @@ -36,40 +36,36 @@ import java.util.Map; import static org.hamcrest.Matchers.equalTo; -public class TransformStatsTests extends AbstractResponseTestCase { public static org.elasticsearch.xpack.core.transform.transforms.NodeAttributes randomNodeAttributes() { int numberOfAttributes = randomIntBetween(1, 10); Map attributes = new HashMap<>(numberOfAttributes); - for(int i = 0; i < numberOfAttributes; i++) { + for (int i = 0; i < numberOfAttributes; i++) { String val = randomAlphaOfLength(10); - attributes.put("key-"+i, val); + attributes.put("key-" + i, val); } - return new org.elasticsearch.xpack.core.transform.transforms.NodeAttributes(randomAlphaOfLength(10), + return new org.elasticsearch.xpack.core.transform.transforms.NodeAttributes( randomAlphaOfLength(10), randomAlphaOfLength(10), randomAlphaOfLength(10), - attributes); + randomAlphaOfLength(10), + attributes + ); } - public static org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats randomStats() { - return new org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats(randomLongBetween(10L, 10000L), - randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), - randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), randomLongBetween(0L, 10000L), - randomLongBetween(0L, 10000L), - randomBoolean() ? null : randomDouble(), - randomBoolean() ? null : randomDouble(), - randomBoolean() ? null : randomDouble()); - } @Override protected org.elasticsearch.xpack.core.transform.transforms.TransformStats createServerTestInstance(XContentType xContentType) { - return new org.elasticsearch.xpack.core.transform.transforms.TransformStats(randomAlphaOfLength(10), + return new org.elasticsearch.xpack.core.transform.transforms.TransformStats( + randomAlphaOfLength(10), randomFrom(org.elasticsearch.xpack.core.transform.transforms.TransformStats.State.values()), randomBoolean() ? null : randomAlphaOfLength(100), randomBoolean() ? null : randomNodeAttributes(), - randomStats(), - TransformCheckpointingInfoTests.randomTransformCheckpointingInfo()); + TransformIndexerStatsTests.randomStats(), + TransformCheckpointingInfoTests.randomTransformCheckpointingInfo() + ); } @Override @@ -78,8 +74,10 @@ public class TransformStatsTests extends AbstractResponseTestCase iterationResult = doProcess(searchResponse); @@ -355,11 +355,11 @@ public abstract class AsyncTwoPhaseIndexer doSaveState(finishAndSetState(), position.get(), () -> {}), e -> doSaveState(finishAndSetState(), position.get(), () -> {}))); - return; } @@ -369,7 +369,7 @@ public abstract class AsyncTwoPhaseIndexer { // TODO we should check items in the response and move after accordingly to @@ -390,6 +390,7 @@ public abstract class AsyncTwoPhaseIndexer= 0); numPages += n; @@ -157,6 +175,15 @@ public abstract class IndexerJobStats implements ToXContentObject, Writeable { searchTotal += 1; } + public void markStartProcessing() { + this.startProcessingTime = System.nanoTime(); + } + + public void markEndProcessing() { + processingTime += ((System.nanoTime() - startProcessingTime) / 1000000); + processingTotal += 1; + } + @Override public void writeTo(StreamOutput out) throws IOException { out.writeVLong(numPages); @@ -171,6 +198,10 @@ public abstract class IndexerJobStats implements ToXContentObject, Writeable { out.writeVLong(indexFailures); out.writeVLong(searchFailures); } + if (out.getVersion().onOrAfter(Version.V_7_7_0)) { + out.writeVLong(processingTime); + out.writeVLong(processingTotal); + } } @Override @@ -191,15 +222,17 @@ public abstract class IndexerJobStats implements ToXContentObject, Writeable { && Objects.equals(this.numInvocations, that.numInvocations) && Objects.equals(this.indexTime, that.indexTime) && Objects.equals(this.searchTime, that.searchTime) + && Objects.equals(this.processingTime, that.processingTime) && Objects.equals(this.indexFailures, that.indexFailures) && Objects.equals(this.searchFailures, that.searchFailures) && Objects.equals(this.indexTotal, that.indexTotal) - && Objects.equals(this.searchTotal, that.searchTotal); + && Objects.equals(this.searchTotal, that.searchTotal) + && Objects.equals(this.processingTotal, that.processingTotal); } @Override public int hashCode() { return Objects.hash(numPages, numInputDocuments, numOuputDocuments, numInvocations, - indexTime, searchTime, indexFailures, searchFailures, indexTotal, searchTotal); + indexTime, searchTime, processingTime, indexFailures, searchFailures, indexTotal, searchTotal, processingTotal); } } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/rollup/job/RollupIndexerJobStats.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/rollup/job/RollupIndexerJobStats.java index f038228ae76..2843358ceef 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/rollup/job/RollupIndexerJobStats.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/rollup/job/RollupIndexerJobStats.java @@ -27,15 +27,18 @@ public class RollupIndexerJobStats extends IndexerJobStats { private static ParseField NUM_INVOCATIONS = new ParseField("trigger_count"); private static ParseField INDEX_TIME_IN_MS = new ParseField("index_time_in_ms"); private static ParseField SEARCH_TIME_IN_MS = new ParseField("search_time_in_ms"); + private static ParseField PROCESSING_TIME_IN_MS = new ParseField("processing_time_in_ms"); private static ParseField INDEX_TOTAL = new ParseField("index_total"); private static ParseField SEARCH_TOTAL = new ParseField("search_total"); + private static ParseField PROCESSING_TOTAL = new ParseField("processing_total"); private static ParseField SEARCH_FAILURES = new ParseField("search_failures"); private static ParseField INDEX_FAILURES = new ParseField("index_failures"); public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(NAME.getPreferredName(), args -> new RollupIndexerJobStats((long) args[0], (long) args[1], (long) args[2], (long) args[3], - (long) args[4], (long) args[5], (long) args[6], (long) args[7], (long) args[8], (long) args[9])); + (long) args[4], (long) args[5], (long) args[6], (long) args[7], (long) args[8], (long) args[9], + (long) args[10], (long) args[11])); static { PARSER.declareLong(constructorArg(), NUM_PAGES); @@ -44,8 +47,10 @@ public class RollupIndexerJobStats extends IndexerJobStats { PARSER.declareLong(constructorArg(), NUM_INVOCATIONS); PARSER.declareLong(constructorArg(), INDEX_TIME_IN_MS); PARSER.declareLong(constructorArg(), SEARCH_TIME_IN_MS); + PARSER.declareLong(constructorArg(), PROCESSING_TIME_IN_MS); PARSER.declareLong(constructorArg(), INDEX_TOTAL); PARSER.declareLong(constructorArg(), SEARCH_TOTAL); + PARSER.declareLong(constructorArg(), PROCESSING_TOTAL); PARSER.declareLong(constructorArg(), INDEX_FAILURES); PARSER.declareLong(constructorArg(), SEARCH_FAILURES); } @@ -55,10 +60,10 @@ public class RollupIndexerJobStats extends IndexerJobStats { } public RollupIndexerJobStats(long numPages, long numInputDocuments, long numOuputDocuments, long numInvocations, - long indexTime, long searchTime, long indexTotal, long searchTotal, long indexFailures, - long searchFailures) { - super(numPages, numInputDocuments, numOuputDocuments, numInvocations, indexTime, searchTime, - indexTotal, searchTotal, indexFailures, searchFailures); + long indexTime, long searchTime, long processingTime, long indexTotal, long searchTotal, + long processingTotal, long indexFailures, long searchFailures) { + super(numPages, numInputDocuments, numOuputDocuments, numInvocations, indexTime, searchTime, processingTime, + indexTotal, searchTotal, processingTotal, indexFailures, searchFailures); } public RollupIndexerJobStats(StreamInput in) throws IOException { @@ -78,6 +83,8 @@ public class RollupIndexerJobStats extends IndexerJobStats { builder.field(SEARCH_TIME_IN_MS.getPreferredName(), searchTime); builder.field(SEARCH_TOTAL.getPreferredName(), searchTotal); builder.field(SEARCH_FAILURES.getPreferredName(), searchFailures); + builder.field(PROCESSING_TIME_IN_MS.getPreferredName(), processingTime); + builder.field(PROCESSING_TOTAL.getPreferredName(), processingTotal); builder.endObject(); return builder; } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/transforms/TransformIndexerStats.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/transforms/TransformIndexerStats.java index 452ca902056..2422f0636ff 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/transforms/TransformIndexerStats.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/transforms/TransformIndexerStats.java @@ -19,7 +19,6 @@ import org.elasticsearch.xpack.core.indexing.IndexerJobStats; import java.io.IOException; import java.util.Objects; -import static org.elasticsearch.common.xcontent.ConstructingObjectParser.constructorArg; import static org.elasticsearch.common.xcontent.ConstructingObjectParser.optionalConstructorArg; public class TransformIndexerStats extends IndexerJobStats { @@ -33,8 +32,10 @@ public class TransformIndexerStats extends IndexerJobStats { public static ParseField NUM_INVOCATIONS = new ParseField("trigger_count"); public static ParseField INDEX_TIME_IN_MS = new ParseField("index_time_in_ms"); public static ParseField SEARCH_TIME_IN_MS = new ParseField("search_time_in_ms"); + public static ParseField PROCESSING_TIME_IN_MS = new ParseField("processing_time_in_ms"); public static ParseField INDEX_TOTAL = new ParseField("index_total"); public static ParseField SEARCH_TOTAL = new ParseField("search_total"); + public static ParseField PROCESSING_TOTAL = new ParseField("processing_total"); public static ParseField SEARCH_FAILURES = new ParseField("search_failures"); public static ParseField INDEX_FAILURES = new ParseField("index_failures"); public static ParseField EXPONENTIAL_AVG_CHECKPOINT_DURATION_MS = new ParseField("exponential_avg_checkpoint_duration_ms"); @@ -50,33 +51,37 @@ public class TransformIndexerStats extends IndexerJobStats { NAME, true, args -> new TransformIndexerStats( - (long) args[0], - (long) args[1], - (long) args[2], - (long) args[3], - (long) args[4], - (long) args[5], - (long) args[6], - (long) args[7], - (long) args[8], - (long) args[9], - (Double) args[10], - (Double) args[11], - (Double) args[12] + unboxSafe(args[0], 0L), + unboxSafe(args[1], 0L), + unboxSafe(args[2], 0L), + unboxSafe(args[3], 0L), + unboxSafe(args[4], 0L), + unboxSafe(args[5], 0L), + unboxSafe(args[6], 0L), + unboxSafe(args[7], 0L), + unboxSafe(args[8], 0L), + unboxSafe(args[9], 0L), + unboxSafe(args[10], 0L), + unboxSafe(args[11], 0L), + unboxSafe(args[12], 0.0), + unboxSafe(args[13], 0.0), + unboxSafe(args[14], 0.0) ) ); static { - LENIENT_PARSER.declareLong(constructorArg(), NUM_PAGES); - LENIENT_PARSER.declareLong(constructorArg(), NUM_INPUT_DOCUMENTS); - LENIENT_PARSER.declareLong(constructorArg(), NUM_OUTPUT_DOCUMENTS); - LENIENT_PARSER.declareLong(constructorArg(), NUM_INVOCATIONS); - LENIENT_PARSER.declareLong(constructorArg(), INDEX_TIME_IN_MS); - LENIENT_PARSER.declareLong(constructorArg(), SEARCH_TIME_IN_MS); - LENIENT_PARSER.declareLong(constructorArg(), INDEX_TOTAL); - LENIENT_PARSER.declareLong(constructorArg(), SEARCH_TOTAL); - LENIENT_PARSER.declareLong(constructorArg(), INDEX_FAILURES); - LENIENT_PARSER.declareLong(constructorArg(), SEARCH_FAILURES); + LENIENT_PARSER.declareLong(optionalConstructorArg(), NUM_PAGES); + LENIENT_PARSER.declareLong(optionalConstructorArg(), NUM_INPUT_DOCUMENTS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), NUM_OUTPUT_DOCUMENTS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), NUM_INVOCATIONS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), INDEX_TIME_IN_MS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), SEARCH_TIME_IN_MS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), PROCESSING_TIME_IN_MS); + LENIENT_PARSER.declareLong(optionalConstructorArg(), INDEX_TOTAL); + LENIENT_PARSER.declareLong(optionalConstructorArg(), SEARCH_TOTAL); + LENIENT_PARSER.declareLong(optionalConstructorArg(), PROCESSING_TOTAL); + LENIENT_PARSER.declareLong(optionalConstructorArg(), INDEX_FAILURES); + LENIENT_PARSER.declareLong(optionalConstructorArg(), SEARCH_FAILURES); LENIENT_PARSER.declareDouble(optionalConstructorArg(), EXPONENTIAL_AVG_CHECKPOINT_DURATION_MS); LENIENT_PARSER.declareDouble(optionalConstructorArg(), EXPONENTIAL_AVG_DOCUMENTS_INDEXED); LENIENT_PARSER.declareDouble(optionalConstructorArg(), EXPONENTIAL_AVG_DOCUMENTS_PROCESSED); @@ -100,13 +105,15 @@ public class TransformIndexerStats extends IndexerJobStats { long numInvocations, long indexTime, long searchTime, + long processingTime, long indexTotal, long searchTotal, + long processingTotal, long indexFailures, long searchFailures, - Double expAvgCheckpointDurationMs, - Double expAvgDocumentsIndexed, - Double expAvgDocumentsProcessed + double expAvgCheckpointDurationMs, + double expAvgDocumentsIndexed, + double expAvgDocumentsProcessed ) { super( numPages, @@ -115,14 +122,16 @@ public class TransformIndexerStats extends IndexerJobStats { numInvocations, indexTime, searchTime, + processingTime, indexTotal, searchTotal, + processingTotal, indexFailures, searchFailures ); - this.expAvgCheckpointDurationMs = expAvgCheckpointDurationMs == null ? 0.0 : expAvgCheckpointDurationMs; - this.expAvgDocumentsIndexed = expAvgDocumentsIndexed == null ? 0.0 : expAvgDocumentsIndexed; - this.expAvgDocumentsProcessed = expAvgDocumentsProcessed == null ? 0.0 : expAvgDocumentsProcessed; + this.expAvgCheckpointDurationMs = expAvgCheckpointDurationMs; + this.expAvgDocumentsIndexed = expAvgDocumentsIndexed; + this.expAvgDocumentsProcessed = expAvgDocumentsProcessed; } public TransformIndexerStats(TransformIndexerStats other) { @@ -133,8 +142,10 @@ public class TransformIndexerStats extends IndexerJobStats { other.numInvocations, other.indexTime, other.searchTime, + other.processingTime, other.indexTotal, other.searchTotal, + other.processingTotal, other.indexFailures, other.searchFailures, other.expAvgCheckpointDurationMs, @@ -181,6 +192,8 @@ public class TransformIndexerStats extends IndexerJobStats { builder.field(SEARCH_TIME_IN_MS.getPreferredName(), searchTime); builder.field(SEARCH_TOTAL.getPreferredName(), searchTotal); builder.field(SEARCH_FAILURES.getPreferredName(), searchFailures); + builder.field(PROCESSING_TIME_IN_MS.getPreferredName(), processingTime); + builder.field(PROCESSING_TOTAL.getPreferredName(), processingTotal); builder.field(EXPONENTIAL_AVG_CHECKPOINT_DURATION_MS.getPreferredName(), this.expAvgCheckpointDurationMs); builder.field(EXPONENTIAL_AVG_DOCUMENTS_INDEXED.getPreferredName(), this.expAvgDocumentsIndexed); builder.field(EXPONENTIAL_AVG_DOCUMENTS_PROCESSED.getPreferredName(), this.expAvgDocumentsProcessed); @@ -238,10 +251,12 @@ public class TransformIndexerStats extends IndexerJobStats { && Objects.equals(this.numInvocations, that.numInvocations) && Objects.equals(this.indexTime, that.indexTime) && Objects.equals(this.searchTime, that.searchTime) + && Objects.equals(this.processingTime, that.processingTime) && Objects.equals(this.indexFailures, that.indexFailures) && Objects.equals(this.searchFailures, that.searchFailures) && Objects.equals(this.indexTotal, that.indexTotal) && Objects.equals(this.searchTotal, that.searchTotal) + && Objects.equals(this.processingTotal, that.processingTotal) && Objects.equals(this.expAvgCheckpointDurationMs, that.expAvgCheckpointDurationMs) && Objects.equals(this.expAvgDocumentsIndexed, that.expAvgDocumentsIndexed) && Objects.equals(this.expAvgDocumentsProcessed, that.expAvgDocumentsProcessed); @@ -256,10 +271,12 @@ public class TransformIndexerStats extends IndexerJobStats { numInvocations, indexTime, searchTime, + processingTime, indexFailures, searchFailures, indexTotal, searchTotal, + processingTotal, expAvgCheckpointDurationMs, expAvgDocumentsIndexed, expAvgDocumentsProcessed @@ -278,4 +295,13 @@ public class TransformIndexerStats extends IndexerJobStats { throw new RuntimeException(e); } } + + @SuppressWarnings("unchecked") + private static T unboxSafe(Object l, T default_value) { + if (l == null) { + return default_value; + } else { + return (T) l; + } + } } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/transforms/persistence/TransformInternalIndexConstants.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/transforms/persistence/TransformInternalIndexConstants.java index 474943f0e8c..59a80f6c959 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/transforms/persistence/TransformInternalIndexConstants.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/transforms/persistence/TransformInternalIndexConstants.java @@ -24,7 +24,7 @@ public final class TransformInternalIndexConstants { // internal index // version is not a rollover pattern, however padded because sort is string based - public static final String INDEX_VERSION = "004"; + public static final String INDEX_VERSION = "005"; public static final String INDEX_PATTERN = ".transform-internal-"; public static final String LATEST_INDEX_VERSIONED_NAME = INDEX_PATTERN + INDEX_VERSION; public static final String LATEST_INDEX_NAME = LATEST_INDEX_VERSIONED_NAME; diff --git a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/rollup/job/JobWrapperSerializingTests.java b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/rollup/job/JobWrapperSerializingTests.java index cca60bbf33e..c0d97d75ad2 100644 --- a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/rollup/job/JobWrapperSerializingTests.java +++ b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/rollup/job/JobWrapperSerializingTests.java @@ -43,7 +43,8 @@ public class JobWrapperSerializingTests extends AbstractSerializingTestCase { + public static TransformIndexerStats randomStats() { + return new TransformIndexerStats( + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomLongBetween(0L, 10000L), + randomDouble(), + randomDouble(), + randomDouble() + ); + } + + @Override + protected boolean supportsUnknownFields() { + return true; + } + @Override protected TransformIndexerStats createTestInstance() { return randomStats(); @@ -30,24 +59,6 @@ public class TransformIndexerStatsTests extends AbstractSerializingTestCase 0) { + builder.field(name, value); + } + + return builder; + } + + private static XContentBuilder xContentFieldIfNotZero(XContentBuilder builder, String name, double value) throws IOException { + if (value > 0.0) { + builder.field(name, value); + } + + return builder; + } } diff --git a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/transform/transforms/TransformStatsTests.java b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/transform/transforms/TransformStatsTests.java index ee4bd9a47b7..cbaacf85277 100644 --- a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/transform/transforms/TransformStatsTests.java +++ b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/transform/transforms/TransformStatsTests.java @@ -69,7 +69,7 @@ public class TransformStatsTests extends AbstractSerializingTestCase