Skip to content

Commit 9598529

Browse files
authored
Only create temp folder if storage is enabled without dir (#34061)
1 parent 824605a commit 9598529

File tree

3 files changed

+109
-4
lines changed

3 files changed

+109
-4
lines changed

sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
- Add live metrics skeleton + swagger definitions
88
([#33983](https://github.com/Azure/azure-sdk-for-python/pull/33983))
9+
- Only create temporary folder if local storage is enabled without storage directory.
10+
([#34061](https://github.com/Azure/azure-sdk-for-python/pull/34061))
911

1012
### Breaking Changes
1113

sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/export/_base.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,14 @@ def __init__(self, **kwargs: Any) -> None:
9595
self._storage_max_size = kwargs.get('storage_max_size', 50 * 1024 * 1024) # Maximum size in bytes (default 50MiB)
9696
self._storage_min_retry_interval = kwargs.get('storage_min_retry_interval', 60) # minimum retry interval in seconds
9797
temp_suffix = self._instrumentation_key or ""
98-
default_storage_directory = os.path.join(
99-
tempfile.gettempdir(), _AZURE_TEMPDIR_PREFIX, _TEMPDIR_PREFIX + temp_suffix
100-
)
101-
self._storage_directory = kwargs.get('storage_directory', default_storage_directory) # Storage path in which to store retry files.
98+
if 'storage_directory' in kwargs:
99+
self._storage_directory = kwargs.get('storage_directory')
100+
elif not self._disable_offline_storage:
101+
self._storage_directory = os.path.join(
102+
tempfile.gettempdir(), _AZURE_TEMPDIR_PREFIX, _TEMPDIR_PREFIX + temp_suffix
103+
)
104+
else:
105+
self._storage_directory = None
102106
self._storage_retention_period = kwargs.get('storage_retention_period', 48 * 60 * 60) # Retention period in seconds (default 48 hrs)
103107
self._timeout = kwargs.get('timeout', 10.0) # networking timeout in seconds
104108
self._distro_version = kwargs.get(_AZURE_MONITOR_DISTRO_VERSION_ARG, '') # If set, indicates the exporter is instantiated via Azure monitor OpenTelemetry distro. Versions corresponds to distro version.

sdk/monitor/azure-monitor-opentelemetry-exporter/tests/test_base_exporter.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646

4747

4848
TEST_AUTH_POLICY = "TEST_AUTH_POLICY"
49+
TEST_TEMP_DIR = "TEST_TEMP_DIR"
4950

5051

5152
def throw(exc_type, *args, **kwargs):
@@ -126,6 +127,104 @@ def test_constructor(self):
126127
self.assertEqual(base._storage_min_retry_interval, 100)
127128
self.assertEqual(base._storage_directory, "test/path")
128129

130+
@mock.patch("azure.monitor.opentelemetry.exporter.export._base.tempfile.gettempdir")
131+
def test_constructor_no_storage_directory(self, mock_get_temp_dir):
132+
mock_get_temp_dir.return_value = TEST_TEMP_DIR
133+
base = BaseExporter(
134+
api_version="2021-02-10_Preview",
135+
connection_string="InstrumentationKey=4321abcd-5678-4efa-8abc-1234567890ab;IngestionEndpoint=https://westus-0.in.applicationinsights.azure.com/",
136+
disable_offline_storage=False,
137+
distro_version="1.0.0",
138+
storage_maintenance_period=30,
139+
storage_max_size=1000,
140+
storage_min_retry_interval=100,
141+
storage_retention_period=2000,
142+
)
143+
self.assertEqual(
144+
base._instrumentation_key,
145+
"4321abcd-5678-4efa-8abc-1234567890ab",
146+
)
147+
self.assertEqual(
148+
base._endpoint,
149+
"https://westus-0.in.applicationinsights.azure.com/",
150+
)
151+
self.assertEqual(base._distro_version, "1.0.0")
152+
self.assertIsNotNone(base.storage)
153+
self.assertEqual(base.storage._max_size, 1000)
154+
self.assertEqual(base.storage._retention_period, 2000)
155+
self.assertEqual(base._storage_maintenance_period, 30)
156+
self.assertEqual(base._timeout, 10)
157+
self.assertEqual(base._api_version, "2021-02-10_Preview")
158+
self.assertEqual(base._storage_min_retry_interval, 100)
159+
self.assertEqual(
160+
base._storage_directory,
161+
os.path.join(
162+
TEST_TEMP_DIR, "Microsoft/AzureMonitor", "opentelemetry-python-" + "4321abcd-5678-4efa-8abc-1234567890ab"
163+
)
164+
)
165+
mock_get_temp_dir.assert_called_once()
166+
167+
@mock.patch("azure.monitor.opentelemetry.exporter.export._base.tempfile.gettempdir")
168+
def test_constructor_disable_offline_storage(self, mock_get_temp_dir):
169+
mock_get_temp_dir.side_effect = Exception()
170+
base = BaseExporter(
171+
api_version="2021-02-10_Preview",
172+
connection_string="InstrumentationKey=4321abcd-5678-4efa-8abc-1234567890ab;IngestionEndpoint=https://westus-0.in.applicationinsights.azure.com/",
173+
disable_offline_storage=True,
174+
distro_version="1.0.0",
175+
storage_maintenance_period=30,
176+
storage_max_size=1000,
177+
storage_min_retry_interval=100,
178+
storage_retention_period=2000,
179+
)
180+
self.assertEqual(
181+
base._instrumentation_key,
182+
"4321abcd-5678-4efa-8abc-1234567890ab",
183+
)
184+
self.assertEqual(
185+
base._endpoint,
186+
"https://westus-0.in.applicationinsights.azure.com/",
187+
)
188+
self.assertEqual(base._distro_version, "1.0.0")
189+
self.assertIsNone(base.storage)
190+
self.assertEqual(base._storage_maintenance_period, 30)
191+
self.assertEqual(base._timeout, 10)
192+
self.assertEqual(base._api_version, "2021-02-10_Preview")
193+
self.assertEqual(base._storage_min_retry_interval, 100)
194+
self.assertIsNone(base._storage_directory)
195+
mock_get_temp_dir.assert_not_called()
196+
197+
@mock.patch("azure.monitor.opentelemetry.exporter.export._base.tempfile.gettempdir")
198+
def test_constructor_disable_offline_storage_with_storage_directory(self, mock_get_temp_dir):
199+
mock_get_temp_dir.side_effect = Exception()
200+
base = BaseExporter(
201+
api_version="2021-02-10_Preview",
202+
connection_string="InstrumentationKey=4321abcd-5678-4efa-8abc-1234567890ab;IngestionEndpoint=https://westus-0.in.applicationinsights.azure.com/",
203+
disable_offline_storage=True,
204+
distro_version="1.0.0",
205+
storage_maintenance_period=30,
206+
storage_max_size=1000,
207+
storage_min_retry_interval=100,
208+
storage_directory="test/path",
209+
storage_retention_period=2000,
210+
)
211+
self.assertEqual(
212+
base._instrumentation_key,
213+
"4321abcd-5678-4efa-8abc-1234567890ab",
214+
)
215+
self.assertEqual(
216+
base._endpoint,
217+
"https://westus-0.in.applicationinsights.azure.com/",
218+
)
219+
self.assertEqual(base._distro_version, "1.0.0")
220+
self.assertIsNone(base.storage)
221+
self.assertEqual(base._storage_maintenance_period, 30)
222+
self.assertEqual(base._timeout, 10)
223+
self.assertEqual(base._api_version, "2021-02-10_Preview")
224+
self.assertEqual(base._storage_min_retry_interval, 100)
225+
self.assertEqual(base._storage_directory, "test/path")
226+
mock_get_temp_dir.assert_not_called()
227+
129228
@mock.patch("azure.monitor.opentelemetry.exporter.export._base._format_storage_telemetry_item")
130229
@mock.patch.object(TelemetryItem, "from_dict")
131230
def test_transmit_from_storage_success(self, dict_patch, format_patch):

0 commit comments

Comments
 (0)