def test_populate_buckets(self): pb = metrics_pb2.MetricsData() m = metrics.DistributionMetric('test') d = distribution.Distribution(distribution.FixedWidthBucketer(10)) d.add(5) d.add(15) d.add(35) d.add(65) m._populate_value(pb, d, 1234) self.assertEquals([1, 1, -1, 1, -2, 1], pb.distribution.bucket) self.assertEquals(0, pb.distribution.underflow) self.assertEquals(0, pb.distribution.overflow) self.assertEquals(30, pb.distribution.mean) pb = metrics_pb2.MetricsData() d = distribution.Distribution( distribution.FixedWidthBucketer(10, num_finite_buckets=1)) d.add(5) d.add(15) d.add(25) m._populate_value(pb, d, 1234) self.assertEquals([1], pb.distribution.bucket) self.assertEquals(0, pb.distribution.underflow) self.assertEquals(2, pb.distribution.overflow) self.assertEquals(15, pb.distribution.mean)
def test_add_custom_bucketer(self): m = metrics.DistributionMetric( 'test', bucketer=distribution.FixedWidthBucketer(10)) m.add(1) m.add(10) m.add(100) self.assertEquals({1: 1, 2: 1, 11: 1}, m.get().buckets) self.assertEquals(111, m.get().sum) self.assertEquals(3, m.get().count)
def test_bucket_for_value(self): b = distribution.FixedWidthBucketer(width=10, num_finite_buckets=5) self.assertEquals(0, b.bucket_for_value(float('-Inf'))) self.assertEquals(0, b.bucket_for_value(-100)) self.assertEquals(0, b.bucket_for_value(-1)) self.assertEquals(1, b.bucket_for_value(0)) self.assertEquals(5, b.bucket_for_value(45)) self.assertEquals(6, b.bucket_for_value(51)) self.assertEquals(6, b.bucket_for_value(100000)) self.assertEquals(6, b.bucket_for_value(float('Inf')))
def test_populate_buckets_last_zero(self): pb = metrics_pb2.MetricsData() m = metrics.DistributionMetric('test') d = distribution.Distribution( distribution.FixedWidthBucketer(10, num_finite_buckets=10)) d.add(5) d.add(105) m._populate_value(pb, d, 1234) self.assertEquals([1], pb.distribution.bucket) self.assertEquals(1, pb.distribution.overflow)
def test_populate_buckets_underflow(self): pb = metrics_pb2.MetricsData() m = metrics.DistributionMetric('test') d = distribution.Distribution( distribution.FixedWidthBucketer(10, num_finite_buckets=10)) d.add(-5) d.add(-1000000) m._populate_value(pb, d, 1234) self.assertEquals([], pb.distribution.bucket) self.assertEquals(2, pb.distribution.underflow) self.assertEquals(0, pb.distribution.overflow) self.assertEquals(-500002.5, pb.distribution.mean)
def test_populate_is_cumulative(self): pb = metrics_pb2.MetricsData() d = distribution.Distribution( distribution.FixedWidthBucketer(10, num_finite_buckets=10)) m = metrics.CumulativeDistributionMetric('test') m._populate_value(pb, d, 1234) self.assertTrue(pb.distribution.is_cumulative) m = metrics.NonCumulativeDistributionMetric('test2') m._populate_value(pb, d, 1234) self.assertFalse(pb.distribution.is_cumulative)
def test_overflow_bucket(self): d = distribution.Distribution( distribution.FixedWidthBucketer(width=10, num_finite_buckets=10)) d.add(100) self.assertEqual(100, d.sum) self.assertEqual(1, d.count) self.assertEqual({11: 1}, d.buckets) d.add(1000000) self.assertEqual(1000100, d.sum) self.assertEqual(2, d.count) self.assertEqual({11: 2}, d.buckets)
def test_underflow_bucket(self): d = distribution.Distribution( distribution.FixedWidthBucketer(width=10)) d.add(-1) self.assertEqual(-1, d.sum) self.assertEqual(1, d.count) self.assertEqual({0: 1}, d.buckets) d.add(-1000000) self.assertEqual(-1000001, d.sum) self.assertEqual(2, d.count) self.assertEqual({0: 2}, d.buckets)
def test_add_on_bucket_boundary(self): d = distribution.Distribution( distribution.FixedWidthBucketer(width=10)) d.add(10) self.assertEqual(10, d.sum) self.assertEqual(1, d.count) self.assertEqual({2: 1}, d.buckets) d.add(0) self.assertEqual(10, d.sum) self.assertEqual(2, d.count) self.assertEqual({1: 1, 2: 1}, d.buckets)
def test_set(self): d = distribution.Distribution( distribution.FixedWidthBucketer(10, num_finite_buckets=10)) d.add(1) d.add(10) d.add(100) m = metrics.CumulativeDistributionMetric('test') with self.assertRaises(TypeError): m.set(d) m = metrics.NonCumulativeDistributionMetric('test2') m.set(d) self.assertEquals(d, m.get()) with self.assertRaises(errors.MonitoringInvalidValueTypeError): m.set(1) with self.assertRaises(errors.MonitoringInvalidValueTypeError): m.set('foo')
def test_generate_fixed_width_distribution(self): bucketer = distribution.FixedWidthBucketer(width=1, num_finite_buckets=10) dists = [ (metrics.NonCumulativeDistributionMetric( 'test0', 'test', None, bucketer=bucketer), metrics_pb2.GAUGE), (metrics.CumulativeDistributionMetric( 'test1', 'test', None, bucketer=bucketer), metrics_pb2.CUMULATIVE) ] for dist, stream_kind in dists: data_set, data = self._test_distribution_proto(dist) self.assertListEqual([0, 1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 2], list(data.distribution_value.bucket_count)) self.assertEqual( 10, data.distribution_value.linear_buckets.num_finite_buckets) self.assertEqual(1, data.distribution_value.linear_buckets.width) self.assertEqual(stream_kind, data_set.stream_kind) self.assertEqual(7, data.distribution_value.count)
def test_populate_custom(self): pb = metrics_pb2.MetricsData() m = metrics.DistributionMetric('test') m._populate_value( pb, distribution.Distribution(distribution.GeometricBucketer(4)), 1234) self.assertEquals( pb.distribution.spec_type, metrics_pb2.PrecomputedDistribution.CUSTOM_PARAMETERIZED) self.assertEquals(0, pb.distribution.width) self.assertEquals(4, pb.distribution.growth_factor) self.assertEquals(100, pb.distribution.num_buckets) m._populate_value( pb, distribution.Distribution(distribution.FixedWidthBucketer(10)), 1234) self.assertEquals( pb.distribution.spec_type, metrics_pb2.PrecomputedDistribution.CUSTOM_PARAMETERIZED) self.assertEquals(10, pb.distribution.width) self.assertEquals(0, pb.distribution.growth_factor) self.assertEquals(100, pb.distribution.num_buckets)
def test_one_size(self): b = distribution.FixedWidthBucketer(width=10, num_finite_buckets=1) self.assertLowerBounds(b, [float('-Inf'), 0, 10])
def test_one_size(self): b = distribution.FixedWidthBucketer(width=10, num_finite_buckets=1) self.assertBucketCounts(b, 3) self.assertBoundaries(b, [10])
def test_equality(self): b = distribution.FixedWidthBucketer(width=10, num_finite_buckets=8) self.assertEquals(b, b)
def test_negative_size(self): with self.assertRaises(ValueError): distribution.FixedWidthBucketer(width=10, num_finite_buckets=-1)
def test_negative_width(self): with self.assertRaises(AssertionError): distribution.FixedWidthBucketer(width=-1, num_finite_buckets=1)
def test_zero_size(self): b = distribution.FixedWidthBucketer(width=10, num_finite_buckets=0) self.assertBucketCounts(b, 2) self.assertBoundaries(b, [])