Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def _notify_callbacks(self, settings: Dict[str, str]):
try:
cb(settings)
except Exception as ex: # pylint: disable=broad-except
logger.warning("Callback failed: %s", ex)
logger.warning("Callback failed: %s", ex) # pylint: disable=do-not-log-exceptions-if-not-debug

def _is_transient_error(self, response: OneSettingsResponse) -> bool:
"""Check if the response indicates a transient error.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import logging

# mypy: disable-error-code="import-untyped"
import requests
import requests # pylint: disable=networking-import-outside-azure-core-transport

from azure.monitor.opentelemetry.exporter._constants import (
_ONE_SETTINGS_DEFAULT_REFRESH_INTERVAL_SECONDS,
Expand Down Expand Up @@ -124,16 +124,24 @@ def make_onesettings_request(

return _parse_onesettings_response(result)
except requests.exceptions.Timeout as ex:
logger.warning("OneSettings request timed out: %s", str(ex))
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"OneSettings request timed out: %s", str(ex)
)
return OneSettingsResponse(has_exception=True)
except requests.exceptions.RequestException as ex:
logger.warning("Failed to fetch configuration from OneSettings: %s", str(ex))
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to fetch configuration from OneSettings: %s", str(ex)
)
return OneSettingsResponse(has_exception=True)
except json.JSONDecodeError as ex:
logger.warning("Failed to parse OneSettings response: %s", str(ex))
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to parse OneSettings response: %s", str(ex)
)
return OneSettingsResponse(has_exception=True)
except Exception as ex: # pylint: disable=broad-exception-caught
logger.warning("Unexpected error while fetching configuration: %s", str(ex))
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Unexpected error while fetching configuration: %s", str(ex)
)
return OneSettingsResponse(has_exception=True)


Expand Down Expand Up @@ -197,9 +205,13 @@ def _parse_onesettings_response(response: requests.Response) -> OneSettingsRespo
if settings and settings.get(_ONE_SETTINGS_CHANGE_VERSION_KEY) is not None:
version = int(settings.get(_ONE_SETTINGS_CHANGE_VERSION_KEY)) # type: ignore
except (UnicodeDecodeError, json.JSONDecodeError) as ex:
logger.warning("Failed to decode OneSettings response content: %s", str(ex))
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to decode OneSettings response content: %s", str(ex)
)
except ValueError as ex:
logger.warning("Failed to parse OneSettings change version: %s", str(ex))
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to parse OneSettings change version: %s", str(ex)
)
elif status_code == 400:
logger.warning("Bad request to OneSettings: %s", response.content)
elif status_code == 404:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,9 @@ def _get_configuration(self) -> None:
# Capture interval while we have the lock
interval = self._refresh_interval
except Exception as ex: # pylint: disable=broad-exception-caught
logger.warning("Configuration refresh failed: %s", ex)
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Configuration refresh failed: %s", ex
)
# Use current interval on error
interval = self.get_refresh_interval()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ def _get_process_cpu(options: CallbackOptions) -> Iterable[Observation]:
cpu_percent = _PROCESS.cpu_percent(interval=None)
yield Observation(cpu_percent, {})
except (psutil.NoSuchProcess, psutil.AccessDenied, Exception) as e: # pylint: disable=broad-except
_logger.exception("Error getting process CPU usage: %s", e) # pylint: disable=logging-not-lazy
_logger.exception( # pylint: disable=do-not-use-logging-exception
"Error getting process CPU usage: %s", e
) # pylint: disable=logging-not-lazy
yield Observation(0.0, {})


Expand Down Expand Up @@ -110,7 +112,9 @@ def _get_process_cpu_normalized(options: CallbackOptions) -> Iterable[Observatio

yield Observation(normalized_cpu_percent, {})
except (psutil.NoSuchProcess, psutil.AccessDenied, Exception) as e: # pylint: disable=broad-except
_logger.exception("Error getting normalized process CPU usage: %s", e) # pylint: disable=logging-not-lazy
_logger.exception( # pylint: disable=do-not-use-logging-exception
"Error getting normalized process CPU usage: %s", e
) # pylint: disable=logging-not-lazy
yield Observation(0.0, {})


Expand All @@ -131,7 +135,9 @@ def _get_available_memory(options: CallbackOptions) -> Iterable[Observation]:
available_memory = psutil.virtual_memory().available
yield Observation(available_memory, {})
except Exception as e: # pylint: disable=broad-except
_logger.exception("Error getting available memory: %s", e) # pylint: disable=logging-not-lazy
_logger.exception( # pylint: disable=do-not-use-logging-exception
"Error getting available memory: %s", e
) # pylint: disable=logging-not-lazy
yield Observation(0, {})


Expand All @@ -152,7 +158,9 @@ def _get_process_memory(options: CallbackOptions) -> Iterable[Observation]:
private_bytes = _PROCESS.memory_info().rss
yield Observation(private_bytes, {})
except (psutil.NoSuchProcess, psutil.AccessDenied, Exception) as e: # pylint: disable=broad-except
_logger.exception("Error getting process memory: %s", e) # pylint: disable=logging-not-lazy
_logger.exception( # pylint: disable=do-not-use-logging-exception
"Error getting process memory: %s", e
) # pylint: disable=logging-not-lazy
yield Observation(0, {})


Expand Down Expand Up @@ -186,7 +194,7 @@ def _get_process_io(options: CallbackOptions) -> Iterable[Observation]:
io_rate = rw_diff / elapsed_time_s
yield Observation(io_rate, {})
except (psutil.NoSuchProcess, psutil.AccessDenied, Exception) as e: # pylint: disable=broad-except
_logger.exception("Error getting process I/O rate: %s", e)
_logger.exception("Error getting process I/O rate: %s", e) # pylint: disable=do-not-use-logging-exception
yield Observation(0, {})


Expand Down Expand Up @@ -245,7 +253,7 @@ def _get_processor_time(options: CallbackOptions) -> Iterable[Observation]:
_LAST_CPU_TIMES = cpu_times
yield Observation(utilization_percentage, {})
except Exception as e: # pylint: disable=broad-except
_logger.exception("Error getting processor time: %s", e)
_logger.exception("Error getting processor time: %s", e) # pylint: disable=do-not-use-logging-exception
yield Observation(0.0, {})


Expand All @@ -270,7 +278,7 @@ def _get_request_rate(options: CallbackOptions) -> Iterable[Observation]:
_REQUESTS_COUNT = 0
yield Observation(request_rate, {})
except Exception as e: # pylint: disable=broad-except
_logger.exception("Error getting request rate: %s", e)
_logger.exception("Error getting request rate: %s", e) # pylint: disable=do-not-use-logging-exception
yield Observation(0.0, {})


Expand All @@ -295,7 +303,7 @@ def _get_exception_rate(options: CallbackOptions) -> Iterable[Observation]:
_EXCEPTIONS_COUNT = 0
yield Observation(exception_rate, {})
except Exception as e: # pylint: disable=broad-except
_logger.exception("Error getting exception rate: %s", e)
_logger.exception("Error getting exception rate: %s", e) # pylint: disable=do-not-use-logging-exception
yield Observation(0.0, {})


Expand Down Expand Up @@ -603,10 +611,14 @@ def __init__(self, meter_provider=None):
if metric_class == RequestExecutionTime:
self._request_duration_histogram = performance_counter.gauge
except Exception as e: # pylint: disable=broad-except
_logger.warning("Failed to initialize performance counter %s: %s", metric_class.NAME[0], e)
_logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to initialize performance counter %s: %s", metric_class.NAME[0], e
)

except Exception as e: # pylint: disable=broad-except
_logger.warning("Failed to setup performance counters: %s", e)
_logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to setup performance counters: %s", e
)

def _record_span(self, span: ReadableSpan) -> None:
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,9 +183,9 @@ def export(
try:
_update_filter_configuration(etag, config)
except Exception: # pylint: disable=broad-except
_logger.exception(
_logger.exception( # pylint: disable=C4769
"Exception occurred while updating filter config."
) # pylint: disable=C4769
)
result = MetricExportResult.FAILURE
except Exception: # pylint: disable=broad-except
_logger.exception("Exception occurred while publishing live metrics.") # pylint: disable=C4769
Expand Down Expand Up @@ -302,9 +302,9 @@ def _ticker(self) -> None:
# Reset etag to default if not subscribed
_set_quickpulse_etag("")
except Exception: # pylint: disable=broad-except
_logger.exception(
_logger.exception( # pylint: disable=C4769
"Exception occurred while reading live metrics ping response."
) # pylint: disable=C4769
)
_set_quickpulse_etag("")
# TODO: Implement redirect
else:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,9 @@ def _do_initialize(self) -> bool:
return True

except Exception as e: # pylint: disable=broad-except
_logger.warning("Failed to initialize QuickpulseManager: %s", e)
_logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to initialize QuickpulseManager: %s", e
)
# Ensure cleanup happens and state is consistent
self._cleanup()
return False
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,9 @@ def __init__(self, **kwargs: Any) -> None:

collect_statsbeat_metrics(self)
except Exception as e: # pylint: disable=broad-except
logger.warning("Failed to initialize statsbeat metrics: %s", e)
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to initialize statsbeat metrics: %s", e
)

# customer sdkstats initialization
if self._should_collect_customer_sdkstats():
Expand Down Expand Up @@ -439,14 +441,14 @@ def _transmit(self, envelopes: List[TelemetryItem]) -> ExportResult:

if self._should_collect_stats():
exc_type = request_error.exc_type
if exc_type is None or exc_type is type(None):
if exc_type is None or exc_type is type(None): # pylint: disable=unidiomatic-typecheck
exc_type = request_error.__class__.__name__ # type: ignore
_update_requests_map(_REQ_EXCEPTION_NAME[1], value=exc_type)
result = ExportResult.FAILED_RETRYABLE
except Exception as ex:
logger.exception(
logger.exception( # pylint: disable=do-not-use-logging-exception
"Envelopes could not be exported and are not retryable: %s.", ex
) # pylint: disable=C4769
)

# Track dropped items in customer sdkstats for general exceptions
if self._should_collect_customer_sdkstats():
Expand Down Expand Up @@ -612,13 +614,13 @@ def _get_authentication_credential(**kwargs: Any) -> Optional[ManagedIdentityCre
credential = ManagedIdentityCredential()
return credential
except ValueError as exc:
logger.error(
logger.error( # pylint: disable=do-not-log-exceptions-if-not-debug
"APPLICATIONINSIGHTS_AUTHENTICATION_STRING, %s, has invalid format: %s", auth_string, exc
) # pylint: disable=do-not-log-exceptions-if-not-debug
)
except Exception as e:
logger.error(
logger.error( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to get authentication credential and enable AAD: %s", e
) # pylint: disable=do-not-log-exceptions-if-not-debug
)
return None


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,9 @@ def _do_initialize(self, config: StatsbeatConfig) -> bool:

except Exception as e: # pylint: disable=broad-except
# Log the error for debugging
logger.warning("Failed to initialize statsbeat: %s", e)
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to initialize statsbeat: %s", e
)
# Clean up on failure
self._cleanup()
return False
Expand Down Expand Up @@ -297,12 +299,16 @@ def _reconfigure(self, new_config: StatsbeatConfig) -> bool:
# Force flush before shutdown to ensure data is sent
self._meter_provider.force_flush(timeout_millis=5000)
except Exception as e: # pylint: disable=broad-except
logger.warning("Failed to flush meter provider during reconfiguration: %s", e)
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to flush meter provider during reconfiguration: %s", e
)

try:
self._meter_provider.shutdown(timeout_millis=5000)
except Exception as e: # pylint: disable=broad-except
logger.warning("Failed to shutdown meter provider during reconfiguration: %s", e)
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Failed to shutdown meter provider during reconfiguration: %s", e
)

# Reset state but keep initialized=True
self._meter_provider = None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,12 @@ def _get_connection_string_for_region_from_config(target_region: str, settings:
return None
return default_connection_string
except (ValueError, TypeError, KeyError) as ex:
logger.warning("Error parsing configuration for region '%s': %s", target_region, str(ex))
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Error parsing configuration for region '%s': %s", target_region, str(ex)
)
return None
except Exception as ex: # pylint: disable=broad-exception-caught
logger.warning("Unexpected error getting stats connection string for region '%s': %s", target_region, str(ex))
logger.warning( # pylint: disable=do-not-log-exceptions-if-not-debug
"Unexpected error getting stats connection string for region '%s': %s", target_region, str(ex)
)
return None
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from typing import Optional, List, Tuple, Union, Any

# mypy: disable-error-code="import-untyped"
from requests import ReadTimeout, Timeout
from requests import ReadTimeout, Timeout # pylint: disable=networking-import-outside-azure-core-transport
from azure.core.exceptions import ServiceRequestTimeoutError
from azure.monitor.opentelemetry.exporter._constants import (
_REQUEST,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
import os

# You will need to install azure-identity
from azure.identity import ManagedIdentityCredential
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from azure.identity import ManagedIdentityCredential

from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
import os

# You will need to install azure-identity
from azure.identity import ClientSecretCredential
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from azure.identity import ClientSecretCredential

from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
val = 1 / 0
print(val)
except ZeroDivisionError:
logger.exception("Error: Division by zero")
logger.exception("Error: Division by zero") # pylint: disable=do-not-use-logging-exception

try:
val = 1 / 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,17 @@


# Callback functions for observable instruments
def observable_counter_func(options: CallbackOptions) -> Iterable[Observation]:
def observable_counter_func(_options: CallbackOptions) -> Iterable[Observation]:
yield Observation(1, {})


def observable_up_down_counter_func(
options: CallbackOptions,
_options: CallbackOptions,
) -> Iterable[Observation]:
yield Observation(-10, {})


def observable_gauge_func(options: CallbackOptions) -> Iterable[Observation]:
def observable_gauge_func(_options: CallbackOptions) -> Iterable[Observation]:
yield Observation(9, {})


Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
from django.contrib import admin
from django.contrib import admin # pylint: disable=unused-import

# Register your models here.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
from django.db import models
from django.db import models # pylint: disable=unused-import

# Create your models here.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
from django.test import TestCase
from django.test import TestCase # pylint: disable=unused-import

# Create your tests here.
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
from django.http import HttpResponse


def index(request):
def index(_request):
return HttpResponse("Hello, world.")
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ def main():
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sample.settings")

# Azure Monitor OpenTelemetry Exporters and Django Instrumentation should only be set up once in either asgi.py, wsgi.py, or manage.py, depending on startup method.
# Azure Monitor OpenTelemetry Exporters and Django Instrumentation should only be set up once in either asgi.py,
# wsgi.py, or manage.py, depending on startup method.
# If using manage.py, please remove setup from asgi.py and wsgi.py
# Enable instrumentation in the django library.
DjangoInstrumentor().instrument()
Expand Down
Loading
Loading