From 0f337c30d3a482237292d1b9e5091582998e477a Mon Sep 17 00:00:00 2001 From: Leighton Date: Thu, 2 Apr 2020 18:40:52 -0700 Subject: [PATCH 1/6] remove label sets --- .../examples/metrics/auto_collector.py | 4 +- azure_monitor/examples/metrics/client.py | 26 ---------- azure_monitor/examples/metrics/observer.py | 47 +++++++++++++++++++ azure_monitor/examples/metrics/simple.py | 4 +- .../azure_monitor/export/metrics/__init__.py | 8 ++-- .../sdk/auto_collection/__init__.py | 13 ++--- .../sdk/auto_collection/dependency_metrics.py | 12 ++--- .../auto_collection/performance_metrics.py | 16 +++---- .../sdk/auto_collection/request_metrics.py | 17 +++---- .../auto_collection/test_auto_collection.py | 11 ++--- .../test_dependency_metrics.py | 19 ++++---- .../test_performance_metrics.py | 27 +++++------ .../auto_collection/test_request_metrics.py | 27 +++++------ azure_monitor/tests/metrics/test_metrics.py | 23 ++++----- 14 files changed, 137 insertions(+), 117 deletions(-) delete mode 100644 azure_monitor/examples/metrics/client.py create mode 100644 azure_monitor/examples/metrics/observer.py diff --git a/azure_monitor/examples/metrics/auto_collector.py b/azure_monitor/examples/metrics/auto_collector.py index cd899d7..75b1230 100644 --- a/azure_monitor/examples/metrics/auto_collector.py +++ b/azure_monitor/examples/metrics/auto_collector.py @@ -14,10 +14,10 @@ ) controller = PushController(meter, exporter, 5) -testing_label_set = meter.get_label_set({"environment": "testing"}) +testing_label_set = {"environment": "testing"} # Automatically collect standard metrics -auto_collection = AutoCollection(meter=meter, label_set=testing_label_set) +auto_collection = AutoCollection(meter=meter, labels=testing_label_set) # To configure a separate export interval specific for standard metrics # meter_standard = metrics.get_meter(__name__ + "_standard") diff --git a/azure_monitor/examples/metrics/client.py b/azure_monitor/examples/metrics/client.py deleted file mode 100644 index 57bec03..0000000 --- a/azure_monitor/examples/metrics/client.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. -# pylint: disable=import-error -# pylint: disable=no-member -# pylint: disable=no-name-in-module -import requests -from opentelemetry import trace -from opentelemetry.ext import http_requests -from opentelemetry.sdk.trace import TracerProvider -from opentelemetry.sdk.trace.export import BatchExportSpanProcessor - -from azure_monitor import AzureMonitorSpanExporter - -trace.set_tracer_provider(TracerProvider()) -tracer = trace.get_tracer(__name__) -http_requests.enable(trace.get_tracer_provider()) -span_processor = BatchExportSpanProcessor( - AzureMonitorSpanExporter( - connection_string="InstrumentationKey=" - ) -) -trace.get_tracer_provider().add_span_processor(span_processor) - -response = requests.get(url="http://google.com") - -input("Press any key to exit...") diff --git a/azure_monitor/examples/metrics/observer.py b/azure_monitor/examples/metrics/observer.py new file mode 100644 index 0000000..4f9344f --- /dev/null +++ b/azure_monitor/examples/metrics/observer.py @@ -0,0 +1,47 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +import psutil + +from opentelemetry import metrics +from opentelemetry.sdk.metrics import MeterProvider +from opentelemetry.sdk.metrics.export.controller import PushController + +from azure_monitor import AzureMonitorMetricsExporter + +metrics.set_meter_provider(MeterProvider()) +meter = metrics.get_meter(__name__) +exporter = AzureMonitorMetricsExporter( + connection_string="InstrumentationKey=" +) +controller = PushController(meter=meter, exporter=exporter, interval=2) + +# Callback to gather cpu usage +def get_cpu_usage_callback(observer): + for (number, percent) in enumerate(psutil.cpu_percent(percpu=True)): + labels = {"cpu_number": str(number)} + observer.observe(percent, labels) + +meter.register_observer( + callback=get_cpu_usage_callback, + name="cpu_percent", + description="per-cpu usage", + unit="1", + value_type=float, + label_keys=("cpu_number",), +) + +# Callback to gather RAM memory usage +def get_ram_usage_callback(observer): + ram_percent = psutil.virtual_memory().percent + observer.observe(ram_percent, {}) + +meter.register_observer( + callback=get_ram_usage_callback, + name="ram_percent", + description="RAM memory usage", + unit="1", + value_type=float, + label_keys=(), +) + +input("Metrics will be printed soon. Press a key to finish...\n") diff --git a/azure_monitor/examples/metrics/simple.py b/azure_monitor/examples/metrics/simple.py index 3547764..5c11f79 100644 --- a/azure_monitor/examples/metrics/simple.py +++ b/azure_monitor/examples/metrics/simple.py @@ -22,8 +22,8 @@ label_keys=("environment",), ) -testing_label_set = meter.get_label_set({"environment": "testing"}) +testing_labels = {"environment": "testing"} -requests_counter.add(25, testing_label_set) +requests_counter.add(25, testing_labels) input("Press any key to exit...") diff --git a/azure_monitor/src/azure_monitor/export/metrics/__init__.py b/azure_monitor/src/azure_monitor/export/metrics/__init__.py index 98d7369..d7b987b 100644 --- a/azure_monitor/src/azure_monitor/export/metrics/__init__.py +++ b/azure_monitor/src/azure_monitor/export/metrics/__init__.py @@ -60,12 +60,12 @@ def _metric_to_envelope( if not metric_record: return None - # TODO: Opentelemetry does not have last updated timestamp for observer - # type metrics yet. + # 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( - metric_record.label_set + dict(metric_record.labels) ).last_update_timestamp envelope = protocol.Envelope( ikey=self.options.instrumentation_key, @@ -93,7 +93,7 @@ def _metric_to_envelope( ) properties = {} - for label_tuple in metric_record.label_set.labels: + for label_tuple in metric_record.labels: properties[label_tuple[0]] = label_tuple[1] data = protocol.MetricData(metrics=[data_point], properties=properties) envelope.data = protocol.Data(base_data=data, base_type="MetricData") diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py index b7ebe41..aade45d 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py @@ -1,7 +1,8 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. # -from opentelemetry.metrics import LabelSet, Meter +from typing import Dict +from opentelemetry.metrics import Meter from azure_monitor.sdk.auto_collection.dependency_metrics import ( DependencyMetrics, @@ -25,10 +26,10 @@ class AutoCollection: Args: meter: OpenTelemetry Meter - label_set: OpenTelemetry label set + labels: Dictionary of labels """ - def __init__(self, meter: Meter, label_set: LabelSet): - self._performance_metrics = PerformanceMetrics(meter, label_set) - self._dependency_metrics = DependencyMetrics(meter, label_set) - self._request_metrics = RequestMetrics(meter, label_set) + def __init__(self, meter: Meter, labels: Dict[str, str]): + self._performance_metrics = PerformanceMetrics(meter, labels) + self._dependency_metrics = DependencyMetrics(meter, labels) + self._request_metrics = RequestMetrics(meter, labels) diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/dependency_metrics.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/dependency_metrics.py index 4b86a13..476a70e 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/dependency_metrics.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/dependency_metrics.py @@ -4,9 +4,9 @@ import time import requests +from typing import Dict from opentelemetry import context from opentelemetry.metrics import Meter -from opentelemetry.sdk.metrics import LabelSet dependency_map = dict() _dependency_lock = threading.Lock() @@ -30,12 +30,12 @@ class DependencyMetrics: Args: meter: OpenTelemetry Meter - label_set: OpenTelemetry label set + labels: Dictionary of labels """ - def __init__(self, meter: Meter, label_set: LabelSet): + def __init__(self, meter: Meter, labels: Dict[str, str]): self._meter = meter - self._label_set = label_set + self._labels = labels # Patch requests requests.Session.request = dependency_patch meter.register_observer( @@ -70,8 +70,8 @@ def _track_dependency_rate(self, observer) -> None: dependency_map["last_time"] = current_time dependency_map["last_count"] = current_count dependency_map["last_result"] = result - observer.observe(int(result), self._label_set) + observer.observe(int(result), self._labels) except ZeroDivisionError: # If elapsed_seconds is 0, exporter call made too close to previous # Return the previous result if this is the case - observer.observe(int(last_result), self._label_set) + observer.observe(int(last_result), self._labels) diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/performance_metrics.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/performance_metrics.py index 0a66fce..2394727 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/performance_metrics.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/performance_metrics.py @@ -3,8 +3,8 @@ import logging import psutil +from typing import Dict from opentelemetry.metrics import Meter -from opentelemetry.sdk.metrics import LabelSet logger = logging.getLogger(__name__) PROCESS = psutil.Process() @@ -18,12 +18,12 @@ class PerformanceMetrics: Args: meter: OpenTelemetry Meter - label_set: OpenTelemetry label set + labels: Dictionary of labels """ - def __init__(self, meter: Meter, label_set: LabelSet): + def __init__(self, meter: Meter, labels: Dict[str, str]): self._meter = meter - self._label_set = label_set + self._labels = labels # Create performance metrics meter.register_observer( callback=self._track_cpu, @@ -63,7 +63,7 @@ def _track_cpu(self, observer) -> None: from 0.0 to 100.0 inclusive. """ cpu_times_percent = psutil.cpu_times_percent() - observer.observe(100.0 - cpu_times_percent.idle, self._label_set) + observer.observe(100.0 - cpu_times_percent.idle, self._labels) def _track_memory(self, observer) -> None: """ Track Memory @@ -71,7 +71,7 @@ def _track_memory(self, observer) -> None: Available memory is defined as memory that can be given instantly to processes without the system going into swap. """ - observer.observe(psutil.virtual_memory().available, self._label_set) + observer.observe(psutil.virtual_memory().available, self._labels) def _track_process_cpu(self, observer) -> None: """ Track Process CPU time @@ -85,7 +85,7 @@ def _track_process_cpu(self, observer) -> None: # normalize the cpu process using the number of logical CPUs cpu_count = psutil.cpu_count(logical=True) observer.observe( - PROCESS.cpu_percent() / cpu_count, self._label_set + PROCESS.cpu_percent() / cpu_count, self._labels ) except Exception: # pylint: disable=broad-except logger.exception("Error handling get process cpu usage.") @@ -97,6 +97,6 @@ def _track_process_memory(self, observer) -> None: processes without the system going into swap. """ try: - observer.observe(PROCESS.memory_info().rss, self._label_set) + observer.observe(PROCESS.memory_info().rss, self._labels) except Exception: # pylint: disable=broad-except logger.exception("Error handling get process private bytes.") diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py index 2505cbe..4c31cac 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py @@ -4,8 +4,9 @@ import threading import time from http.server import HTTPServer +from typing import Dict -from opentelemetry.metrics import LabelSet, Meter +from opentelemetry.metrics import Meter logger = logging.getLogger(__name__) @@ -59,12 +60,12 @@ class RequestMetrics: Args: meter: OpenTelemetry Meter - label_set: OpenTelemetry label set + labels: Dictionary of labels """ - def __init__(self, meter: Meter, label_set: LabelSet): + def __init__(self, meter: Meter, labels: Dict[str, str]): self._meter = meter - self._label_set = label_set + self._labels = labels # Patch the HTTPServer handler to track request information HTTPServer.__init__ = server_patch @@ -102,12 +103,12 @@ def _track_request_duration(self, observer) -> None: requests_map["last_average_duration"] = result requests_map["last_duration"] = requests_map.get("duration", 0) # Convert to milliseconds - observer.observe(int(result * 1000.0), self._label_set) + observer.observe(int(result * 1000.0), self._labels) except ZeroDivisionError: # If interval_count is 0, exporter call made too close to previous # Return the previous result if this is the case observer.observe( - int(last_average_duration * 1000.0), self._label_set + int(last_average_duration * 1000.0), self._labels ) def _track_request_rate(self, observer) -> None: @@ -134,8 +135,8 @@ def _track_request_rate(self, observer) -> None: requests_map["last_time"] = current_time requests_map["last_count"] = requests_map.get("count", 0) requests_map["last_rate"] = result - observer.observe(int(result), self._label_set) + observer.observe(int(result), self._labels) except ZeroDivisionError: # If elapsed_seconds is 0, exporter call made too close to previous # Return the previous result if this is the case - observer.observe(int(last_rate), self._label_set) + observer.observe(int(last_rate), self._labels) diff --git a/azure_monitor/tests/auto_collection/test_auto_collection.py b/azure_monitor/tests/auto_collection/test_auto_collection.py index 301d249..884b00a 100644 --- a/azure_monitor/tests/auto_collection/test_auto_collection.py +++ b/azure_monitor/tests/auto_collection/test_auto_collection.py @@ -16,8 +16,7 @@ class TestAutoCollection(unittest.TestCase): def setUpClass(cls): metrics.set_meter_provider(MeterProvider()) cls._meter = metrics.get_meter(__name__) - kvp = {"environment": "staging"} - cls._test_label_set = cls._meter.get_label_set(kvp) + cls._test_labels = tuple({"environment": "staging"}.items()) @classmethod def tearDownClass(cls): @@ -36,17 +35,17 @@ def test_constructor( self, mock_performance, mock_dependencies, mock_requests ): """Test the constructor.""" - AutoCollection(meter=self._meter, label_set=self._test_label_set) + AutoCollection(meter=self._meter, labels=self._test_labels) self.assertEqual(mock_performance.called, True) self.assertEqual(mock_dependencies.called, True) self.assertEqual(mock_requests.called, True) self.assertEqual(mock_performance.call_args[0][0], self._meter) self.assertEqual( - mock_performance.call_args[0][1], self._test_label_set + mock_performance.call_args[0][1], self._test_labels ) self.assertEqual(mock_dependencies.call_args[0][0], self._meter) self.assertEqual( - mock_dependencies.call_args[0][1], self._test_label_set + mock_dependencies.call_args[0][1], self._test_labels ) self.assertEqual(mock_requests.call_args[0][0], self._meter) - self.assertEqual(mock_requests.call_args[0][1], self._test_label_set) + self.assertEqual(mock_requests.call_args[0][1], self._test_labels) diff --git a/azure_monitor/tests/auto_collection/test_dependency_metrics.py b/azure_monitor/tests/auto_collection/test_dependency_metrics.py index fe273df..8514528 100644 --- a/azure_monitor/tests/auto_collection/test_dependency_metrics.py +++ b/azure_monitor/tests/auto_collection/test_dependency_metrics.py @@ -21,8 +21,7 @@ class TestDependencyMetrics(unittest.TestCase): def setUpClass(cls): metrics.set_meter_provider(MeterProvider()) cls._meter = metrics.get_meter(__name__) - kvp = {"environment": "staging"} - cls._test_label_set = cls._meter.get_label_set(kvp) + cls._test_labels = {"environment": "staging"} @classmethod def tearDown(cls): @@ -38,10 +37,10 @@ def setUp(self): def test_constructor(self): mock_meter = mock.Mock() metrics_collector = dependency_metrics.DependencyMetrics( - meter=mock_meter, label_set=self._test_label_set + meter=mock_meter, labels=self._test_labels ) self.assertEqual(metrics_collector._meter, mock_meter) - self.assertEqual(metrics_collector._label_set, self._test_label_set) + self.assertEqual(metrics_collector._labels, self._test_labels) self.assertEqual(mock_meter.register_observer.call_count, 1) mock_meter.register_observer.assert_called_with( callback=metrics_collector._track_dependency_rate, @@ -55,7 +54,7 @@ def test_constructor(self): def test_track_dependency_rate(self, time_mock): time_mock.time.return_value = 100 metrics_collector = dependency_metrics.DependencyMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) obs = Observer( callback=metrics_collector._track_dependency_rate, @@ -68,13 +67,13 @@ def test_track_dependency_rate(self, time_mock): dependency_metrics.dependency_map["last_time"] = 98 dependency_metrics.dependency_map["count"] = 4 metrics_collector._track_dependency_rate(obs) - self.assertEqual(obs.aggregators[self._test_label_set].current, 2) + self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 2) @mock.patch("azure_monitor.sdk.auto_collection.dependency_metrics.time") def test_track_dependency_rate_time_none(self, time_mock): time_mock.time.return_value = 100 metrics_collector = dependency_metrics.DependencyMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) dependency_metrics.dependency_map["last_time"] = None obs = Observer( @@ -86,13 +85,13 @@ def test_track_dependency_rate_time_none(self, time_mock): meter=self._meter, ) metrics_collector._track_dependency_rate(obs) - self.assertEqual(obs.aggregators[self._test_label_set].current, 0) + self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 0) @mock.patch("azure_monitor.sdk.auto_collection.dependency_metrics.time") def test_track_dependency_rate_error(self, time_mock): time_mock.time.return_value = 100 metrics_collector = dependency_metrics.DependencyMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) dependency_metrics.dependency_map["last_time"] = 100 dependency_metrics.dependency_map["last_result"] = 5 @@ -105,7 +104,7 @@ def test_track_dependency_rate_error(self, time_mock): meter=self._meter, ) metrics_collector._track_dependency_rate(obs) - self.assertEqual(obs.aggregators[self._test_label_set].current, 5) + self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 5) @mock.patch( "azure_monitor.sdk.auto_collection.dependency_metrics.ORIGINAL_REQUEST" diff --git a/azure_monitor/tests/auto_collection/test_performance_metrics.py b/azure_monitor/tests/auto_collection/test_performance_metrics.py index 6637913..a0df358 100644 --- a/azure_monitor/tests/auto_collection/test_performance_metrics.py +++ b/azure_monitor/tests/auto_collection/test_performance_metrics.py @@ -24,8 +24,7 @@ class TestPerformanceMetrics(unittest.TestCase): def setUpClass(cls): metrics.set_meter_provider(MeterProvider()) cls._meter = metrics.get_meter(__name__) - kvp = {"environment": "staging"} - cls._test_label_set = cls._meter.get_label_set(kvp) + cls._test_labels = {"environment": "staging"} @classmethod def tearDownClass(cls): @@ -34,11 +33,11 @@ def tearDownClass(cls): def test_constructor(self): mock_meter = mock.Mock() performance_metrics_collector = PerformanceMetrics( - meter=mock_meter, label_set=self._test_label_set + meter=mock_meter, labels=self._test_labels ) self.assertEqual(performance_metrics_collector._meter, mock_meter) self.assertEqual( - performance_metrics_collector._label_set, self._test_label_set + performance_metrics_collector._labels, self._test_labels ) self.assertEqual(mock_meter.register_observer.call_count, 4) reg_obs_calls = mock_meter.register_observer.call_args_list @@ -73,7 +72,7 @@ def test_constructor(self): def test_track_cpu(self): performance_metrics_collector = PerformanceMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) with mock.patch("psutil.cpu_times_percent") as processor_mock: cpu = collections.namedtuple("cpu", "idle") @@ -89,13 +88,13 @@ def test_track_cpu(self): ) performance_metrics_collector._track_cpu(obs) self.assertEqual( - obs.aggregators[self._test_label_set].current, 5.5 + obs.aggregators[tuple(self._test_labels.items())].current, 5.5 ) @mock.patch("psutil.virtual_memory") def test_track_memory(self, psutil_mock): performance_metrics_collector = PerformanceMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) memory = collections.namedtuple("memory", "available") vmem = memory(available=100) @@ -109,7 +108,7 @@ def test_track_memory(self, psutil_mock): meter=self._meter, ) performance_metrics_collector._track_memory(obs) - self.assertEqual(obs.aggregators[self._test_label_set].current, 100) + self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 100) @mock.patch("azure_monitor.sdk.auto_collection.performance_metrics.psutil") def test_track_process_cpu(self, psutil_mock): @@ -117,7 +116,7 @@ def test_track_process_cpu(self, psutil_mock): "azure_monitor.sdk.auto_collection.performance_metrics.PROCESS" ) as process_mock: performance_metrics_collector = PerformanceMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) process_mock.cpu_percent.return_value = 44.4 psutil_mock.cpu_count.return_value = 2 @@ -131,7 +130,7 @@ def test_track_process_cpu(self, psutil_mock): ) performance_metrics_collector._track_process_cpu(obs) self.assertEqual( - obs.aggregators[self._test_label_set].current, 22.2 + obs.aggregators[tuple(self._test_labels.items())].current, 22.2 ) @mock.patch("azure_monitor.sdk.auto_collection.performance_metrics.logger") @@ -140,7 +139,7 @@ def test_track_process_cpu_exception(self, logger_mock): "azure_monitor.sdk.auto_collection.performance_metrics.psutil" ) as psutil_mock: performance_metrics_collector = PerformanceMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) psutil_mock.cpu_count.return_value = None obs = Observer( @@ -159,7 +158,7 @@ def test_track_process_memory(self): "azure_monitor.sdk.auto_collection.performance_metrics.PROCESS" ) as process_mock: performance_metrics_collector = PerformanceMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) memory = collections.namedtuple("memory", "rss") pmem = memory(rss=100) @@ -174,7 +173,7 @@ def test_track_process_memory(self): ) performance_metrics_collector._track_process_memory(obs) self.assertEqual( - obs.aggregators[self._test_label_set].current, 100 + obs.aggregators[tuple(self._test_labels.items())].current, 100 ) @mock.patch("azure_monitor.sdk.auto_collection.performance_metrics.logger") @@ -184,7 +183,7 @@ def test_track_process_memory_exception(self, logger_mock): throw(Exception), ): performance_metrics_collector = PerformanceMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) obs = Observer( callback=performance_metrics_collector._track_process_memory, diff --git a/azure_monitor/tests/auto_collection/test_request_metrics.py b/azure_monitor/tests/auto_collection/test_request_metrics.py index 63030d1..903e150 100644 --- a/azure_monitor/tests/auto_collection/test_request_metrics.py +++ b/azure_monitor/tests/auto_collection/test_request_metrics.py @@ -21,8 +21,7 @@ class TestRequestMetrics(unittest.TestCase): def setUpClass(cls): metrics.set_meter_provider(MeterProvider()) cls._meter = metrics.get_meter(__name__) - kvp = {"environment": "staging"} - cls._test_label_set = cls._meter.get_label_set(kvp) + cls._test_labels = {"environment": "staging"} @classmethod def tearDown(cls): @@ -36,11 +35,11 @@ def setUp(self): def test_constructor(self): mock_meter = mock.Mock() request_metrics_collector = request_metrics.RequestMetrics( - meter=mock_meter, label_set=self._test_label_set + meter=mock_meter, labels=self._test_labels ) self.assertEqual(request_metrics_collector._meter, mock_meter) self.assertEqual( - request_metrics_collector._label_set, self._test_label_set + request_metrics_collector._labels, self._test_labels ) self.assertEqual(mock_meter.register_observer.call_count, 2) @@ -65,7 +64,7 @@ def test_constructor(self): def test_track_request_duration(self): request_metrics_collector = request_metrics.RequestMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) request_metrics.requests_map["duration"] = 0.1 request_metrics.requests_map["count"] = 10 @@ -79,11 +78,11 @@ def test_track_request_duration(self): meter=self._meter, ) request_metrics_collector._track_request_duration(obs) - self.assertEqual(obs.aggregators[self._test_label_set].current, 20) + self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 20) def test_track_request_duration_error(self): request_metrics_collector = request_metrics.RequestMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) request_metrics.requests_map["duration"] = 0.1 request_metrics.requests_map["count"] = 10 @@ -97,12 +96,12 @@ def test_track_request_duration_error(self): meter=self._meter, ) request_metrics_collector._track_request_duration(obs) - self.assertEqual(obs.aggregators[self._test_label_set].current, 0) + self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 0) @mock.patch("azure_monitor.sdk.auto_collection.request_metrics.time") def test_track_request_rate(self, time_mock): request_metrics_collector = request_metrics.RequestMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) time_mock.time.return_value = 100 request_metrics.requests_map["last_time"] = 98 @@ -116,13 +115,13 @@ def test_track_request_rate(self, time_mock): meter=self._meter, ) request_metrics_collector._track_request_rate(obs) - self.assertEqual(obs.aggregators[self._test_label_set].current, 2) + self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 2) @mock.patch("azure_monitor.sdk.auto_collection.request_metrics.time") def test_track_request_rate_time_none(self, time_mock): time_mock.time.return_value = 100 request_metrics_collector = request_metrics.RequestMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) request_metrics.requests_map["last_time"] = None obs = Observer( @@ -134,12 +133,12 @@ def test_track_request_rate_time_none(self, time_mock): meter=self._meter, ) request_metrics_collector._track_request_rate(obs) - self.assertEqual(obs.aggregators[self._test_label_set].current, 0) + self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 0) @mock.patch("azure_monitor.sdk.auto_collection.request_metrics.time") def test_track_request_rate_error(self, time_mock): request_metrics_collector = request_metrics.RequestMetrics( - meter=self._meter, label_set=self._test_label_set + meter=self._meter, labels=self._test_labels ) time_mock.time.return_value = 100 request_metrics.requests_map["last_rate"] = 5 @@ -153,7 +152,7 @@ def test_track_request_rate_error(self, time_mock): meter=self._meter, ) request_metrics_collector._track_request_rate(obs) - self.assertEqual(obs.aggregators[self._test_label_set].current, 5) + self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 5) def test_request_patch(self): map = request_metrics.requests_map # pylint: disable=redefined-builtin diff --git a/azure_monitor/tests/metrics/test_metrics.py b/azure_monitor/tests/metrics/test_metrics.py index 1984c3b..e2a7baa 100644 --- a/azure_monitor/tests/metrics/test_metrics.py +++ b/azure_monitor/tests/metrics/test_metrics.py @@ -67,8 +67,7 @@ def setUpClass(cls): Counter, ["environment"], ) - kvp = {"environment": "staging"} - cls._test_label_set = cls._meter.get_label_set(kvp) + cls._test_labels = tuple({"environment": "staging"}.items()) def setUp(self): for filename in os.listdir(STORAGE_PATH): @@ -99,7 +98,7 @@ def test_constructor(self): def test_export(self,): record = MetricRecord( - CounterAggregator(), self._test_label_set, self._test_metric + CounterAggregator(), self._test_labels, self._test_metric ) exporter = self._exporter with mock.patch( @@ -111,7 +110,7 @@ def test_export(self,): def test_export_failed_retryable(self): record = MetricRecord( - CounterAggregator(), self._test_label_set, self._test_metric + CounterAggregator(), self._test_labels, self._test_metric ) exporter = self._exporter with mock.patch( @@ -127,7 +126,7 @@ def test_export_failed_retryable(self): @mock.patch("azure_monitor.export.metrics.logger") def test_export_exception(self, logger_mock): record = MetricRecord( - CounterAggregator(), self._test_label_set, self._test_metric + CounterAggregator(), self._test_labels, self._test_metric ) exporter = self._exporter with mock.patch( @@ -147,7 +146,7 @@ def test_metric_to_envelope(self): aggregator.update(123) aggregator.take_checkpoint() record = MetricRecord( - aggregator, self._test_label_set, self._test_metric + aggregator, self._test_labels, self._test_metric ) exporter = self._exporter envelope = exporter._metric_to_envelope(record) @@ -157,7 +156,7 @@ def test_metric_to_envelope(self): self.assertEqual( envelope.time, ns_to_iso_str( - record.metric.bind(record.label_set).last_update_timestamp + record.metric.bind(dict(record.labels)).last_update_timestamp ), ) self.assertEqual(envelope.sample_rate, None) @@ -188,7 +187,8 @@ def test_observer_to_envelope(self): aggregator = ObserverAggregator() aggregator.update(123) aggregator.take_checkpoint() - record = MetricRecord(aggregator, self._test_label_set, self._test_obs) + record = MetricRecord(aggregator, self._test_labels, self._test_obs) + print(record.labels) exporter = self._exporter envelope = exporter._metric_to_envelope(record) self.assertIsInstance(envelope, Envelope) @@ -231,7 +231,7 @@ def test_observer_to_envelope_value_none(self): aggregator = ObserverAggregator() aggregator.update(None) aggregator.take_checkpoint() - record = MetricRecord(aggregator, self._test_label_set, self._test_obs) + record = MetricRecord(aggregator, self._test_labels, self._test_obs) exporter = self._exporter envelope = exporter._metric_to_envelope(record) self.assertIsInstance(envelope, Envelope) @@ -259,6 +259,7 @@ def test_observer_to_envelope_value_none(self): self.assertEqual(envelope.data.base_data.metrics[0].ns, "testdesc") self.assertEqual(envelope.data.base_data.metrics[0].name, "testname") self.assertEqual(envelope.data.base_data.metrics[0].value, 0) + print(envelope.data.base_data.properties) self.assertEqual( envelope.data.base_data.properties["environment"], "staging" ) @@ -276,7 +277,7 @@ def test_measure_to_envelope(self, logger_mock): aggregator.update(123) aggregator.take_checkpoint() record = MetricRecord( - aggregator, self._test_label_set, self._test_measure + aggregator, self._test_labels, self._test_measure ) exporter = self._exporter envelope = exporter._metric_to_envelope(record) @@ -286,7 +287,7 @@ def test_measure_to_envelope(self, logger_mock): self.assertEqual( envelope.time, ns_to_iso_str( - record.metric.bind(record.label_set).last_update_timestamp + record.metric.bind(dict(record.labels)).last_update_timestamp ), ) self.assertEqual(envelope.sample_rate, None) From d218c197e977b012764758464ebb7fa206a4fae8 Mon Sep 17 00:00:00 2001 From: Leighton Date: Fri, 3 Apr 2020 09:37:42 -0700 Subject: [PATCH 2/6] is remote --- azure_monitor/README.md | 4 ++-- azure_monitor/tests/trace/test_trace.py | 26 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/azure_monitor/README.md b/azure_monitor/README.md index 112d3ff..e31d400 100644 --- a/azure_monitor/README.md +++ b/azure_monitor/README.md @@ -152,9 +152,9 @@ requests_counter = meter.create_metric( label_keys=("environment",), ) -testing_label_set = meter.get_label_set({"environment": "testing"}) +testing_labels = {"environment": "testing"} -requests_counter.add(25, testing_label_set) +requests_counter.add(25, testing_labels) time.sleep(100) ``` diff --git a/azure_monitor/tests/trace/test_trace.py b/azure_monitor/tests/trace/test_trace.py index 3e3f161..44d8853 100644 --- a/azure_monitor/tests/trace/test_trace.py +++ b/azure_monitor/tests/trace/test_trace.py @@ -92,6 +92,7 @@ def test_export_failure(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557338, + is_remote=False, ), ) test_span.start() @@ -108,6 +109,7 @@ def test_export_success(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557338, + is_remote=False, ), ) test_span.start() @@ -129,6 +131,7 @@ def test_export_exception(self, logger_mock): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557338, + is_remote=False, ), ) test_span.start() @@ -149,6 +152,7 @@ def test_export_not_retryable(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557338, + is_remote=False, ), ) test_span.start() @@ -176,6 +180,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557338, + is_remote=False, ), ) @@ -188,6 +193,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -237,6 +243,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -275,6 +282,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -323,6 +331,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -376,6 +385,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -429,6 +439,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -472,6 +483,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=None, sampler=None, @@ -510,6 +522,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -543,6 +556,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195432, span_id=12030755672171557338, + is_remote=False, ) ) ) @@ -551,6 +565,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -582,6 +597,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -609,6 +625,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -636,6 +653,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -662,6 +680,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -688,6 +707,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -714,6 +734,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -741,6 +762,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -777,6 +799,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -804,6 +827,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -840,6 +864,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, @@ -873,6 +898,7 @@ def test_span_to_envelope(self): context=SpanContext( trace_id=36873507687745823477771305566750195431, span_id=12030755672171557337, + is_remote=False, ), parent=parent_span, sampler=None, From 5251aa4ab9392861323632c48f3f202a2c8525a8 Mon Sep 17 00:00:00 2001 From: Leighton Date: Fri, 3 Apr 2020 09:43:34 -0700 Subject: [PATCH 3/6] lint --- azure_monitor/examples/metrics/observer.py | 3 ++- .../sdk/auto_collection/__init__.py | 1 + .../sdk/auto_collection/dependency_metrics.py | 2 +- .../auto_collection/performance_metrics.py | 6 ++--- .../sdk/auto_collection/request_metrics.py | 4 +--- azure_monitor/src/azure_monitor/storage.py | 7 +++--- .../auto_collection/test_auto_collection.py | 8 ++----- .../test_dependency_metrics.py | 12 +++++++--- .../test_performance_metrics.py | 4 +++- .../auto_collection/test_request_metrics.py | 24 ++++++++++++------- azure_monitor/tests/metrics/test_metrics.py | 4 +--- azure_monitor/tests/test_storage.py | 18 +++++++------- 12 files changed, 51 insertions(+), 42 deletions(-) diff --git a/azure_monitor/examples/metrics/observer.py b/azure_monitor/examples/metrics/observer.py index 4f9344f..705178e 100644 --- a/azure_monitor/examples/metrics/observer.py +++ b/azure_monitor/examples/metrics/observer.py @@ -1,7 +1,6 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. import psutil - from opentelemetry import metrics from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export.controller import PushController @@ -21,6 +20,7 @@ def get_cpu_usage_callback(observer): labels = {"cpu_number": str(number)} observer.observe(percent, labels) + meter.register_observer( callback=get_cpu_usage_callback, name="cpu_percent", @@ -35,6 +35,7 @@ def get_ram_usage_callback(observer): ram_percent = psutil.virtual_memory().percent observer.observe(ram_percent, {}) + meter.register_observer( callback=get_ram_usage_callback, name="ram_percent", diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py index aade45d..949c015 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/__init__.py @@ -2,6 +2,7 @@ # Licensed under the MIT License. # from typing import Dict + from opentelemetry.metrics import Meter from azure_monitor.sdk.auto_collection.dependency_metrics import ( diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/dependency_metrics.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/dependency_metrics.py index 476a70e..5600612 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/dependency_metrics.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/dependency_metrics.py @@ -2,9 +2,9 @@ # Licensed under the MIT License. import threading import time +from typing import Dict import requests -from typing import Dict from opentelemetry import context from opentelemetry.metrics import Meter diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/performance_metrics.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/performance_metrics.py index 2394727..9e1927a 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/performance_metrics.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/performance_metrics.py @@ -1,9 +1,9 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. import logging +from typing import Dict import psutil -from typing import Dict from opentelemetry.metrics import Meter logger = logging.getLogger(__name__) @@ -84,9 +84,7 @@ def _track_process_cpu(self, observer) -> None: # CPU cores, the returned value of cpu_percent() can be > 100.0. We # normalize the cpu process using the number of logical CPUs cpu_count = psutil.cpu_count(logical=True) - observer.observe( - PROCESS.cpu_percent() / cpu_count, self._labels - ) + observer.observe(PROCESS.cpu_percent() / cpu_count, self._labels) except Exception: # pylint: disable=broad-except logger.exception("Error handling get process cpu usage.") diff --git a/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py b/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py index 4c31cac..8647ec6 100644 --- a/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py +++ b/azure_monitor/src/azure_monitor/sdk/auto_collection/request_metrics.py @@ -107,9 +107,7 @@ def _track_request_duration(self, observer) -> None: except ZeroDivisionError: # If interval_count is 0, exporter call made too close to previous # Return the previous result if this is the case - observer.observe( - int(last_average_duration * 1000.0), self._labels - ) + observer.observe(int(last_average_duration * 1000.0), self._labels) def _track_request_rate(self, observer) -> None: """ Track Request execution rate diff --git a/azure_monitor/src/azure_monitor/storage.py b/azure_monitor/src/azure_monitor/storage.py index d01c1d8..40bc286 100644 --- a/azure_monitor/src/azure_monitor/storage.py +++ b/azure_monitor/src/azure_monitor/storage.py @@ -195,8 +195,9 @@ def _check_storage_size(self): try: size += os.path.getsize(fp) except OSError: - logger.error("Path %s does not exist or is " - "inaccessible.", fp) + logger.error( + "Path %s does not exist or is " "inaccessible.", fp + ) continue if size >= self.max_size: logger.warning( @@ -204,7 +205,7 @@ def _check_storage_size(self): "reached. Currently at %fKB. Telemetry will be " "lost. Please consider increasing the value of " "'storage_max_size' in exporter config.", - format(size/1024) + format(size / 1024), ) return False return True diff --git a/azure_monitor/tests/auto_collection/test_auto_collection.py b/azure_monitor/tests/auto_collection/test_auto_collection.py index 884b00a..c965d4b 100644 --- a/azure_monitor/tests/auto_collection/test_auto_collection.py +++ b/azure_monitor/tests/auto_collection/test_auto_collection.py @@ -40,12 +40,8 @@ def test_constructor( self.assertEqual(mock_dependencies.called, True) self.assertEqual(mock_requests.called, True) self.assertEqual(mock_performance.call_args[0][0], self._meter) - self.assertEqual( - mock_performance.call_args[0][1], self._test_labels - ) + self.assertEqual(mock_performance.call_args[0][1], self._test_labels) self.assertEqual(mock_dependencies.call_args[0][0], self._meter) - self.assertEqual( - mock_dependencies.call_args[0][1], self._test_labels - ) + self.assertEqual(mock_dependencies.call_args[0][1], self._test_labels) self.assertEqual(mock_requests.call_args[0][0], self._meter) self.assertEqual(mock_requests.call_args[0][1], self._test_labels) diff --git a/azure_monitor/tests/auto_collection/test_dependency_metrics.py b/azure_monitor/tests/auto_collection/test_dependency_metrics.py index 8514528..df0a8a1 100644 --- a/azure_monitor/tests/auto_collection/test_dependency_metrics.py +++ b/azure_monitor/tests/auto_collection/test_dependency_metrics.py @@ -67,7 +67,9 @@ def test_track_dependency_rate(self, time_mock): dependency_metrics.dependency_map["last_time"] = 98 dependency_metrics.dependency_map["count"] = 4 metrics_collector._track_dependency_rate(obs) - self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 2) + self.assertEqual( + obs.aggregators[tuple(self._test_labels.items())].current, 2 + ) @mock.patch("azure_monitor.sdk.auto_collection.dependency_metrics.time") def test_track_dependency_rate_time_none(self, time_mock): @@ -85,7 +87,9 @@ def test_track_dependency_rate_time_none(self, time_mock): meter=self._meter, ) metrics_collector._track_dependency_rate(obs) - self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 0) + self.assertEqual( + obs.aggregators[tuple(self._test_labels.items())].current, 0 + ) @mock.patch("azure_monitor.sdk.auto_collection.dependency_metrics.time") def test_track_dependency_rate_error(self, time_mock): @@ -104,7 +108,9 @@ def test_track_dependency_rate_error(self, time_mock): meter=self._meter, ) metrics_collector._track_dependency_rate(obs) - self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 5) + self.assertEqual( + obs.aggregators[tuple(self._test_labels.items())].current, 5 + ) @mock.patch( "azure_monitor.sdk.auto_collection.dependency_metrics.ORIGINAL_REQUEST" diff --git a/azure_monitor/tests/auto_collection/test_performance_metrics.py b/azure_monitor/tests/auto_collection/test_performance_metrics.py index a0df358..ec81d2a 100644 --- a/azure_monitor/tests/auto_collection/test_performance_metrics.py +++ b/azure_monitor/tests/auto_collection/test_performance_metrics.py @@ -108,7 +108,9 @@ def test_track_memory(self, psutil_mock): meter=self._meter, ) performance_metrics_collector._track_memory(obs) - self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 100) + self.assertEqual( + obs.aggregators[tuple(self._test_labels.items())].current, 100 + ) @mock.patch("azure_monitor.sdk.auto_collection.performance_metrics.psutil") def test_track_process_cpu(self, psutil_mock): diff --git a/azure_monitor/tests/auto_collection/test_request_metrics.py b/azure_monitor/tests/auto_collection/test_request_metrics.py index 903e150..62b5a88 100644 --- a/azure_monitor/tests/auto_collection/test_request_metrics.py +++ b/azure_monitor/tests/auto_collection/test_request_metrics.py @@ -38,9 +38,7 @@ def test_constructor(self): meter=mock_meter, labels=self._test_labels ) self.assertEqual(request_metrics_collector._meter, mock_meter) - self.assertEqual( - request_metrics_collector._labels, self._test_labels - ) + self.assertEqual(request_metrics_collector._labels, self._test_labels) self.assertEqual(mock_meter.register_observer.call_count, 2) @@ -78,7 +76,9 @@ def test_track_request_duration(self): meter=self._meter, ) request_metrics_collector._track_request_duration(obs) - self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 20) + self.assertEqual( + obs.aggregators[tuple(self._test_labels.items())].current, 20 + ) def test_track_request_duration_error(self): request_metrics_collector = request_metrics.RequestMetrics( @@ -96,7 +96,9 @@ def test_track_request_duration_error(self): meter=self._meter, ) request_metrics_collector._track_request_duration(obs) - self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 0) + self.assertEqual( + obs.aggregators[tuple(self._test_labels.items())].current, 0 + ) @mock.patch("azure_monitor.sdk.auto_collection.request_metrics.time") def test_track_request_rate(self, time_mock): @@ -115,7 +117,9 @@ def test_track_request_rate(self, time_mock): meter=self._meter, ) request_metrics_collector._track_request_rate(obs) - self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 2) + self.assertEqual( + obs.aggregators[tuple(self._test_labels.items())].current, 2 + ) @mock.patch("azure_monitor.sdk.auto_collection.request_metrics.time") def test_track_request_rate_time_none(self, time_mock): @@ -133,7 +137,9 @@ def test_track_request_rate_time_none(self, time_mock): meter=self._meter, ) request_metrics_collector._track_request_rate(obs) - self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 0) + self.assertEqual( + obs.aggregators[tuple(self._test_labels.items())].current, 0 + ) @mock.patch("azure_monitor.sdk.auto_collection.request_metrics.time") def test_track_request_rate_error(self, time_mock): @@ -152,7 +158,9 @@ def test_track_request_rate_error(self, time_mock): meter=self._meter, ) request_metrics_collector._track_request_rate(obs) - self.assertEqual(obs.aggregators[tuple(self._test_labels.items())].current, 5) + self.assertEqual( + obs.aggregators[tuple(self._test_labels.items())].current, 5 + ) def test_request_patch(self): map = request_metrics.requests_map # pylint: disable=redefined-builtin diff --git a/azure_monitor/tests/metrics/test_metrics.py b/azure_monitor/tests/metrics/test_metrics.py index e2a7baa..ee5e28e 100644 --- a/azure_monitor/tests/metrics/test_metrics.py +++ b/azure_monitor/tests/metrics/test_metrics.py @@ -145,9 +145,7 @@ def test_metric_to_envelope(self): aggregator = CounterAggregator() aggregator.update(123) aggregator.take_checkpoint() - record = MetricRecord( - aggregator, self._test_labels, self._test_metric - ) + record = MetricRecord(aggregator, self._test_labels, self._test_metric) exporter = self._exporter envelope = exporter._metric_to_envelope(record) self.assertIsInstance(envelope, Envelope) diff --git a/azure_monitor/tests/test_storage.py b/azure_monitor/tests/test_storage.py index c4258b0..cee8cb6 100644 --- a/azure_monitor/tests/test_storage.py +++ b/azure_monitor/tests/test_storage.py @@ -110,7 +110,7 @@ def test_put(self): def test_put_max_size(self): test_input = (1, 2, 3) - with LocalFileStorage(os.path.join(TEST_FOLDER, 'asd')) as stor: + with LocalFileStorage(os.path.join(TEST_FOLDER, "asd")) as stor: size_mock = mock.Mock() size_mock.return_value = False stor._check_storage_size = size_mock @@ -119,34 +119,34 @@ def test_put_max_size(self): def test_check_storage_size_full(self): test_input = (1, 2, 3) - with LocalFileStorage(os.path.join(TEST_FOLDER, 'asd2'), 1) as stor: + with LocalFileStorage(os.path.join(TEST_FOLDER, "asd2"), 1) as stor: stor.put(test_input) self.assertFalse(stor._check_storage_size()) def test_check_storage_size_not_full(self): test_input = (1, 2, 3) - with LocalFileStorage(os.path.join(TEST_FOLDER, 'asd3'), 1000) as stor: + with LocalFileStorage(os.path.join(TEST_FOLDER, "asd3"), 1000) as stor: stor.put(test_input) self.assertTrue(stor._check_storage_size()) def test_check_storage_size_no_files(self): - with LocalFileStorage(os.path.join(TEST_FOLDER, 'asd3'), 1000) as stor: + with LocalFileStorage(os.path.join(TEST_FOLDER, "asd3"), 1000) as stor: self.assertTrue(stor._check_storage_size()) def test_check_storage_size_links(self): test_input = (1, 2, 3) - with LocalFileStorage(os.path.join(TEST_FOLDER, 'asd4'), 1000) as stor: + with LocalFileStorage(os.path.join(TEST_FOLDER, "asd4"), 1000) as stor: stor.put(test_input) - with mock.patch('os.path.islink') as os_mock: + with mock.patch("os.path.islink") as os_mock: os_mock.return_value = True self.assertTrue(stor._check_storage_size()) def test_check_storage_size_error(self): test_input = (1, 2, 3) - with LocalFileStorage(os.path.join(TEST_FOLDER, 'asd5'), 1) as stor: - with mock.patch('os.path.getsize', side_effect=throw(OSError)): + with LocalFileStorage(os.path.join(TEST_FOLDER, "asd5"), 1) as stor: + with mock.patch("os.path.getsize", side_effect=throw(OSError)): stor.put(test_input) - with mock.patch('os.path.islink') as os_mock: + with mock.patch("os.path.islink") as os_mock: os_mock.return_value = True self.assertTrue(stor._check_storage_size()) From aa220e773ea35216117859f78317780edaffb316 Mon Sep 17 00:00:00 2001 From: Leighton Date: Fri, 3 Apr 2020 09:47:44 -0700 Subject: [PATCH 4/6] flake --- azure_monitor/examples/metrics/observer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure_monitor/examples/metrics/observer.py b/azure_monitor/examples/metrics/observer.py index 705178e..1ce8332 100644 --- a/azure_monitor/examples/metrics/observer.py +++ b/azure_monitor/examples/metrics/observer.py @@ -14,6 +14,7 @@ ) controller = PushController(meter=meter, exporter=exporter, interval=2) + # Callback to gather cpu usage def get_cpu_usage_callback(observer): for (number, percent) in enumerate(psutil.cpu_percent(percpu=True)): @@ -30,6 +31,7 @@ def get_cpu_usage_callback(observer): label_keys=("cpu_number",), ) + # Callback to gather RAM memory usage def get_ram_usage_callback(observer): ram_percent = psutil.virtual_memory().percent From c53b5b52e2fcb1495404acc67ddf79075e9717cf Mon Sep 17 00:00:00 2001 From: Leighton Date: Fri, 3 Apr 2020 09:52:58 -0700 Subject: [PATCH 5/6] pylint --- azure_monitor/src/azure_monitor/storage.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/azure_monitor/src/azure_monitor/storage.py b/azure_monitor/src/azure_monitor/storage.py index 40bc286..063a951 100644 --- a/azure_monitor/src/azure_monitor/storage.py +++ b/azure_monitor/src/azure_monitor/storage.py @@ -187,16 +187,17 @@ def put(self, data, lease_period=0, silent=False): def _check_storage_size(self): size = 0 + # pylint: disable=unused-variable for dirpath, dirnames, filenames in os.walk(self.path): - for f in filenames: - fp = os.path.join(dirpath, f) + for filename in filenames: + path = os.path.join(dirpath, filename) # skip if it is symbolic link - if not os.path.islink(fp): + if not os.path.islink(path): try: - size += os.path.getsize(fp) + size += os.path.getsize(path) except OSError: logger.error( - "Path %s does not exist or is " "inaccessible.", fp + "Path %s does not exist or is " "inaccessible.", path ) continue if size >= self.max_size: From d0d194c0a5c662cc793ec550bf643c251eafc451 Mon Sep 17 00:00:00 2001 From: Leighton Date: Fri, 3 Apr 2020 10:01:22 -0700 Subject: [PATCH 6/6] black --- azure_monitor/src/azure_monitor/storage.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure_monitor/src/azure_monitor/storage.py b/azure_monitor/src/azure_monitor/storage.py index 063a951..5c554cb 100644 --- a/azure_monitor/src/azure_monitor/storage.py +++ b/azure_monitor/src/azure_monitor/storage.py @@ -197,7 +197,8 @@ def _check_storage_size(self): size += os.path.getsize(path) except OSError: logger.error( - "Path %s does not exist or is " "inaccessible.", path + "Path %s does not exist or is " "inaccessible.", + path, ) continue if size >= self.max_size: