From cb79b9cf5529dcb7a5b139539ee1a01d066eb056 Mon Sep 17 00:00:00 2001 From: Ievgenii Saikevych Date: Thu, 29 Nov 2018 13:33:47 -0800 Subject: [PATCH] Drops whole measurement list if some of value is negative (#208) --- packages/opencensus-core/src/stats/stats.ts | 21 +++++++++++++++------ packages/opencensus-core/test/test-stats.ts | 17 +++++++++-------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/packages/opencensus-core/src/stats/stats.ts b/packages/opencensus-core/src/stats/stats.ts index 8d9b615e9..671b51b22 100644 --- a/packages/opencensus-core/src/stats/stats.ts +++ b/packages/opencensus-core/src/stats/stats.ts @@ -114,18 +114,27 @@ export class Stats { return {name, unit, type: MeasureType.INT64, description}; } + /** + * Verifies whether all measurements has positive value + * @param measurements A list of measurements + * @returns {boolean} Whether values is positive + */ + private hasNegativeValue(measurements: Measurement[]): boolean { + return measurements.some(measurement => measurement.value < 0); + } + /** * Updates all views with the new measurements. * @param measurements A list of measurements to record */ record(...measurements: Measurement[]) { - for (const measurement of measurements) { - if (measurement.value < 0) { - this.logger.warn(`Dropping value ${ - measurement.value}, value to record must be non-negative.`); - break; - } + if (this.hasNegativeValue(measurements)) { + this.logger.warn(`Dropping measurments ${measurements}, value to record + must be non-negative.`); + return; + } + for (const measurement of measurements) { const views = this.registeredViews[measurement.measure.name]; if (!views) { break; diff --git a/packages/opencensus-core/test/test-stats.ts b/packages/opencensus-core/test/test-stats.ts index 4c79ca363..9da9c6e73 100644 --- a/packages/opencensus-core/test/test-stats.ts +++ b/packages/opencensus-core/test/test-stats.ts @@ -176,13 +176,14 @@ describe('Stats', () => { assert.strictEqual(aggregationData.value, measurement2.value); }); - it('should stop record on negative value of multiple measurement', () => { - const measurments = [ - {measure, tags, value: 1}, {measure, tags, value: -1}, - {measure, tags, value: 1} - ]; - stats.record(...measurments); - assert.equal(testExporter.recordedMeasurements.length, 1); - }); + it('should skip whole multiple measurment if one of value is negative', + () => { + const measurments = [ + {measure, tags, value: 1}, {measure, tags, value: -1}, + {measure, tags, value: 1} + ]; + stats.record(...measurments); + assert.equal(testExporter.recordedMeasurements.length, 0); + }); }); });