Example #1
0
    def test_post_distribution_metrics_not_a_dict(self):
        """Test case when a distribution metric value is not a dict."""
        self.request.body = json.dumps({
            'metrics': [
                {
                    'MetricInfo': {
                        'Name': 'frontend/cumulative_test',
                        'ValueType': 2,
                    },
                    'Cells': [{
                        'value': 'rutabaga',
                        'fields': {
                            'client_id': '789',
                        },
                        'start_time': self.mock_timestamp - 60,
                    }],
                },
            ],
        })
        self.ts_mon_handler.register_metrics([
            metrics.CumulativeDistributionMetric(
                'frontend/cumulative_test',
                'Cumulative metric test',
                field_spec=[metrics.StringField('client_id')]),
        ])

        self.ts_mon_handler.post()
        self.assertEqual(self.response.status_int, 400)
        self.assertIn('Distribution metric values must be a dict',
                      self.response.body)
Example #2
0
 def test_dangerously_enable_cumulative_set(self):
     cd = metrics.CumulativeDistributionMetric('test', 'test', None)
     value = distribution.Distribution(bucketer=cd.bucketer)
     with self.assertRaises(TypeError):
         cd.set(value)
     cd.dangerously_enable_cumulative_set()
     cd.set(value)
Example #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)
Example #4
0
    def test_post_rejects_start_time_in_past(self):
        """Test rejects when start_time is >1 month in the past."""
        one_month_seconds = 60 * 60 * 24 * 30
        self.request.body = json.dumps({
            'metrics': [
                {
                    'MetricInfo': {
                        'Name': 'frontend/cumulative_test',
                        'ValueType': 2,
                    },
                    'Cells': [{
                        'value':
                        'rutabaga',
                        'fields': {
                            'client_id': '789',
                        },
                        'start_time':
                        self.mock_timestamp - one_month_seconds * 2,
                    }],
                },
            ],
        })
        self.ts_mon_handler.register_metrics([
            metrics.CumulativeDistributionMetric(
                'frontend/cumulative_test',
                'Cumulative metric test',
                field_spec=[metrics.StringField('client_id')]),
        ])

        self.ts_mon_handler.post()

        self.assertEqual(self.response.status_int, 400)
        self.assertIn('Invalid start_time', self.response.body)
Example #5
0
    def test_post_rejects_cumulative_without_start_time(self):
        """Test case where start_time is not supplied for CumulativeDistribution."""
        self.request.body = json.dumps({
            'metrics': [
                {
                    'MetricInfo': {
                        'Name': 'frontend/cumulative_test',
                        'ValueType': 2,
                    },
                    'Cells': [{
                        'value': 'rutabaga',
                        'fields': {
                            'client_id': '789',
                        },
                    }],
                },
            ],
        })
        self.ts_mon_handler.register_metrics([
            metrics.CumulativeDistributionMetric(
                'frontend/cumulative_test',
                'Cumulative metric test',
                field_spec=[metrics.StringField('client_id')]),
        ])
        self.ts_mon_handler.post()

        self.assertEqual(self.response.status_int, 400)
        self.assertIn('Cumulative metrics', self.response.body)
Example #6
0
 def test_add(self):
     m = metrics.CumulativeDistributionMetric('test', 'test', None)
     m.add(1)
     m.add(10)
     m.add(100)
     self.assertEqual({1: 1, 5: 1, 10: 1}, m.get().buckets)
     self.assertEqual(111, m.get().sum)
     self.assertEqual(3, m.get().count)
Example #7
0
 def test_start_timestamp(self):
     t = targets.DeviceTarget('reg', 'role', 'net', 'host')
     m = metrics.CumulativeDistributionMetric('test')
     m.add(1)
     m.add(5)
     m.add(25)
     p = metrics_pb2.MetricsCollection()
     m.serialize_to(p, 1234, (), m.get(), t)
     self.assertEquals(1234000000, p.data[0].start_timestamp_us)
Example #8
0
 def test_add_custom_bucketer(self):
     m = metrics.CumulativeDistributionMetric(
         'test', 'test', None, bucketer=distribution.FixedWidthBucketer(10))
     m.add(1)
     m.add(10)
     m.add(100)
     self.assertEqual({1: 1, 2: 1, 11: 1}, m.get().buckets)
     self.assertEqual(111, m.get().sum)
     self.assertEqual(3, m.get().count)
Example #9
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)
Example #10
0
    def test_post_metrics_normal(self):
        """Test successful POST case."""
        self.request.body = json.dumps({
            'metrics': [
                {
                    'MetricInfo': {
                        'Name': 'frontend/boolean_test',
                        'ValueType': 2,
                    },
                    'Cells': [{
                        'value': True,
                        'fields': {
                            'client_id': '789',
                        },
                    }],
                },
                {
                    'MetricInfo': {
                        'Name': 'frontend/cumulative_test',
                        'ValueType': 2,
                    },
                    'Cells': [{
                        'value': {
                            'sum': 1234,
                            'count': 4321,
                            'buckets': {
                                0: 123,
                                1: 321,
                                2: 213,
                            },
                        },
                        'fields': {
                            'client_id': '789',
                        },
                        'start_time': self.mock_timestamp - 60,
                    }],
                },
            ],
        })
        self.ts_mon_handler.register_metrics([
            metrics.CumulativeDistributionMetric(
                'frontend/cumulative_test',
                'Cumulative metric test',
                field_spec=[metrics.StringField('client_id')]),
        ])

        self.ts_mon_handler.post()
        self.assertEqual(self.response.status_int, 201)
Example #11
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')
Example #12
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)
Example #13
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 metrics

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

request_bytes = metrics.CumulativeDistributionMetric(
    'http/request_bytes', 'Bytes sent per http request (body only).', [
        metrics.StringField('name'),
        metrics.StringField('client'),
    ])
response_bytes = metrics.CumulativeDistributionMetric(
    'http/response_bytes', 'Bytes received per http request (content only).', [
        metrics.StringField('name'),
        metrics.StringField('client'),
    ])
durations = metrics.CumulativeDistributionMetric(
    'http/durations', 'Time elapsed between sending a request and getting a'
    ' response (including parsing) in milliseconds.', [
        metrics.StringField('name'),
        metrics.StringField('client'),
    ])
response_status = metrics.CounterMetric(
    'http/response_status',
    'Number of responses received by HTTP status code.', [
Example #14
0
 def test_is_cumulative(self):
     cd = metrics.CumulativeDistributionMetric('test', 'test', None)
     ncd = metrics.NonCumulativeDistributionMetric('test2', 'test', None)
     self.assertTrue(cd.is_cumulative())
     self.assertFalse(ncd.is_cumulative())
Example #15
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 metrics

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

request_bytes = metrics.CumulativeDistributionMetric(
    'http/request_bytes',
    description='Bytes sent per http request (body only).')
response_bytes = metrics.CumulativeDistributionMetric(
    'http/response_bytes',
    description='Bytes received per http request (content only).')
durations = metrics.CumulativeDistributionMetric(
    'http/durations',
    description='Time elapsed between sending a request and getting a'
    ' response (including parsing) in milliseconds.')
response_status = metrics.CounterMetric(
    'http/response_status',
    description='Number of responses received by HTTP status code.')

server_request_bytes = metrics.CumulativeDistributionMetric(
    'http/server_request_bytes',
    description='Bytes received per http request (body only).')
server_response_bytes = metrics.CumulativeDistributionMetric(
    'http/server_response_bytes',