コード例 #1
0
 def test_transmission_cred_exception(self):
     mixin = TransportMixin()
     mixin.options = Options()
     with LocalFileStorage(os.path.join(TEST_FOLDER, self.id())) as stor:
         mixin.storage = stor
         mixin.storage.put([1, 2, 3])
         with mock.patch('requests.post',
                         throw(CredentialUnavailableError)):  # noqa: E501
             mixin._transmit_from_storage()
         self.assertIsNone(mixin.storage.get())
         self.assertEqual(len(os.listdir(mixin.storage.path)), 0)
コード例 #2
0
 def test_transmission_500(self):
     mixin = TransportMixin()
     mixin.options = Options()
     with LocalFileStorage(os.path.join(TEST_FOLDER, self.id())) as stor:
         mixin.storage = stor
         mixin.storage.put([1, 2, 3])
         with mock.patch('requests.post') as post:
             post.return_value = MockResponse(500, '{}')
             mixin._transmit_from_storage()
         self.assertIsNone(mixin.storage.get())
         self.assertEqual(len(os.listdir(mixin.storage.path)), 1)
コード例 #3
0
 def __init__(self, **options):
     self.options = Options(**options)
     utils.validate_instrumentation_key(self.options.instrumentation_key)
     self.storage = LocalFileStorage(
         path=self.options.storage_path,
         max_size=self.options.storage_max_size,
         maintenance_period=self.options.storage_maintenance_period,
         retention_period=self.options.storage_retention_period,
     )
     self._telemetry_processors = []
     super(AzureExporter, self).__init__(**options)
コード例 #4
0
 def test_check_stats_collection(self):
     mixin = TransportMixin()
     mixin.options = Options()
     mixin.options.enable_stats_metrics = True
     self.assertTrue(mixin._check_stats_collection())
     mixin._is_stats = False
     self.assertTrue(mixin._check_stats_collection())
     mixin._is_stats = True
     self.assertFalse(mixin._check_stats_collection())
     mixin.options.enable_stats_metrics = False
     self.assertFalse(mixin._check_stats_collection())
コード例 #5
0
    def test_create_properties_none(self):
        metric = create_metric()
        options = Options(
            instrumentation_key='12345678-1234-5678-abcd-12345678abcd')
        exporter = metrics_exporter.MetricsExporter(options)
        metric.time_series[0].label_values[0]._value = None
        properties = exporter.create_properties(metric.time_series[0],
                                                metric.descriptor)

        self.assertEqual(len(properties), 1)
        self.assertEqual(properties['key'], 'null')
コード例 #6
0
ファイル: __init__.py プロジェクト: ylil93/opencensus-python
 def __init__(self, **options):
     self.options = Options(**options)
     if not self.options.instrumentation_key:
         raise ValueError('The instrumentation_key is not provided.')
     self.storage = LocalFileStorage(
         path=self.options.storage_path,
         max_size=self.options.storage_max_size,
         maintenance_period=self.options.storage_maintenance_period,
         retention_period=self.options.storage_retention_period,
     )
     super(AzureExporter, self).__init__(**options)
コード例 #7
0
 def __init__(self, **options):
     options = Options(**options)
     self.export_interval = options.export_interval
     self.max_batch_size = options.max_batch_size
     # TODO: queue should be moved to tracer
     # too much refactor work, leave to the next PR
     self._queue = Queue(capacity=8192)  # TODO: make this configurable
     # TODO: worker should not be created in the base exporter
     self._worker = Worker(self._queue, self)
     self._worker.start()
     atexit.register(self._worker.stop, options.grace_period)
コード例 #8
0
 def test_transmission_307_circular_reference(self):
     mixin = TransportMixin()
     mixin.options = Options()
     mixin._consecutive_redirects = 0
     mixin.options.endpoint = "https://example.com"
     with mock.patch('requests.post') as post:
         post.return_value = MockResponse(
             307, '{}', {"location": "https://example.com"})  # noqa: E501
         result = mixin._transmit([1, 2, 3])
         self.assertEqual(result, -307)
     self.assertEqual(post.call_count, _MAX_CONSECUTIVE_REDIRECTS)
     self.assertEqual(mixin.options.endpoint, "https://example.com")
コード例 #9
0
 def test_transmission_lease_failure(self):
     exporter = trace_exporter.AzureExporter(
         Options(
             instrumentation_key='12345678-1234-5678-abcd-12345678abcd',
             storage_path=os.path.join(TEST_FOLDER, 'lease.failure'),
         ),
     )
     exporter.storage.put([1, 2, 3])
     with mock.patch('opencensus.ext.azure.common.storage.LocalFileBlob.lease') as lease:  # noqa: E501
         lease.return_value = False
         exporter._transmission_routine()
     self.assertTrue(exporter.storage.get())
