Ejemplo n.º 1
0
    def test_send(self, _psmonitor):
        mon = monitors.PubSubMonitor('/path/to/creds.p8.json', 'myproject',
                                     'mytopic')
        mon._api = mock.MagicMock()
        mon._topic = 'mytopic'

        metric1 = metrics_pb2.MetricsData(name='m1')
        mon.send(metric1)
        metric2 = metrics_pb2.MetricsData(name='m2')
        mon.send([metric1, metric2])
        collection = metrics_pb2.MetricsCollection(data=[metric1, metric2])
        mon.send(collection)

        def message(pb):
            pb = monitors.Monitor._wrap_proto(pb)
            return {
                'messages': [{
                    'data': base64.b64encode(pb.SerializeToString())
                }]
            }

        publish = mon._api.projects.return_value.topics.return_value.publish
        publish.assert_has_calls([
            mock.call(topic='mytopic', body=message(metric1)),
            mock.call().execute(num_retries=5),
            mock.call(topic='mytopic', body=message([metric1, metric2])),
            mock.call().execute(num_retries=5),
            mock.call(topic='mytopic', body=message(collection)),
            mock.call().execute(num_retries=5),
        ])
Ejemplo n.º 2
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)
    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)
    self.assertEquals([1], pb.distribution.bucket)
    self.assertEquals(0, pb.distribution.underflow)
    self.assertEquals(2, pb.distribution.overflow)
    self.assertEquals(15, pb.distribution.mean)
Ejemplo n.º 3
0
 def test_send(self, _fake_api):
     m = monitors.ApiMonitor('/path/to/creds.p8.json',
                             'https://www.tld/api')
     metric1 = metrics_pb2.MetricsData(name='m1')
     m.send(metric1)
     metric2 = metrics_pb2.MetricsData(name='m2')
     m.send([metric1, metric2])
     collection = metrics_pb2.MetricsCollection(data=[metric1, metric2])
     m.send(collection)
     self.assertEquals(m._api.Send.call_count, 3)
Ejemplo n.º 4
0
 def test_send(self):
     with tempfile.NamedTemporaryFile(delete=True) as f:
         m = monitors.DiskMonitor(f.name)
         metric1 = metrics_pb2.MetricsData(name='m1')
         m.send(metric1)
         metric2 = metrics_pb2.MetricsData(name='m2')
         m.send([metric1, metric2])
         collection = metrics_pb2.MetricsCollection(data=[metric1, metric2])
         m.send(collection)
         output = f.read()
     self.assertEquals(output.count('data {\n  name: "m1"\n}'), 3)
     self.assertEquals(output.count('data {\n  name: "m2"\n}'), 2)
Ejemplo n.º 5
0
    def test_not_instrumented(self, fake_api):
        m = monitors.ApiMonitor('/path/to/creds.p8.json',
                                'https://www.tld/api',
                                use_instrumented_http=False)
        m.send(metrics_pb2.MetricsData(name='m1'))

        self.assertFalse(fake_api.SetHttp.called)
Ejemplo n.º 6
0
 def test_invalid_field_value(self):
   pb = metrics_pb2.MetricsData()
   m = metrics.Metric('test', fields={'pi': 3.14})
   with self.assertRaises(errors.MonitoringInvalidFieldTypeError) as e:
     m._populate_fields(pb, m._normalized_fields)
   self.assertEquals(e.exception.metric, 'test')
   self.assertEquals(e.exception.field, 'pi')
   self.assertEquals(e.exception.value, 3.14)
Ejemplo n.º 7
0
  def test_populate_field_values(self):
    pb1 = metrics_pb2.MetricsData()
    m1 = metrics.Metric('foo', fields={'asdf': 1})
    m1._populate_fields(pb1, m1._normalized_fields)
    self.assertEquals(pb1.fields[0].name, 'asdf')
    self.assertEquals(pb1.fields[0].int_value, 1)

    pb2 = metrics_pb2.MetricsData()
    m2 = metrics.Metric('bar', fields={'qwer': True})
    m2._populate_fields(pb2, m2._normalized_fields)
    self.assertEquals(pb2.fields[0].name, 'qwer')
    self.assertEquals(pb2.fields[0].bool_value, True)

    pb3 = metrics_pb2.MetricsData()
    m3 = metrics.Metric('baz', fields={'zxcv': 'baz'})
    m3._populate_fields(pb3, m3._normalized_fields)
    self.assertEquals(pb3.fields[0].name, 'zxcv')
    self.assertEquals(pb3.fields[0].string_value, 'baz')
Ejemplo n.º 8
0
 def test_populate_target(self):
     pb = metrics_pb2.MetricsData()
     t = targets.DeviceTarget('reg', 'net', 'host')
     t._populate_target_pb(pb)
     self.assertEquals(pb.network_device.metro, 'reg')
     self.assertEquals(pb.network_device.hostgroup, 'net')
     self.assertEquals(pb.network_device.hostname, 'host')
     self.assertEquals(pb.network_device.realm, 'ACQ_CHROME')
     self.assertEquals(pb.network_device.alertable, True)
