From d8313177a6605d46c6b8a11fbd73bf6fab56b20c Mon Sep 17 00:00:00 2001 From: Leighton Date: Sun, 17 May 2020 11:47:29 -0700 Subject: [PATCH 1/7] fix breaking changes --- azure_monitor/setup.cfg | 4 +- .../src/azure_monitor/export/__init__.py | 14 ++-- .../azure_monitor/export/metrics/__init__.py | 19 +---- azure_monitor/tests/metrics/test_metrics.py | 80 ++++++++----------- azure_monitor/tests/trace/test_trace.py | 4 +- 5 files changed, 48 insertions(+), 73 deletions(-) diff --git a/azure_monitor/setup.cfg b/azure_monitor/setup.cfg index 25788d9..da34923 100644 --- a/azure_monitor/setup.cfg +++ b/azure_monitor/setup.cfg @@ -27,8 +27,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api ~= 0.6b0 - opentelemetry-sdk ~= 0.6b0 + opentelemetry-api ~= 0.7b0 + opentelemetry-sdk ~= 0.7b0 psutil >= 5.6.3 requests ~= 2.0 diff --git a/azure_monitor/src/azure_monitor/export/__init__.py b/azure_monitor/src/azure_monitor/export/__init__.py index 9f89ed6..d1c20ce 100644 --- a/azure_monitor/src/azure_monitor/export/__init__.py +++ b/azure_monitor/src/azure_monitor/export/__init__.py @@ -187,18 +187,16 @@ def _transmit(self, envelopes: typing.List[Envelope]) -> ExportResult: def get_trace_export_result(result: ExportResult) -> SpanExportResult: if result == ExportResult.SUCCESS: return SpanExportResult.SUCCESS - if result == ExportResult.FAILED_RETRYABLE: - return SpanExportResult.FAILED_RETRYABLE - if result == ExportResult.FAILED_NOT_RETRYABLE: - return SpanExportResult.FAILED_NOT_RETRYABLE + if result == ExportResult.FAILED_RETRYABLE or \ + result == ExportResult.FAILED_NOT_RETRYABLE: + return SpanExportResult.FAILURE return None def get_metrics_export_result(result: ExportResult) -> MetricsExportResult: if result == ExportResult.SUCCESS: return MetricsExportResult.SUCCESS - if result == ExportResult.FAILED_RETRYABLE: - return MetricsExportResult.FAILED_RETRYABLE - if result == ExportResult.FAILED_NOT_RETRYABLE: - return MetricsExportResult.FAILED_NOT_RETRYABLE + if result == ExportResult.FAILED_RETRYABLE or \ + result == ExportResult.FAILED_NOT_RETRYABLE: + return MetricsExportResult.FAILURE return None diff --git a/azure_monitor/src/azure_monitor/export/metrics/__init__.py b/azure_monitor/src/azure_monitor/export/metrics/__init__.py index d7b987b..d50dfc0 100644 --- a/azure_monitor/src/azure_monitor/export/metrics/__init__.py +++ b/azure_monitor/src/azure_monitor/export/metrics/__init__.py @@ -5,8 +5,7 @@ from typing import Sequence from urllib.parse import urlparse -from opentelemetry.metrics import Metric -from opentelemetry.sdk.metrics import Counter, Observer +from opentelemetry.sdk.metrics import Counter, Metric, Observer from opentelemetry.sdk.metrics.export import ( MetricRecord, MetricsExporter, @@ -36,12 +35,7 @@ def export( self, metric_records: Sequence[MetricRecord] ) -> MetricsExportResult: envelopes = list(map(self._metric_to_envelope, metric_records)) - envelopes = list( - map( - lambda x: x.to_dict(), - self._apply_telemetry_processors(envelopes), - ) - ) + envelopes = self._apply_telemetry_processors(envelopes) try: result = self._transmit(envelopes) if result == ExportResult.FAILED_RETRYABLE: @@ -60,17 +54,10 @@ def _metric_to_envelope( if not metric_record: return None - # TODO: Opentelemetry has timestamp for Observer, awaiting release - # TODO: Timestamp info is also moved into aggregators - _time = time_ns() - if isinstance(metric_record.metric, Metric): - _time = metric_record.metric.bind( - dict(metric_record.labels) - ).last_update_timestamp envelope = protocol.Envelope( ikey=self.options.instrumentation_key, tags=dict(utils.azure_monitor_context), - time=ns_to_iso_str(_time), + time=ns_to_iso_str(metric_record.aggregator.last_update_timestamp), ) envelope.name = "Microsoft.ApplicationInsights.Metric" value = 0 diff --git a/azure_monitor/tests/metrics/test_metrics.py b/azure_monitor/tests/metrics/test_metrics.py index 276b49d..ccc00a5 100644 --- a/azure_monitor/tests/metrics/test_metrics.py +++ b/azure_monitor/tests/metrics/test_metrics.py @@ -96,46 +96,46 @@ def test_constructor(self): "4321abcd-5678-4efa-8abc-1234567890ab", ) - def test_export(self,): + @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit") + @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._metric_to_envelope") + def test_export(self, mte, transmit): record = MetricRecord( CounterAggregator(), self._test_labels, self._test_metric ) exporter = self._exporter - with mock.patch( - "azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit" - ) as transmit: # noqa: E501 - transmit.return_value = ExportResult.SUCCESS - result = exporter.export([record]) - self.assertEqual(result, MetricsExportResult.SUCCESS) + mte.return_value = [] + transmit.return_value = ExportResult.SUCCESS + result = exporter.export([record]) + self.assertEqual(result, MetricsExportResult.SUCCESS) - def test_export_failed_retryable(self): + @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit") + @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._metric_to_envelope") + def test_export_failed_retryable(self, mte, transmit): record = MetricRecord( CounterAggregator(), self._test_labels, self._test_metric ) exporter = self._exporter - with mock.patch( - "azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit" - ) as transmit: # noqa: E501 - transmit.return_value = ExportResult.FAILED_RETRYABLE - storage_mock = mock.Mock() - exporter.storage.put = storage_mock - result = exporter.export([record]) - self.assertEqual(result, MetricsExportResult.FAILED_RETRYABLE) - self.assertEqual(storage_mock.call_count, 1) + transmit.return_value = ExportResult.FAILED_RETRYABLE + mte.return_value = [] + storage_mock = mock.Mock() + exporter.storage.put = storage_mock + result = exporter.export([record]) + self.assertEqual(result, MetricsExportResult.FAILURE) + self.assertEqual(storage_mock.call_count, 1) @mock.patch("azure_monitor.export.metrics.logger") - def test_export_exception(self, logger_mock): + @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit") + @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._metric_to_envelope") + def test_export_exception(self, mte, transmit, logger_mock): record = MetricRecord( CounterAggregator(), self._test_labels, self._test_metric ) exporter = self._exporter - with mock.patch( - "azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit", - throw(Exception), - ): # noqa: E501 - result = exporter.export([record]) - self.assertEqual(result, MetricsExportResult.FAILED_NOT_RETRYABLE) - self.assertEqual(logger_mock.exception.called, True) + mte.return_value = [] + transmit.side_effect = throw(Exception) + result = exporter.export([record]) + self.assertEqual(result, MetricsExportResult.FAILURE) + self.assertEqual(logger_mock.exception.called, True) def test_metric_to_envelope_none(self): exporter = self._exporter @@ -154,7 +154,7 @@ def test_metric_to_envelope(self): self.assertEqual( envelope.time, ns_to_iso_str( - record.metric.bind(dict(record.labels)).last_update_timestamp + aggregator.last_update_timestamp ), ) self.assertEqual(envelope.sample_rate, None) @@ -192,15 +192,10 @@ def test_observer_to_envelope(self): self.assertIsInstance(envelope, Envelope) self.assertEqual(envelope.ver, 1) self.assertEqual(envelope.name, "Microsoft.ApplicationInsights.Metric") - # TODO: implement last updated timestamp for observer - # self.assertEqual( - # envelope.time, - # ns_to_iso_str( - # record.metric.bind( - # record.label_set - # ).last_update_timestamp - # ), - # ) + self.assertEqual( + envelope.time, + ns_to_iso_str(aggregator.last_update_timestamp), + ) self.assertEqual(envelope.sample_rate, None) self.assertEqual(envelope.seq, None) self.assertEqual(envelope.ikey, "1234abcd-5678-4efa-8abc-1234567890ab") @@ -235,15 +230,10 @@ def test_observer_to_envelope_value_none(self): self.assertIsInstance(envelope, Envelope) self.assertEqual(envelope.ver, 1) self.assertEqual(envelope.name, "Microsoft.ApplicationInsights.Metric") - # TODO: implement last updated timestamp for observer - # self.assertEqual( - # envelope.time, - # ns_to_iso_str( - # record.metric.bind( - # record.label_set - # ).last_update_timestamp - # ), - # ) + self.assertEqual( + envelope.time, + ns_to_iso_str(aggregator.last_update_timestamp), + ) self.assertEqual(envelope.sample_rate, None) self.assertEqual(envelope.seq, None) self.assertEqual(envelope.ikey, "1234abcd-5678-4efa-8abc-1234567890ab") @@ -285,7 +275,7 @@ def test_measure_to_envelope(self, logger_mock): self.assertEqual( envelope.time, ns_to_iso_str( - record.metric.bind(dict(record.labels)).last_update_timestamp + aggregator.last_update_timestamp ), ) self.assertEqual(envelope.sample_rate, None) diff --git a/azure_monitor/tests/trace/test_trace.py b/azure_monitor/tests/trace/test_trace.py index da12706..e918b92 100644 --- a/azure_monitor/tests/trace/test_trace.py +++ b/azure_monitor/tests/trace/test_trace.py @@ -142,7 +142,7 @@ def test_export_exception(self, logger_mock): throw(Exception), ): # noqa: E501 result = exporter.export([test_span]) - self.assertEqual(result, SpanExportResult.FAILED_NOT_RETRYABLE) + self.assertEqual(result, SpanExportResult.FAILURE) self.assertEqual(logger_mock.exception.called, True) def test_export_not_retryable(self): @@ -162,7 +162,7 @@ def test_export_not_retryable(self): ) as transmit: # noqa: E501 transmit.return_value = ExportResult.FAILED_NOT_RETRYABLE result = exporter.export([test_span]) - self.assertEqual(result, SpanExportResult.FAILED_NOT_RETRYABLE) + self.assertEqual(result, SpanExportResult.FAILURE) def test_span_to_envelope_none(self): exporter = self._exporter From 44732b1927178ceb1892dbbc07b602767a824f56 Mon Sep 17 00:00:00 2001 From: Leighton Date: Sun, 17 May 2020 11:58:25 -0700 Subject: [PATCH 2/7] update version --- azure_monitor/setup.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure_monitor/setup.cfg b/azure_monitor/setup.cfg index da34923..fca7b78 100644 --- a/azure_monitor/setup.cfg +++ b/azure_monitor/setup.cfg @@ -27,8 +27,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api ~= 0.7b0 - opentelemetry-sdk ~= 0.7b0 + opentelemetry-api ~= 0.7b1 + opentelemetry-sdk ~= 0.7b1 psutil >= 5.6.3 requests ~= 2.0 From 027d46a25ab880ad7b6476fcf1ea15a0d0b23ead Mon Sep 17 00:00:00 2001 From: Leighton Date: Sun, 17 May 2020 12:43:12 -0700 Subject: [PATCH 3/7] fix examples --- azure_monitor/examples/traces/client.py | 6 +++--- azure_monitor/examples/traces/request.py | 4 ++-- azure_monitor/examples/traces/server.py | 12 ++++++++---- .../sdk/auto_collection/live_metrics/exporter.py | 2 +- .../auto_collection/live_metrics/test_exporter.py | 4 ++-- azure_monitor/tests/test_base_exporter.py | 8 ++++---- 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/azure_monitor/examples/traces/client.py b/azure_monitor/examples/traces/client.py index 37908dd..027f8dc 100644 --- a/azure_monitor/examples/traces/client.py +++ b/azure_monitor/examples/traces/client.py @@ -5,7 +5,7 @@ # pylint: disable=no-name-in-module import requests from opentelemetry import trace -from opentelemetry.ext import http_requests +from opentelemetry.ext.requests import RequestsInstrumentor from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor @@ -13,10 +13,10 @@ trace.set_tracer_provider(TracerProvider()) tracer = trace.get_tracer(__name__) -http_requests.enable(trace.get_tracer_provider()) +RequestsInstrumentor().instrument() span_processor = BatchExportSpanProcessor( AzureMonitorSpanExporter( - # connection_string="InstrumentationKey=" + connection_string="InstrumentationKey=" ) ) trace.get_tracer_provider().add_span_processor(span_processor) diff --git a/azure_monitor/examples/traces/request.py b/azure_monitor/examples/traces/request.py index 5b26868..b9942a0 100644 --- a/azure_monitor/examples/traces/request.py +++ b/azure_monitor/examples/traces/request.py @@ -5,7 +5,7 @@ # pylint: disable=no-name-in-module import requests from opentelemetry import trace -from opentelemetry.ext import http_requests +from opentelemetry.ext.requests import RequestsInstrumentor from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor @@ -13,7 +13,7 @@ trace.set_tracer_provider(TracerProvider()) -http_requests.enable(trace.get_tracer_provider()) +RequestsInstrumentor().instrument() span_processor = SimpleExportSpanProcessor( AzureMonitorSpanExporter( connection_string="InstrumentationKey=" diff --git a/azure_monitor/examples/traces/server.py b/azure_monitor/examples/traces/server.py index 7be59b0..51039c8 100644 --- a/azure_monitor/examples/traces/server.py +++ b/azure_monitor/examples/traces/server.py @@ -5,8 +5,8 @@ # pylint: disable=no-name-in-module import requests from opentelemetry import trace -from opentelemetry.ext import http_requests -from opentelemetry.ext.wsgi import OpenTelemetryMiddleware +from opentelemetry.ext.flask import FlaskInstrumentor +from opentelemetry.ext.requests import RequestsInstrumentor from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor @@ -29,9 +29,13 @@ # Integrations are the glue that binds the OpenTelemetry API and the # frameworks and libraries that are used together, automatically creating # Spans and propagating context as appropriate. -http_requests.enable(trace.get_tracer_provider()) + +# Enable instrumentation in the requests library. +RequestsInstrumentor().instrument() + app = flask.Flask(__name__) -app.wsgi_app = OpenTelemetryMiddleware(app.wsgi_app) +# Enable instrumentation in the flask library. +FlaskInstrumentor().instrument_app(app) @app.route("/") diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/exporter.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/exporter.py index 9f9483f..a8cc64d 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/exporter.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/live_metrics/exporter.py @@ -61,7 +61,7 @@ def export( except Exception: # pylint: disable=broad-except logger.exception("Exception occurred while exporting the data.") - return MetricsExportResult.FAILED_NOT_RETRYABLE + return MetricsExportResult.FAILURE def _metric_to_live_metrics_envelope( self, metric_records: typing.Sequence[MetricRecord] diff --git a/azure_monitor/tests/auto_collection/live_metrics/test_exporter.py b/azure_monitor/tests/auto_collection/live_metrics/test_exporter.py index 2dc4f46..f37e8ec 100644 --- a/azure_monitor/tests/auto_collection/live_metrics/test_exporter.py +++ b/azure_monitor/tests/auto_collection/live_metrics/test_exporter.py @@ -85,7 +85,7 @@ def test_export_failed(self): response.status_code = 400 request.return_value = response result = exporter.export([record]) - self.assertEqual(result, MetricsExportResult.FAILED_NOT_RETRYABLE) + self.assertEqual(result, MetricsExportResult.FAILURE) def test_export_exception(self): record = MetricRecord( @@ -99,4 +99,4 @@ def test_export_exception(self): throw(Exception), ): result = exporter.export([record]) - self.assertEqual(result, MetricsExportResult.FAILED_NOT_RETRYABLE) + self.assertEqual(result, MetricsExportResult.FAILURE) diff --git a/azure_monitor/tests/test_base_exporter.py b/azure_monitor/tests/test_base_exporter.py index 7ac9370..5907939 100644 --- a/azure_monitor/tests/test_base_exporter.py +++ b/azure_monitor/tests/test_base_exporter.py @@ -354,11 +354,11 @@ def test_get_trace_export_result(self): ) self.assertEqual( get_trace_export_result(ExportResult.FAILED_NOT_RETRYABLE), - SpanExportResult.FAILED_NOT_RETRYABLE, + SpanExportResult.FAILURE, ) self.assertEqual( get_trace_export_result(ExportResult.FAILED_RETRYABLE), - SpanExportResult.FAILED_RETRYABLE, + SpanExportResult.FAILURE, ) self.assertEqual(get_trace_export_result(None), None) @@ -369,11 +369,11 @@ def test_get_metrics_export_result(self): ) self.assertEqual( get_metrics_export_result(ExportResult.FAILED_NOT_RETRYABLE), - MetricsExportResult.FAILED_NOT_RETRYABLE, + MetricsExportResult.FAILURE, ) self.assertEqual( get_metrics_export_result(ExportResult.FAILED_RETRYABLE), - MetricsExportResult.FAILED_RETRYABLE, + MetricsExportResult.FAILURE, ) self.assertEqual(get_metrics_export_result(None), None) From afc11cdc165cd388b97c8a8e99e7437c3918b941 Mon Sep 17 00:00:00 2001 From: Leighton Date: Mon, 18 May 2020 10:50:56 -0700 Subject: [PATCH 4/7] fix missing version --- azure_monitor/src/azure_monitor/utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/azure_monitor/src/azure_monitor/utils.py b/azure_monitor/src/azure_monitor/utils.py index ad7eb93..4344743 100644 --- a/azure_monitor/src/azure_monitor/utils.py +++ b/azure_monitor/src/azure_monitor/utils.py @@ -7,10 +7,14 @@ import threading import time -from opentelemetry.sdk.version import __version__ as opentelemetry_version +# from opentelemetry.sdk.version import __version__ as opentelemetry_version +import pkg_resources from azure_monitor.version import __version__ as ext_version +# Workaround for missing version file +opentelemetry_version = pkg_resources.get_distribution("opentelemetry-sdk").version + azure_monitor_context = { "ai.cloud.role": os.path.basename(sys.argv[0]) or "Python Application", "ai.cloud.roleInstance": platform.node(), From 7d676d0aabfa8ecd989b8bf94bafcc64d0834f12 Mon Sep 17 00:00:00 2001 From: Leighton Date: Mon, 18 May 2020 10:58:50 -0700 Subject: [PATCH 5/7] lint --- .../src/azure_monitor/export/__init__.py | 12 ++++-- azure_monitor/src/azure_monitor/utils.py | 4 +- azure_monitor/tests/metrics/test_metrics.py | 40 ++++++++++--------- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/azure_monitor/src/azure_monitor/export/__init__.py b/azure_monitor/src/azure_monitor/export/__init__.py index d1c20ce..5932a1e 100644 --- a/azure_monitor/src/azure_monitor/export/__init__.py +++ b/azure_monitor/src/azure_monitor/export/__init__.py @@ -187,8 +187,10 @@ def _transmit(self, envelopes: typing.List[Envelope]) -> ExportResult: def get_trace_export_result(result: ExportResult) -> SpanExportResult: if result == ExportResult.SUCCESS: return SpanExportResult.SUCCESS - if result == ExportResult.FAILED_RETRYABLE or \ - result == ExportResult.FAILED_NOT_RETRYABLE: + if ( + result == ExportResult.FAILED_RETRYABLE + or result == ExportResult.FAILED_NOT_RETRYABLE + ): return SpanExportResult.FAILURE return None @@ -196,7 +198,9 @@ def get_trace_export_result(result: ExportResult) -> SpanExportResult: def get_metrics_export_result(result: ExportResult) -> MetricsExportResult: if result == ExportResult.SUCCESS: return MetricsExportResult.SUCCESS - if result == ExportResult.FAILED_RETRYABLE or \ - result == ExportResult.FAILED_NOT_RETRYABLE: + if ( + result == ExportResult.FAILED_RETRYABLE + or result == ExportResult.FAILED_NOT_RETRYABLE + ): return MetricsExportResult.FAILURE return None diff --git a/azure_monitor/src/azure_monitor/utils.py b/azure_monitor/src/azure_monitor/utils.py index 4344743..c2f4998 100644 --- a/azure_monitor/src/azure_monitor/utils.py +++ b/azure_monitor/src/azure_monitor/utils.py @@ -13,7 +13,9 @@ from azure_monitor.version import __version__ as ext_version # Workaround for missing version file -opentelemetry_version = pkg_resources.get_distribution("opentelemetry-sdk").version +opentelemetry_version = pkg_resources.get_distribution( + "opentelemetry-sdk" +).version azure_monitor_context = { "ai.cloud.role": os.path.basename(sys.argv[0]) or "Python Application", diff --git a/azure_monitor/tests/metrics/test_metrics.py b/azure_monitor/tests/metrics/test_metrics.py index ccc00a5..63e3bc2 100644 --- a/azure_monitor/tests/metrics/test_metrics.py +++ b/azure_monitor/tests/metrics/test_metrics.py @@ -96,8 +96,12 @@ def test_constructor(self): "4321abcd-5678-4efa-8abc-1234567890ab", ) - @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit") - @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._metric_to_envelope") + @mock.patch( + "azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit" + ) + @mock.patch( + "azure_monitor.export.metrics.AzureMonitorMetricsExporter._metric_to_envelope" + ) def test_export(self, mte, transmit): record = MetricRecord( CounterAggregator(), self._test_labels, self._test_metric @@ -108,8 +112,12 @@ def test_export(self, mte, transmit): result = exporter.export([record]) self.assertEqual(result, MetricsExportResult.SUCCESS) - @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit") - @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._metric_to_envelope") + @mock.patch( + "azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit" + ) + @mock.patch( + "azure_monitor.export.metrics.AzureMonitorMetricsExporter._metric_to_envelope" + ) def test_export_failed_retryable(self, mte, transmit): record = MetricRecord( CounterAggregator(), self._test_labels, self._test_metric @@ -124,8 +132,12 @@ def test_export_failed_retryable(self, mte, transmit): self.assertEqual(storage_mock.call_count, 1) @mock.patch("azure_monitor.export.metrics.logger") - @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit") - @mock.patch("azure_monitor.export.metrics.AzureMonitorMetricsExporter._metric_to_envelope") + @mock.patch( + "azure_monitor.export.metrics.AzureMonitorMetricsExporter._transmit" + ) + @mock.patch( + "azure_monitor.export.metrics.AzureMonitorMetricsExporter._metric_to_envelope" + ) def test_export_exception(self, mte, transmit, logger_mock): record = MetricRecord( CounterAggregator(), self._test_labels, self._test_metric @@ -152,10 +164,7 @@ def test_metric_to_envelope(self): self.assertEqual(envelope.ver, 1) self.assertEqual(envelope.name, "Microsoft.ApplicationInsights.Metric") self.assertEqual( - envelope.time, - ns_to_iso_str( - aggregator.last_update_timestamp - ), + envelope.time, ns_to_iso_str(aggregator.last_update_timestamp) ) self.assertEqual(envelope.sample_rate, None) self.assertEqual(envelope.seq, None) @@ -193,8 +202,7 @@ def test_observer_to_envelope(self): self.assertEqual(envelope.ver, 1) self.assertEqual(envelope.name, "Microsoft.ApplicationInsights.Metric") self.assertEqual( - envelope.time, - ns_to_iso_str(aggregator.last_update_timestamp), + envelope.time, ns_to_iso_str(aggregator.last_update_timestamp) ) self.assertEqual(envelope.sample_rate, None) self.assertEqual(envelope.seq, None) @@ -231,8 +239,7 @@ def test_observer_to_envelope_value_none(self): self.assertEqual(envelope.ver, 1) self.assertEqual(envelope.name, "Microsoft.ApplicationInsights.Metric") self.assertEqual( - envelope.time, - ns_to_iso_str(aggregator.last_update_timestamp), + envelope.time, ns_to_iso_str(aggregator.last_update_timestamp) ) self.assertEqual(envelope.sample_rate, None) self.assertEqual(envelope.seq, None) @@ -273,10 +280,7 @@ def test_measure_to_envelope(self, logger_mock): self.assertEqual(envelope.ver, 1) self.assertEqual(envelope.name, "Microsoft.ApplicationInsights.Metric") self.assertEqual( - envelope.time, - ns_to_iso_str( - aggregator.last_update_timestamp - ), + envelope.time, ns_to_iso_str(aggregator.last_update_timestamp) ) self.assertEqual(envelope.sample_rate, None) self.assertEqual(envelope.seq, None) From 8fbcad05547ccec42799a2b4f1fd450dfd6505fb Mon Sep 17 00:00:00 2001 From: Leighton Date: Mon, 18 May 2020 11:05:16 -0700 Subject: [PATCH 6/7] lint --- azure_monitor/src/azure_monitor/export/__init__.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/azure_monitor/src/azure_monitor/export/__init__.py b/azure_monitor/src/azure_monitor/export/__init__.py index 5932a1e..27cfbe5 100644 --- a/azure_monitor/src/azure_monitor/export/__init__.py +++ b/azure_monitor/src/azure_monitor/export/__init__.py @@ -187,10 +187,7 @@ def _transmit(self, envelopes: typing.List[Envelope]) -> ExportResult: def get_trace_export_result(result: ExportResult) -> SpanExportResult: if result == ExportResult.SUCCESS: return SpanExportResult.SUCCESS - if ( - result == ExportResult.FAILED_RETRYABLE - or result == ExportResult.FAILED_NOT_RETRYABLE - ): + if result in (ExportResult.FAILED_RETRYABLE, ExportResult.FAILED_NOT_RETRYABLE): return SpanExportResult.FAILURE return None @@ -198,9 +195,6 @@ def get_trace_export_result(result: ExportResult) -> SpanExportResult: def get_metrics_export_result(result: ExportResult) -> MetricsExportResult: if result == ExportResult.SUCCESS: return MetricsExportResult.SUCCESS - if ( - result == ExportResult.FAILED_RETRYABLE - or result == ExportResult.FAILED_NOT_RETRYABLE - ): + if result in (ExportResult.FAILED_RETRYABLE, ExportResult.FAILED_NOT_RETRYABLE): return MetricsExportResult.FAILURE return None From b35b0ba0f2fa69b07ee249ef5894a16a8f0f45bd Mon Sep 17 00:00:00 2001 From: Leighton Date: Mon, 18 May 2020 11:08:23 -0700 Subject: [PATCH 7/7] lint --- azure_monitor/src/azure_monitor/export/__init__.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/azure_monitor/src/azure_monitor/export/__init__.py b/azure_monitor/src/azure_monitor/export/__init__.py index 27cfbe5..814d15e 100644 --- a/azure_monitor/src/azure_monitor/export/__init__.py +++ b/azure_monitor/src/azure_monitor/export/__init__.py @@ -187,7 +187,10 @@ def _transmit(self, envelopes: typing.List[Envelope]) -> ExportResult: def get_trace_export_result(result: ExportResult) -> SpanExportResult: if result == ExportResult.SUCCESS: return SpanExportResult.SUCCESS - if result in (ExportResult.FAILED_RETRYABLE, ExportResult.FAILED_NOT_RETRYABLE): + if result in ( + ExportResult.FAILED_RETRYABLE, + ExportResult.FAILED_NOT_RETRYABLE, + ): return SpanExportResult.FAILURE return None @@ -195,6 +198,9 @@ def get_trace_export_result(result: ExportResult) -> SpanExportResult: def get_metrics_export_result(result: ExportResult) -> MetricsExportResult: if result == ExportResult.SUCCESS: return MetricsExportResult.SUCCESS - if result in (ExportResult.FAILED_RETRYABLE, ExportResult.FAILED_NOT_RETRYABLE): + if result in ( + ExportResult.FAILED_RETRYABLE, + ExportResult.FAILED_NOT_RETRYABLE, + ): return MetricsExportResult.FAILURE return None