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

Commit 1ef5ab6

Browse files
authored
Enable setting the ipv4/ipv4 in localEndpoint for zipkin (#119)
1 parent 62b4635 commit 1ef5ab6

2 files changed

Lines changed: 51 additions & 15 deletions

File tree

opencensus/trace/exporters/zipkin_exporter.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,17 @@ def __init__(
7171
host_name=DEFAULT_HOST_NAME,
7272
port=DEFAULT_PORT,
7373
endpoint=DEFAULT_ENDPOINT,
74-
transport=sync.SyncTransport):
74+
transport=sync.SyncTransport,
75+
ipv4=None,
76+
ipv6=None):
7577
self.service_name = service_name
7678
self.host_name = host_name
7779
self.port = port
7880
self.endpoint = endpoint
7981
self.url = self.get_url
8082
self.transport = transport(self)
83+
self.ipv4 = ipv4
84+
self.ipv6 = ipv6
8185

8286
@property
8387
def get_url(self):
@@ -126,10 +130,15 @@ def translate_to_zipkin(self, trace_id, spans):
126130
"""
127131
local_endpoint = {
128132
'serviceName': self.service_name,
129-
'ipv4': self.host_name,
130133
'port': self.port,
131134
}
132135

136+
if self.ipv4 is not None:
137+
local_endpoint['ipv4'] = self.ipv4
138+
139+
if self.ipv6 is not None:
140+
local_endpoint['ipv6'] = self.ipv6
141+
133142
zipkin_spans = []
134143

135144
for span in spans:

tests/unit/trace/exporters/test_zipkin_exporter.py

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@ def test_constructor(self):
2727
host_name = '0.0.0.0'
2828
port = 2333
2929
endpoint = '/api/v2/test'
30+
ipv4 = '127.0.0.1'
3031

3132
exporter = zipkin_exporter.ZipkinExporter(
3233
service_name=service_name,
3334
host_name=host_name,
3435
port=port,
35-
endpoint=endpoint)
36+
endpoint=endpoint,
37+
ipv4=ipv4)
3638

3739
expected_url = 'http://0.0.0.0:2333/api/v2/test'
3840

@@ -41,6 +43,7 @@ def test_constructor(self):
4143
self.assertEqual(exporter.port, port)
4244
self.assertEqual(exporter.endpoint, endpoint)
4345
self.assertEqual(exporter.url, expected_url)
46+
self.assertEqual(exporter.ipv4, ipv4)
4447

4548
def test_export(self):
4649
exporter = zipkin_exporter.ZipkinExporter(
@@ -144,23 +147,33 @@ def test_translate_to_zipkin_span_kind_none(self):
144147
}
145148

146149
trace_id = '6e0c63257de34c92bf9efcd03927272e'
147-
spans = [span1, span2, span3]
150+
spans_ipv4 = [span1, span2]
151+
spans_ipv6 = [span3]
148152

149-
local_endpoint = {
153+
ipv4 = '127.0.0.1'
154+
ipv6 = '2001:0db8:85a3:0000:0000:8a2e:0370:7334'
155+
156+
local_endpoint_ipv4 = {
157+
'serviceName': 'my_service',
158+
'ipv4': ipv4,
159+
'port': 9411,
160+
}
161+
162+
local_endpoint_ipv6 = {
150163
'serviceName': 'my_service',
151-
'ipv4': 'localhost',
164+
'ipv6': ipv6,
152165
'port': 9411,
153166
}
154167

155-
expected_zipkin_spans = [
168+
expected_zipkin_spans_ipv4 = [
156169
{
157170
'traceId': '6e0c63257de34c92bf9efcd03927272e',
158171
'id': '1234567890',
159172
'parentId': '1111111111',
160173
'name': 'child_span',
161174
'timestamp': 1502820146000000,
162175
'duration': 10000000,
163-
'localEndpoint': local_endpoint,
176+
'localEndpoint': local_endpoint_ipv4,
164177
'tags': {'test_key': 'test_value'},
165178
},
166179
{
@@ -170,27 +183,41 @@ def test_translate_to_zipkin_span_kind_none(self):
170183
'name': 'child_span',
171184
'timestamp': 1502820146000000,
172185
'duration': 10000000,
173-
'localEndpoint': local_endpoint,
186+
'localEndpoint': local_endpoint_ipv4,
174187
'tags': {'test_key': '1'},
175188
},
189+
]
190+
191+
expected_zipkin_spans_ipv6 = [
176192
{
177193
'traceId': '6e0c63257de34c92bf9efcd03927272e',
178194
'id': '1234567890',
179195
'name': 'child_span',
180196
'timestamp': 1502820146000000,
181197
'duration': 10000000,
182-
'localEndpoint': local_endpoint,
198+
'localEndpoint': local_endpoint_ipv6,
183199
'tags': {'test_key': 'False'},
184200
'kind': 'SERVER',
185-
}
201+
},
186202
]
187203

188-
exporter = zipkin_exporter.ZipkinExporter(service_name='my_service')
189-
zipkin_spans = exporter.translate_to_zipkin(
204+
# Test ipv4 local endpoint
205+
exporter_ipv4 = zipkin_exporter.ZipkinExporter(
206+
service_name='my_service', ipv4=ipv4)
207+
zipkin_spans_ipv4 = exporter_ipv4.translate_to_zipkin(
208+
trace_id=trace_id,
209+
spans=spans_ipv4)
210+
211+
self.assertEqual(zipkin_spans_ipv4, expected_zipkin_spans_ipv4)
212+
213+
# Test ipv6 local endpoint
214+
exporter_ipv6 = zipkin_exporter.ZipkinExporter(
215+
service_name='my_service', ipv6=ipv6)
216+
zipkin_spans_ipv6 = exporter_ipv6.translate_to_zipkin(
190217
trace_id=trace_id,
191-
spans=spans)
218+
spans=spans_ipv6)
192219

193-
self.assertEqual(zipkin_spans, expected_zipkin_spans)
220+
self.assertEqual(zipkin_spans_ipv6, expected_zipkin_spans_ipv6)
194221

195222

196223
class MockTransport(object):

0 commit comments

Comments
 (0)