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

Commit 0c0684b

Browse files
authored
Don't return transport from new_stats_exporter (#605)
1 parent 922702b commit 0c0684b

File tree

3 files changed

+46
-21
lines changed

3 files changed

+46
-21
lines changed

contrib/opencensus-ext-stackdriver/opencensus/ext/stackdriver/stats_exporter/__init__.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,9 +390,8 @@ def new_stats_exporter(options, interval=None):
390390
client = monitoring_v3.MetricServiceClient(client_info=ci)
391391
exporter = StackdriverStatsExporter(client=client, options=options)
392392

393-
tt = transport.get_exporter_thread(stats.stats, exporter,
394-
interval=interval)
395-
return exporter, tt
393+
transport.get_exporter_thread(stats.stats, exporter, interval=interval)
394+
return exporter
396395

397396

398397
def get_task_value():

contrib/opencensus-ext-stackdriver/tests/test_stackdriver_stats.py

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def test_not_blank_project(self):
125125
'.monitoring_v3.MetricServiceClient'), _Client)
126126

127127
with patch_client:
128-
exporter_created, transport = stackdriver.new_stats_exporter(
128+
exporter_created = stackdriver.new_stats_exporter(
129129
stackdriver.Options(project_id=1))
130130

131131
self.assertIsInstance(exporter_created,
@@ -146,7 +146,7 @@ def test_client_info_user_agent(self):
146146
'.MetricServiceClient', _Client)
147147

148148
with patch_client:
149-
exporter, transport = stackdriver.new_stats_exporter(
149+
exporter = stackdriver.new_stats_exporter(
150150
stackdriver.Options(project_id=1))
151151

152152
self.assertIn(stackdriver.get_user_agent_slug(),
@@ -372,8 +372,38 @@ def step(self):
372372
self.logger.exception("Error handling metric export")
373373

374374

375+
class MockGetExporterThread(object):
376+
"""Intercept calls to get_exporter_thread.
377+
378+
To get a reference to the running PeriodicTask created by
379+
get_exporter_thread.
380+
"""
381+
def __init__(self):
382+
self.transport = None
383+
384+
def __enter__(self):
385+
original_func = transport_module.get_exporter_thread
386+
387+
def get_exporter_thread(*aa, **kw):
388+
self.transport = original_func(*aa, **kw)
389+
390+
mock_get = mock.Mock()
391+
mock_get.side_effect = get_exporter_thread
392+
self.patcher = mock.patch(
393+
('opencensus.ext.stackdriver.stats_exporter'
394+
'.transport.get_exporter_thread'),
395+
mock_get)
396+
self.patcher.start()
397+
return self
398+
399+
def __exit__(self, type, value, traceback):
400+
self.patcher.stop()
401+
402+
375403
@mock.patch('opencensus.ext.stackdriver.stats_exporter'
376404
'.monitoring_v3.MetricServiceClient')
405+
@mock.patch('opencensus.ext.stackdriver.stats_exporter'
406+
'.stats.stats')
377407
class TestAsyncStatsExport(unittest.TestCase):
378408
"""Check that metrics are exported using the exporter thread."""
379409

@@ -384,22 +414,19 @@ def setUp(self):
384414
patcher.start()
385415
self.addCleanup(patcher.stop)
386416

387-
@mock.patch('opencensus.ext.stackdriver.stats_exporter'
388-
'.stats.stats')
389417
def test_export_empty(self, mock_stats, mock_client):
390418
"""Check that we don't attempt to export empty metric sets."""
391419

392420
mock_stats.get_metrics.return_value = []
393421

394-
exporter, transport = stackdriver.new_stats_exporter(
395-
stackdriver.Options(project_id=1))
422+
with MockGetExporterThread() as mget:
423+
exporter = stackdriver.new_stats_exporter(
424+
stackdriver.Options(project_id=1))
425+
mget.transport.step()
396426

397-
transport.step()
398427
exporter.client.create_metric_descriptor.assert_not_called()
399428
exporter.client.create_time_series.assert_not_called()
400429

401-
@mock.patch('opencensus.ext.stackdriver.stats_exporter'
402-
'.stats.stats')
403430
def test_export_single_metric(self, mock_stats, mock_client):
404431
"""Check that we can export a set of a single metric."""
405432

@@ -424,10 +451,10 @@ def test_export_single_metric(self, mock_stats, mock_client):
424451
mm = metric.Metric(descriptor=desc, time_series=ts)
425452
mock_stats.get_metrics.return_value = [mm]
426453

427-
exporter, transport = stackdriver.new_stats_exporter(
428-
stackdriver.Options(project_id=1))
429-
430-
transport.step()
454+
with MockGetExporterThread() as mget:
455+
exporter = stackdriver.new_stats_exporter(
456+
stackdriver.Options(project_id=1))
457+
mget.transport.step()
431458

432459
exporter.client.create_metric_descriptor.assert_called()
433460
self.assertEqual(

tests/system/stats/stackdriver/stackdriver_stats_test.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import mock
2222

2323
from opencensus.ext.stackdriver import stats_exporter as stackdriver
24+
from opencensus.metrics import transport
2425
from opencensus.stats import aggregation as aggregation_module
2526
from opencensus.stats import measure as measure_module
2627
from opencensus.stats import stats as stats_module
@@ -143,9 +144,8 @@ def test_stats_record_async(self):
143144
view_manager = stats.view_manager
144145
stats_recorder = stats.stats_recorder
145146

146-
exporter, transport = stackdriver.new_stats_exporter(
147-
stackdriver.Options(project_id=PROJECT),
148-
interval=ASYNC_TEST_INTERVAL)
147+
exporter = stackdriver.new_stats_exporter(
148+
stackdriver.Options(project_id=PROJECT))
149149
view_manager.register_exporter(exporter)
150150

151151
# Register view.
@@ -164,7 +164,6 @@ def test_stats_record_async(self):
164164

165165
measure_map.record(tag_map)
166166
# Give the exporter thread enough time to export exactly once
167-
time.sleep(ASYNC_TEST_INTERVAL * 2 - 1)
168-
transport.stop()
167+
time.sleep(transport.DEFAULT_INTERVAL * 1.5)
169168

170169
self.check_sd_md(exporter, view_description)

0 commit comments

Comments
 (0)