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)
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)
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 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)
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)
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)
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)
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)
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_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)
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)
# 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.', [
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())
# 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',