示例#1
0
 def test_bad_growth_factors(self):
     with self.assertRaises(AssertionError):
         distribution.GeometricBucketer(growth_factor=-1)
     with self.assertRaises(AssertionError):
         distribution.GeometricBucketer(growth_factor=0)
     with self.assertRaises(AssertionError):
         distribution.GeometricBucketer(growth_factor=1)
示例#2
0
 def test_small_scale(self):
     with self.assertRaises(ValueError):
         distribution.GeometricBucketer(growth_factor=-1)
     with self.assertRaises(ValueError):
         distribution.GeometricBucketer(growth_factor=0)
     with self.assertRaises(ValueError):
         distribution.GeometricBucketer(growth_factor=1)
示例#3
0
    def test_generate_geometric_distribution_with_scale(self):
        bucketer = distribution.GeometricBucketer(growth_factor=10.0,
                                                  num_finite_buckets=10,
                                                  scale=0.1)
        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([1, 0, 4, 1, 0, 0, 1, 0, 0, 0, 0, 0],
                                 list(data.distribution_value.bucket_count))
            self.assertEqual(
                10,
                data.distribution_value.exponential_buckets.num_finite_buckets)
            self.assertEqual(
                10.0,
                data.distribution_value.exponential_buckets.growth_factor)
            self.assertEqual(0.1,
                             data.distribution_value.exponential_buckets.scale)
            self.assertEqual(stream_kind, data_set.stream_kind)
            self.assertEqual(7, data.distribution_value.count)
 def modify_fn(dist, delta):
     # This is the same as the modify_fn in _DistributionMetricBase's add().
     if dist == 0:
         dist = distribution.Distribution(
             distribution.GeometricBucketer())
     dist.add(delta)
     return dist
示例#5
0
  def __init__(self, name, description, field_spec, is_cumulative=True,
               bucketer=None, start_time=None, units=None, target_type=None):
    self._start_time = start_time

    if bucketer is None:
      bucketer = distribution.GeometricBucketer()

    self._is_cumulative = is_cumulative
    self.bucketer = bucketer
    super(_DistributionMetricBase, self).__init__(
        name, description, field_spec, units=units, target_type=target_type)
示例#6
0
 def test_scale(self):
     b = distribution.GeometricBucketer(growth_factor=4,
                                        num_finite_buckets=4,
                                        scale=.1)
     # bucket lower bounds will be approximately [float('-Inf'), .1, .4, 1.6,
     # 6.4, 25.6], but to avoid floating point errors affecting test assert on
     # bucket_for_value instead of using assertLowerBounds.
     self.assertEquals(0, b.bucket_for_value(float('-Inf')))
     self.assertEquals(0, b.bucket_for_value(.05))
     self.assertEquals(1, b.bucket_for_value(.2))
     self.assertEquals(5, b.bucket_for_value(float('Inf')))
示例#7
0
  def __init__(self, name, is_cumulative=True, bucketer=None, fields=None,
               start_time=None, description=None):
    super(DistributionMetric, self).__init__(
        name, fields=fields, description=description)
    self._start_time = start_time

    if bucketer is None:
      bucketer = distribution.GeometricBucketer()

    self._is_cumulative = is_cumulative
    self.bucketer = bucketer