コード例 #10
0
 def test_statsbeat_timeout(self):
     _requests_map.clear()
     mixin = TransportMixin()
     mixin.options = Options()
     with mock.patch('requests.post', throw(requests.Timeout)):
         result = mixin._transmit([1, 2, 3])
         self.assertEqual(len(_requests_map), 3)
         self.assertIsNotNone(_requests_map['duration'])
         self.assertEqual(_requests_map['count'], 1)
         self.assertEqual(_requests_map['retry'], 1)
         self.assertEqual(result, mixin.options.minimum_retry_interval)
     _requests_map.clear()
コード例 #11
0
 def test_transmission_400(self):
     exporter = trace_exporter.AzureExporter(
         Options(
             instrumentation_key='12345678-1234-5678-abcd-12345678abcd',
             storage_path=os.path.join(TEST_FOLDER, '400'),
         ),
     )
     exporter.storage.put([1, 2, 3])
     with mock.patch('requests.post') as post:
         post.return_value = MockResponse(400, '{}')
         exporter._transmission_routine()
     self.assertEqual(len(os.listdir(exporter.storage.path)), 0)
コード例 #12
0
 def test_statsbeat_exception(self):
     _requests_map.clear()
     mixin = TransportMixin()
     mixin.options = Options()
     with mock.patch('requests.post', throw(Exception)):
         result = mixin._transmit([1, 2, 3])
         self.assertEqual(len(_requests_map), 3)
         self.assertIsNotNone(_requests_map['duration'])
         self.assertEqual(_requests_map['exception'], 1)
         self.assertEqual(_requests_map['count'], 1)
         self.assertEqual(result, -1)
     _requests_map.clear()
コード例 #13
0
 def test_transmission_request_exception(self):
     exporter = trace_exporter.AzureExporter(
         Options(
             instrumentation_key='12345678-1234-5678-abcd-12345678abcd',
             storage_path=os.path.join(TEST_FOLDER, 'request.exception'),
         ),
     )
     exporter.storage.put([1, 2, 3])
     with mock.patch('requests.post', throw(Exception)):
         exporter._transmission_routine()
     self.assertIsNone(exporter.storage.get())
     self.assertEqual(len(os.listdir(exporter.storage.path)), 1)
コード例 #14
0
 def __init__(self, **options):
     self.options = Options(**options)
     utils.validate_instrumentation_key(self.options.instrumentation_key)
     self.export_interval = self.options.export_interval
     self.max_batch_size = self.options.max_batch_size
     self.storage = LocalFileStorage(
         path=self.options.storage_path,
         max_size=self.options.storage_max_size,
         maintenance_period=self.options.storage_maintenance_period,
         retention_period=self.options.storage_retention_period,
     )
     super(AzureLogHandler, self).__init__()
コード例 #15
0
    def test_transmit_invalid_response_body(self, logger_mock):
        with mock.patch('requests.post') as requests_mock:
            type(requests_mock.return_value).text = mock.PropertyMock(
                return_value='invalid')
            envelope = create_envelope()
            options = Options(
                instrumentation_key='12345678-1234-5678-abcd-12345678abcd')
            exporter = metrics_exporter.MetricsExporter(options)
            exporter._transmit_without_retry([envelope])

            self.assertEqual(len(requests_mock.call_args_list), 1)
            self.assertEqual(len(logger_mock.call_args_list), 1)
コード例 #16
0
    def test_transmit_no_status_code(self, logger_mock):
        with mock.patch('requests.post') as requests_mock:
            type(requests_mock.return_value).status_code = mock.PropertyMock(
                side_effect=Exception())
            envelope = create_envelope()
            options = Options(
                instrumentation_key='12345678-1234-5678-abcd-12345678abcd')
            exporter = metrics_exporter.MetricsExporter(options)
            exporter._transmit_without_retry([envelope])

            self.assertEqual(len(requests_mock.call_args_list), 1)
            self.assertEqual(len(logger_mock.call_args_list), 1)
コード例 #17
0
 def test_transmission_lease_failure(self, requests_mock):
     requests_mock.return_value = MockResponse(200, 'unknown')
     mixin = TransportMixin()
     mixin.options = Options()
     with LocalFileStorage(os.path.join(TEST_FOLDER, self.id())) as stor:
         mixin.storage = stor
         mixin.storage.put([1, 2, 3])
         with mock.patch(
                 'opencensus.ext.azure.common.storage.LocalFileBlob.lease'
         ) as lease:  # noqa: E501
             lease.return_value = False
             mixin._transmit_from_storage()
         self.assertTrue(mixin.storage.get())
