Skip to content
This repository was archived by the owner on Sep 17, 2025. It is now read-only.

Commit a82fa83

Browse files
authored
storage (#1016)
1 parent f993072 commit a82fa83

File tree

6 files changed

+57
-39
lines changed

6 files changed

+57
-39
lines changed

contrib/opencensus-ext-azure/CHANGELOG.md

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

55
- Fix `logger.exception` with no exception info throwing error
66
([#1006](https://github.com/census-instrumentation/opencensus-python/pull/1006))
7+
- Add `enable_local_storage` to turn on/off local storage + retry + flushing logic
8+
([#1006](https://github.com/census-instrumentation/opencensus-python/pull/1006))
79

810
## 1.0.7
911
Released 2021-01-25

contrib/opencensus-ext-azure/opencensus/ext/azure/common/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ def __init__(self, *args, **kwargs):
101101

102102
_default = BaseObject(
103103
connection_string=None,
104+
enable_local_storage=True,
104105
enable_standard_metrics=True,
105106
endpoint='https://dc.services.visualstudio.com/v2/track',
106107
export_interval=15.0,

contrib/opencensus-ext-azure/opencensus/ext/azure/common/transport.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,17 @@
2222

2323
class TransportMixin(object):
2424
def _transmit_from_storage(self):
25-
for blob in self.storage.gets():
26-
# give a few more seconds for blob lease operation
27-
# to reduce the chance of race (for perf consideration)
28-
if blob.lease(self.options.timeout + 5):
29-
envelopes = blob.get()
30-
result = self._transmit(envelopes)
31-
if result > 0:
32-
blob.lease(result)
33-
else:
34-
blob.delete()
25+
if self.storage:
26+
for blob in self.storage.gets():
27+
# give a few more seconds for blob lease operation
28+
# to reduce the chance of race (for perf consideration)
29+
if blob.lease(self.options.timeout + 5):
30+
envelopes = blob.get()
31+
result = self._transmit(envelopes)
32+
if result > 0:
33+
blob.lease(result)
34+
else:
35+
blob.delete()
3536

3637
def _transmit(self, envelopes):
3738
"""

contrib/opencensus-ext-azure/opencensus/ext/azure/log_exporter/__init__.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,15 @@ def __init__(self, **options):
4747
raise ValueError('Sampling must be in the range: [0,1]')
4848
self.export_interval = self.options.export_interval
4949
self.max_batch_size = self.options.max_batch_size
50-
self.storage = LocalFileStorage(
51-
path=self.options.storage_path,
52-
max_size=self.options.storage_max_size,
53-
maintenance_period=self.options.storage_maintenance_period,
54-
retention_period=self.options.storage_retention_period,
55-
source=self.__class__.__name__,
56-
)
50+
self.storage = None
51+
if self.options.enable_local_storage:
52+
self.storage = LocalFileStorage(
53+
path=self.options.storage_path,
54+
max_size=self.options.storage_max_size,
55+
maintenance_period=self.options.storage_maintenance_period,
56+
retention_period=self.options.storage_retention_period,
57+
source=self.__class__.__name__,
58+
)
5759
self._telemetry_processors = []
5860
self.addFilter(SamplingFilter(self.options.logging_sampling_rate))
5961
self._queue = Queue(capacity=self.options.queue_capacity)
@@ -66,7 +68,8 @@ def _export(self, batch, event=None): # pragma: NO COVER
6668
envelopes = [self.log_record_to_envelope(x) for x in batch]
6769
envelopes = self.apply_telemetry_processors(envelopes)
6870
result = self._transmit(envelopes)
69-
if result > 0:
71+
# Only store files if local storage enabled
72+
if self.storage and result > 0:
7073
self.storage.put(envelopes, result)
7174
if event:
7275
if isinstance(event, QueueExitEvent):
@@ -79,8 +82,10 @@ def _export(self, batch, event=None): # pragma: NO COVER
7982
event.set()
8083

8184
def close(self):
82-
self.storage.close()
83-
self._worker.stop()
85+
if self.storage:
86+
self.storage.close()
87+
if self._worker:
88+
self._worker.stop()
8489

8590
def createLock(self):
8691
self.lock = None

contrib/opencensus-ext-azure/opencensus/ext/azure/metrics_exporter/__init__.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,15 @@ def __init__(self, **options):
4747
self.export_interval = self.options.export_interval
4848
self.max_batch_size = self.options.max_batch_size
4949
self._telemetry_processors = []
50-
self.storage = LocalFileStorage(
51-
path=self.options.storage_path,
52-
max_size=self.options.storage_max_size,
53-
maintenance_period=self.options.storage_maintenance_period,
54-
retention_period=self.options.storage_retention_period,
55-
source=self.__class__.__name__,
56-
)
50+
self.storage = None
51+
if self.options.enable_local_storage:
52+
self.storage = LocalFileStorage(
53+
path=self.options.storage_path,
54+
max_size=self.options.storage_max_size,
55+
maintenance_period=self.options.storage_maintenance_period,
56+
retention_period=self.options.storage_retention_period,
57+
source=self.__class__.__name__,
58+
)
5759
self._atexit_handler = atexit.register(self.shutdown)
5860
self.exporter_thread = None
5961
super(MetricsExporter, self).__init__()
@@ -68,7 +70,8 @@ def export_metrics(self, metrics):
6870
for batch in batched_envelopes:
6971
batch = self.apply_telemetry_processors(batch)
7072
result = self._transmit(batch)
71-
if result > 0:
73+
# Only store files if local storage enabled
74+
if self.storage and result > 0:
7275
self.storage.put(batch, result)
7376

7477
# If there is still room to transmit envelopes, transmit from storage
@@ -141,7 +144,8 @@ def shutdown(self):
141144
if self.exporter_thread:
142145
self.exporter_thread.close()
143146
# Shutsdown storage worker
144-
self.storage.close()
147+
if self.storage:
148+
self.storage.close()
145149

146150

147151
def new_metrics_exporter(**options):

contrib/opencensus-ext-azure/opencensus/ext/azure/trace_exporter/__init__.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,15 @@ class AzureExporter(BaseExporter, ProcessorMixin, TransportMixin):
4949
def __init__(self, **options):
5050
self.options = Options(**options)
5151
utils.validate_instrumentation_key(self.options.instrumentation_key)
52-
self.storage = LocalFileStorage(
53-
path=self.options.storage_path,
54-
max_size=self.options.storage_max_size,
55-
maintenance_period=self.options.storage_maintenance_period,
56-
retention_period=self.options.storage_retention_period,
57-
source=self.__class__.__name__,
58-
)
52+
self.storage = None
53+
if self.options.enable_local_storage:
54+
self.storage = LocalFileStorage(
55+
path=self.options.storage_path,
56+
max_size=self.options.storage_max_size,
57+
maintenance_period=self.options.storage_maintenance_period,
58+
retention_period=self.options.storage_retention_period,
59+
source=self.__class__.__name__,
60+
)
5961
self._telemetry_processors = []
6062
super(AzureExporter, self).__init__(**options)
6163
atexit.register(self._stop, self.options.grace_period)
@@ -166,7 +168,8 @@ def emit(self, batch, event=None):
166168
envelopes = [self.span_data_to_envelope(sd) for sd in batch]
167169
envelopes = self.apply_telemetry_processors(envelopes)
168170
result = self._transmit(envelopes)
169-
if result > 0:
171+
# Only store files if local storage enabled
172+
if self.storage and result > 0:
170173
self.storage.put(envelopes, result)
171174
if event:
172175
if isinstance(event, QueueExitEvent):
@@ -179,5 +182,7 @@ def emit(self, batch, event=None):
179182
logger.exception('Exception occurred while exporting the data.')
180183

181184
def _stop(self, timeout=None):
182-
self.storage.close()
183-
self._worker.stop(timeout)
185+
if self.storage:
186+
self.storage.close()
187+
if self._worker:
188+
self._worker.stop(timeout)

0 commit comments

Comments
 (0)