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

Commit 1f47a11

Browse files
kornholiBogdan Drutu
authored andcommitted
Fix span batching to stackdriver (#425)
* Fix span batching to stackdriver * Lose FIXME comment
1 parent f9ab048 commit 1f47a11

File tree

2 files changed

+43
-59
lines changed

2 files changed

+43
-59
lines changed

opencensus/trace/exporters/stackdriver_exporter.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -215,13 +215,15 @@ def emit(self, span_datas):
215215
for sd in span_datas:
216216
trace_span_map[sd.context.trace_id] += [sd]
217217

218+
stackdriver_spans = []
218219
# Write spans to Stackdriver
219220
for _, sds in trace_span_map.items():
220221
# convert to the legacy trace json for easier refactoring
221222
# TODO: refactor this to use the span data directly
222223
trace = span_data.format_legacy_trace_json(sds)
223-
stackdriver_spans = self.translate_to_stackdriver(trace)
224-
self.client.batch_write_spans(project, stackdriver_spans)
224+
stackdriver_spans.extend(self.translate_to_stackdriver(trace))
225+
226+
self.client.batch_write_spans(project, {'spans': stackdriver_spans})
225227

226228
def export(self, span_datas):
227229
"""
@@ -247,7 +249,6 @@ def translate_to_stackdriver(self, trace):
247249
set_attributes(trace)
248250
spans_json = trace.get('spans')
249251
trace_id = trace.get('traceId')
250-
spans_list = []
251252

252253
for span in spans_json:
253254
span_name = 'projects/{}/traces/{}/spans/{}'.format(
@@ -272,10 +273,7 @@ def translate_to_stackdriver(self, trace):
272273
parent_span_id = str(span.get('parentSpanId'))
273274
span_json['parentSpanId'] = parent_span_id
274275

275-
spans_list.append(span_json)
276-
277-
spans = {'spans': spans_list}
278-
return spans
276+
yield span_json
279277

280278
def map_attributes(self, attribute_map):
281279
if attribute_map is None:

tests/unit/trace/exporters/test_stackdriver_exporter.py

Lines changed: 38 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -200,63 +200,49 @@ def test_translate_to_stackdriver(self, mr_mock):
200200
exporter = stackdriver_exporter.StackdriverExporter(
201201
client=client, project_id=project_id)
202202

203-
spans = exporter.translate_to_stackdriver(trace)
203+
spans = list(exporter.translate_to_stackdriver(trace))
204204

205-
expected_traces = {
206-
'spans': [{
207-
'name':
208-
'projects/{}/traces/{}/spans/{}'.format(
205+
expected_traces = [{
206+
'name': 'projects/{}/traces/{}/spans/{}'.format(
209207
project_id, trace_id, span_id),
210-
'displayName': {
211-
'value': span_name,
212-
'truncated_byte_count': 0
213-
},
214-
'attributes': {
215-
'attributeMap': {
216-
'g.co/agent': {
217-
'string_value': {
218-
'truncated_byte_count':
219-
0,
220-
'value':
208+
'displayName': {
209+
'value': span_name,
210+
'truncated_byte_count': 0
211+
},
212+
'attributes': {
213+
'attributeMap': {
214+
'g.co/agent': {
215+
'string_value': {
216+
'truncated_byte_count': 0,
217+
'value':
221218
'opencensus-python [{}]'.format(__version__)
222-
}
223-
},
224-
'key': {
225-
'string_value': {
226-
'truncated_byte_count': 0,
227-
'value': 'value'
228-
}
229-
},
230-
'/http/host': {
231-
'string_value': {
232-
'truncated_byte_count': 0,
233-
'value': 'host'
234-
}
219+
}
220+
},
221+
'key': {
222+
'string_value': {
223+
'truncated_byte_count': 0,
224+
'value': 'value'
225+
}
226+
},
227+
'/http/host': {
228+
'string_value': {
229+
'truncated_byte_count': 0,
230+
'value': 'host'
235231
}
236232
}
237-
},
238-
'spanId':
239-
str(span_id),
240-
'startTime':
241-
start_time,
242-
'endTime':
243-
end_time,
244-
'parentSpanId':
245-
str(parent_span_id),
246-
'status':
247-
None,
248-
'links':
249-
None,
250-
'stackTrace':
251-
None,
252-
'timeEvents':
253-
None,
254-
'childSpanCount':
255-
0,
256-
'sameProcessAsParentSpan':
257-
None
258-
}]
259-
}
233+
}
234+
},
235+
'spanId': str(span_id),
236+
'startTime': start_time,
237+
'endTime': end_time,
238+
'parentSpanId': str(parent_span_id),
239+
'status': None,
240+
'links': None,
241+
'stackTrace': None,
242+
'timeEvents': None,
243+
'childSpanCount': 0,
244+
'sameProcessAsParentSpan': None
245+
}]
260246

261247
self.assertEqual(spans, expected_traces)
262248

0 commit comments

Comments
 (0)