Ejemplo n.º 9
0
    def test_instrumented(self, fake_api):
        m = monitors.ApiMonitor('/path/to/creds.p8.json',
                                'https://www.tld/api')
        m.send(metrics_pb2.MetricsData(name='m1'))

        api = fake_api.AcquisitionApi.return_value
        api.SetHttp.assert_called_once()
        self.assertIsInstance(api.SetHttp.call_args[0][0],
                              infra_libs.InstrumentedHttp)
Ejemplo n.º 10
0
 def test_populate_target(self):
     pb = metrics_pb2.MetricsData()
     t = targets.TaskTarget('serv', 'job', 'reg', 'host')
     t._populate_target_pb(pb)
     self.assertEquals(pb.task.service_name, 'serv')
     self.assertEquals(pb.task.job_name, 'job')
     self.assertEquals(pb.task.data_center, 'reg')
     self.assertEquals(pb.task.host_name, 'host')
     self.assertEquals(pb.task.task_num, 0)
Ejemplo n.º 11
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)
    self.assertEquals([1], pb.distribution.bucket)
    self.assertEquals(1, pb.distribution.overflow)
Ejemplo n.º 12
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)
    self.assertTrue(pb.distribution.is_cumulative)

    m = metrics.NonCumulativeDistributionMetric('test2')

    m._populate_value(pb, d)
    self.assertFalse(pb.distribution.is_cumulative)
Ejemplo n.º 13
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)
    self.assertEquals([], pb.distribution.bucket)
    self.assertEquals(2, pb.distribution.underflow)
    self.assertEquals(0, pb.distribution.overflow)
    self.assertEquals(-500002.5, pb.distribution.mean)
Ejemplo n.º 14
0
  def test_populate_canonical(self):
    pb = metrics_pb2.MetricsData()
    m = metrics.DistributionMetric('test')
    m._populate_value(pb,
        distribution.Distribution(distribution.GeometricBucketer()))
    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)))
    self.assertEquals(pb.distribution.spec_type,
        metrics_pb2.PrecomputedDistribution.CANONICAL_POWERS_OF_2)

    m._populate_value(pb,
        distribution.Distribution(distribution.GeometricBucketer(10)))
    self.assertEquals(pb.distribution.spec_type,
        metrics_pb2.PrecomputedDistribution.CANONICAL_POWERS_OF_10)
Ejemplo n.º 15
0
  def test_populate_custom(self):
    pb = metrics_pb2.MetricsData()
    m = metrics.DistributionMetric('test')
    m._populate_value(pb,
        distribution.Distribution(distribution.GeometricBucketer(4)))
    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)))
    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)
Ejemplo n.º 16
0
 def test_failed_request_should_not_crash(self, _fake_api, _fake_creds):
     m = monitors.ApiMonitor('/path/to/creds.p8.json',
                             'https://www.tld/api')
     m._api.Send.side_effect = acquisition_api.AcquisitionApiRequestException(
     )
     m.send(metrics_pb2.MetricsData(name='m1'))
Ejemplo n.º 17
0
 def test_populate_value(self):
   pb = metrics_pb2.MetricsData()
   m = metrics.StringMetric('test')
   m._populate_value(pb, 'foo')
   self.assertEquals(pb.string_value, 'foo')
Ejemplo n.º 18
0
 def test_populate_value(self):
   pb = metrics_pb2.MetricsData()
   m = metrics.BooleanMetric('test')
   m._populate_value(pb, True)
   self.assertEquals(pb.boolean_value, True)
Ejemplo n.º 19
0
 def test_send(self):
     m = monitors.NullMonitor()
     metric1 = metrics_pb2.MetricsData(name='m1')
     m.send(metric1)
Ejemplo n.º 20
0
 def test_send(self):
     m = monitors.Monitor()
     metric1 = metrics_pb2.MetricsData(name='m1')
     with self.assertRaises(NotImplementedError):
         m.send(metric1)
Ejemplo n.º 21
0
 def test_populate_value(self):
   pb = metrics_pb2.MetricsData()
   m = metrics.CounterMetric('test')
   m._populate_value(pb, 1)
   self.assertEquals(pb.counter, 1)
Ejemplo n.º 22
0
 def test_populate_value(self):
   pb = metrics_pb2.MetricsData()
   m = metrics.GaugeMetric('test')
   m._populate_value(pb, 1)
   self.assertEquals(pb.gauge, 1)
Ejemplo n.º 23
0
 def test_populate_value(self):
   pb = metrics_pb2.MetricsData()
   m = metrics.FloatMetric('test')
   m._populate_value(pb, 1.618)
   self.assertEquals(pb.noncumulative_double_value, 1.618)
Ejemplo n.º 24
0
 def test_populate_value(self):
   pb = metrics_pb2.MetricsData()
   m = metrics.CumulativeMetric('test')
   m._populate_value(pb, 1.618)
   self.assertAlmostEquals(pb.cumulative_double_value, 1.618)