コード例 #18
0
 def test_statsbeat_439(self):
     _requests_map.clear()
     mixin = TransportMixin()
     mixin.options = Options()
     with mock.patch('requests.post') as post:
         post.return_value = MockResponse(439, 'unknown')
         result = mixin._transmit([1, 2, 3])
         self.assertEqual(len(_requests_map), 3)
         self.assertIsNotNone(_requests_map['duration'])
         self.assertEqual(_requests_map['throttle'], 1)
         self.assertEqual(_requests_map['count'], 1)
         self.assertEqual(result, -439)
     _requests_map.clear()
コード例 #19
0
    def test_create_data_points(self):
        metric = create_metric()
        options = Options(
            instrumentation_key='12345678-1234-5678-abcd-12345678abcd')
        exporter = metrics_exporter.MetricsExporter(options)
        data_points = exporter.create_data_points(metric.time_series[0],
                                                  metric.descriptor)

        self.assertEqual(len(data_points), 1)
        data_point = data_points[0]
        self.assertEqual(data_point.ns, metric.descriptor.name)
        self.assertEqual(data_point.name, metric.descriptor.name)
        self.assertEqual(data_point.value,
                         metric.time_series[0].points[0].value.value)
コード例 #20
0
 def test_statsbeat_403(self):
     _requests_map.clear()
     mixin = TransportMixin()
     mixin.options = Options()
     with mock.patch('requests.post') as post:
         post.return_value = MockResponse(403, 'unknown')
         result = mixin._transmit([1, 2, 3])
         self.assertEqual(len(_requests_map), 4)
         self.assertIsNotNone(_requests_map['duration'])
         self.assertEqual(_requests_map['retry'], 1)
         self.assertEqual(_requests_map['count'], 1)
         self.assertEqual(_requests_map['failure'], 1)
         self.assertEqual(result, mixin.options.minimum_retry_interval)
     _requests_map.clear()
コード例 #21
0
 def __init__(self, **options):
     self.options = Options(**options)
     utils.validate_instrumentation_key(self.options.instrumentation_key)
     self.storage = LocalFileStorage(
         path=self.options.storage_path,
         max_size=self.options.storage_max_size,
         maintenance_period=self.options.storage_maintenance_period,
         retention_period=self.options.storage_retention_period,
         source=self.__class__.__name__,
     )
     self._telemetry_processors = []
     super(AzureExporter, self).__init__(**options)
     heartbeat_metrics.enable_heartbeat_metrics(
         self.options.connection_string, self.options.instrumentation_key)
コード例 #22
0
    def test_export_metrics(self, requests_mock):
        metric = create_metric()
        options = Options(
            instrumentation_key='12345678-1234-5678-abcd-12345678abcd')
        exporter = metrics_exporter.MetricsExporter(options)
        requests_mock.return_value.text = '{"itemsReceived":1,'\
                                          '"itemsAccepted":1,'\
                                          '"errors":[]}'
        requests_mock.return_value.status_code = 200
        exporter.export_metrics([metric])

        self.assertEqual(len(requests_mock.call_args_list), 1)
        post_body = requests_mock.call_args_list[0][1]['data']
        self.assertTrue('metrics' in post_body)
        self.assertTrue('properties' in post_body)
コード例 #23
0
 def __init__(self, **options):
     self.options = Options(**options)
     utils.validate_instrumentation_key(self.options.instrumentation_key)
     self.storage = None
     if self.options.enable_local_storage:
         self.storage = LocalFileStorage(
             path=self.options.storage_path,
             max_size=self.options.storage_max_size,
             maintenance_period=self.options.storage_maintenance_period,
             retention_period=self.options.storage_retention_period,
             source=self.__class__.__name__,
         )
     self._telemetry_processors = []
     super(AzureExporter, self).__init__(**options)
     atexit.register(self._stop, self.options.grace_period)
コード例 #24
0
 def __init__(self, **options):
     self.options = Options(**options)
     utils.validate_instrumentation_key(self.options.instrumentation_key)
     if self.options.max_batch_size <= 0:
         raise ValueError('Max batch size must be at least 1.')
     self.export_interval = self.options.export_interval
     self.max_batch_size = self.options.max_batch_size
     self._telemetry_processors = []
     self.storage = LocalFileStorage(
         path=self.options.storage_path,
         max_size=self.options.storage_max_size,
         maintenance_period=self.options.storage_maintenance_period,
         retention_period=self.options.storage_retention_period,
     )
     super(MetricsExporter, self).__init__()