示例#8
0
 def test_bucket_for_value(self):
     b = distribution.GeometricBucketer(growth_factor=2,
                                        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(0, b.bucket_for_value(0))
     self.assertEquals(1, b.bucket_for_value(1))
     self.assertEquals(5, b.bucket_for_value(31))
     self.assertEquals(6, b.bucket_for_value(32))
     self.assertEquals(6, b.bucket_for_value(100000))
     self.assertEquals(6, b.bucket_for_value(float('Inf')))
示例#9
0
    def test_populate_canonical(self):
        pb = metrics_pb2.MetricsData()
        m = metrics.DistributionMetric('test')
        m._populate_value(
            pb, distribution.Distribution(distribution.GeometricBucketer()),
            1234)
        self.assertEquals(
            pb.distribution.spec_type,
            metrics_pb2.PrecomputedDistribution.CANONICAL_POWERS_OF_10_P_0_2)

        m._populate_value(
            pb, distribution.Distribution(distribution.GeometricBucketer(2)),
            1234)
        self.assertEquals(
            pb.distribution.spec_type,
            metrics_pb2.PrecomputedDistribution.CANONICAL_POWERS_OF_2)

        m._populate_value(
            pb, distribution.Distribution(distribution.GeometricBucketer(10)),
            1234)
        self.assertEquals(
            pb.distribution.spec_type,
            metrics_pb2.PrecomputedDistribution.CANONICAL_POWERS_OF_10)
示例#10
0
    def test_add(self):
        d = distribution.Distribution(distribution.GeometricBucketer())
        self.assertEqual(0, d.sum)
        self.assertEqual(0, d.count)
        self.assertEqual({}, d.buckets)

        d.add(1)
        d.add(10)
        d.add(100)

        self.assertEqual(111, d.sum)
        self.assertEqual(3, d.count)
        self.assertEqual({1: 1, 5: 1, 10: 1}, d.buckets)

        d.add(50)

        self.assertEqual(161, d.sum)
        self.assertEqual(4, d.count)
        self.assertEqual({1: 1, 5: 1, 9: 1, 10: 1}, d.buckets)
示例#11
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)
示例#12
0
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from infra_libs.ts_mon.common import distribution
from infra_libs.ts_mon.common import metrics

# Extending HTTP status codes to client-side errors and timeouts.
STATUS_OK = 200
STATUS_ERROR = 901
STATUS_TIMEOUT = 902
STATUS_EXCEPTION = 909

# 90% of durations are in the range 11-1873ms.  Growth factor 10^0.06 puts that
# range into 37 buckets.  Max finite bucket value is 12 minutes.
_duration_bucketer = distribution.GeometricBucketer(10**0.06)

# 90% of sizes are in the range 0.17-217014 bytes.  Growth factor 10^0.1 puts
# that range into 54 buckets.  Max finite bucket value is 6.3GB.
_size_bucketer = distribution.GeometricBucketer(10**0.1)

request_bytes = metrics.CumulativeDistributionMetric(
    'http/request_bytes',
    'Bytes sent per http request (body only).', [
        metrics.StringField('name'),
        metrics.StringField('client'),
    ],
    bucketer=_size_bucketer)
response_bytes = metrics.CumulativeDistributionMetric(
    'http/response_bytes',
    'Bytes received per http request (content only).', [
示例#13
0
 def test_large_size(self):
     b = distribution.GeometricBucketer(growth_factor=4,
                                        num_finite_buckets=4)
     self.assertLowerBounds(b, [float('-Inf'), 1, 4, 16, 64, 256])
示例#14
0
 def test_zero_size(self):
     b = distribution.GeometricBucketer(num_finite_buckets=0)
     self.assertLowerBounds(b, [float('-Inf'), 1])
示例#15
0
    def test_zero_size(self):
        b = distribution.GeometricBucketer(num_finite_buckets=0)

        self.assertBucketCounts(b, 2)
        self.assertBoundaries(b, [])
示例#16
0
 def test_negative_size(self):
     with self.assertRaises(ValueError):
         distribution.GeometricBucketer(num_finite_buckets=-1)
示例#17
0
 def test_equality(self):
     b = distribution.GeometricBucketer(growth_factor=4,
                                        num_finite_buckets=4,
                                        scale=.1)
     self.assertEquals(b, b)
示例#18
0
    def test_large_size(self):
        b = distribution.GeometricBucketer(growth_factor=4,
                                           num_finite_buckets=4)

        self.assertBucketCounts(b, 6)
        self.assertBoundaries(b, [1, 4, 16, 64])