Beispiel #1
0
    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)
Beispiel #2
0
 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)
Beispiel #3
0
 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')))
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #10
0
    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')
Beispiel #11
0
  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)
Beispiel #12
0
    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)
Beispiel #13
0
 def test_one_size(self):
     b = distribution.FixedWidthBucketer(width=10, num_finite_buckets=1)
     self.assertLowerBounds(b, [float('-Inf'), 0, 10])
Beispiel #14
0
    def test_one_size(self):
        b = distribution.FixedWidthBucketer(width=10, num_finite_buckets=1)

        self.assertBucketCounts(b, 3)
        self.assertBoundaries(b, [10])
Beispiel #15
0
 def test_equality(self):
     b = distribution.FixedWidthBucketer(width=10, num_finite_buckets=8)
     self.assertEquals(b, b)
Beispiel #16
0
 def test_negative_size(self):
     with self.assertRaises(ValueError):
         distribution.FixedWidthBucketer(width=10, num_finite_buckets=-1)
Beispiel #17
0
 def test_negative_width(self):
     with self.assertRaises(AssertionError):
         distribution.FixedWidthBucketer(width=-1, num_finite_buckets=1)
Beispiel #18
0
    def test_zero_size(self):
        b = distribution.FixedWidthBucketer(width=10, num_finite_buckets=0)

        self.assertBucketCounts(b, 2)
        self.assertBoundaries(b, [])