コード例 #25
0
 def test_emit(self, request_mock):
     exporter = trace_exporter.AzureExporter(
         Options(
             instrumentation_key='12345678-1234-5678-abcd-12345678abcd',
             storage_path=os.path.join(TEST_FOLDER, 'foo'),
         ),
     )
     exporter.transport = MockTransport()
     exporter.emit([])
     self.assertEqual(len(os.listdir(exporter.storage.path)), 0)
     with mock.patch('opencensus.ext.azure.trace_exporter.AzureExporter._transmit') as transmit:  # noqa: E501
         transmit.return_value = 10
         exporter.emit([])
     self.assertEqual(len(os.listdir(exporter.storage.path)), 1)
     self.assertIsNone(exporter.storage.get())
コード例 #26
0
    def test_transmit_partial_exception(self, logger_mock):
        with mock.patch('requests.post') as requests_mock:
            text = '{"itemsReceived":1,'\
                   '"itemsAccepted":1}'
            type(requests_mock.return_value).text = mock.PropertyMock(
                return_value=text)
            type(requests_mock.return_value).status_code = mock.PropertyMock(
                return_value=206)
            envelope = create_envelope()
            options = Options(
                instrumentation_key='12345678-1234-5678-abcd-12345678abcd')
            exporter = metrics_exporter.MetricsExporter(options)
            exporter._transmit_without_retry([envelope])

            self.assertEqual(len(requests_mock.call_args_list), 1)
            self.assertEqual(len(logger_mock.call_args_list), 1)
コード例 #27
0
 def test_transmission_307(self):
     mixin = TransportMixin()
     mixin.options = Options()
     mixin._consecutive_redirects = 0
     mixin.options.endpoint = "test.endpoint"
     with LocalFileStorage(os.path.join(TEST_FOLDER, self.id())) as stor:
         mixin.storage = stor
         mixin.storage.put([1, 2, 3])
         with mock.patch('requests.post') as post:
             post.return_value = MockResponse(
                 307, '{}',
                 {"location": "https://example.com"})  # noqa: E501
             mixin._transmit_from_storage()
         self.assertEqual(post.call_count, _MAX_CONSECUTIVE_REDIRECTS)
         self.assertEqual(len(os.listdir(mixin.storage.path)), 0)
         self.assertEqual(mixin.options.endpoint, "https://example.com")
コード例 #28
0
 def __init__(self, **options):
     self.options = Options(**options)
     utils.validate_instrumentation_key(self.options.instrumentation_key)
     if not 0 <= self.options.logging_sampling_rate <= 1:
         raise ValueError('Sampling must be in the range: [0,1]')
     self.export_interval = self.options.export_interval
     self.max_batch_size = self.options.max_batch_size
     self.storage = LocalFileStorage(
         path=self.options.storage_path,
         max_size=self.options.storage_max_size,
         maintenance_period=self.options.storage_maintenance_period,
         retention_period=self.options.storage_retention_period,
     )
     self._telemetry_processors = []
     super(AzureLogHandler, self).__init__()
     self.addFilter(SamplingFilter(self.options.logging_sampling_rate))
コード例 #29
0
    def test_transmit_none_data_non_retryable(self, logger_mock, json_mock):
        with mock.patch('requests.post') as requests_mock:
            text = '{"itemsReceived":1,'\
                   '"itemsAccepted":1,'\
                   '"errors":[{"statusCode":500, "index":0}]}'
            type(requests_mock.return_value).text = mock.PropertyMock(
                return_value=text)
            type(requests_mock.return_value).status_code = mock.PropertyMock(
                return_value=402)
            envelope = create_envelope()
            options = Options(
                instrumentation_key='12345678-1234-5678-abcd-12345678abcd')
            exporter = metrics_exporter.MetricsExporter(options)
            exporter._transmit_without_retry([envelope])

            self.assertEqual(len(requests_mock.call_args_list), 1)
            self.assertEqual(len(logger_mock.call_args_list), 1)
コード例 #30
0
 def test_statsbeat_307(self):
     _requests_map.clear()
     mixin = TransportMixin()
     mixin.options = Options()
     mixin._consecutive_redirects = 0
     mixin.options.endpoint = "test.endpoint"
     with mock.patch('requests.post') as post:
         post.return_value = MockResponse(
             307, '{}', {"location": "https://example.com"})  # noqa: E501
         result = mixin._transmit([1, 2, 3])
         self.assertEqual(len(_requests_map), 4)
         self.assertIsNotNone(_requests_map['duration'])
         self.assertEqual(_requests_map['exception'], 1)
         self.assertEqual(_requests_map['count'], 10)
         self.assertEqual(_requests_map['failure'], 10)
         self.assertEqual(result, -307)
     _requests_map.clear()