10
10
import socket
11
11
import sys
12
12
import threading
13
- import urllib2
14
13
15
- from BaseHTTPServer import BaseHTTPRequestHandler , HTTPServer
14
+ try :
15
+ # For Python 3.0 and later
16
+ from urllib .request import (
17
+ Request ,
18
+ urlopen ,
19
+ )
20
+ from http .server import BaseHTTPRequestHandler , HTTPServer
21
+ except ImportError :
22
+ # Fall back to Python 2
23
+ from urllib2 import (
24
+ Request ,
25
+ urlopen ,
26
+ )
27
+ from BaseHTTPServer import BaseHTTPRequestHandler , HTTPServer
28
+
16
29
17
30
import opentracing
18
31
import opentracing .ext .tags
@@ -29,7 +42,7 @@ def do_GET(self):
29
42
self .send_response (200 )
30
43
self .send_header ('Content-type' , 'text/html' )
31
44
self .end_headers ()
32
- self .wfile .write ("Hello World!" )
45
+ self .wfile .write ("Hello World!" . encode ( "utf-8" ) )
33
46
34
47
server_span .log_event ('prepared response' , self .path )
35
48
@@ -39,13 +52,19 @@ def before_sending_request(request):
39
52
"""
40
53
span = opentracing .tracer .start_span ('Sending request' )
41
54
span .set_tag ('server.http.url' , request .get_full_url ())
42
- host = request .get_host ()
55
+ try :
56
+ # Python 2
57
+ host = request .get_host ()
58
+ except :
59
+ # Python 3
60
+ host = request .host
61
+
43
62
if host :
44
63
span .set_tag (opentracing .ext .tags .PEER_HOST_IPV4 , host )
45
64
46
65
carrier_dict = {}
47
66
span .tracer .inject (span .context , opentracing .Format .HTTP_HEADERS , carrier_dict )
48
- for k , v in carrier_dict .iteritems ():
67
+ for k , v in carrier_dict .items ():
49
68
request .add_header (k , v )
50
69
return span
51
70
@@ -65,13 +84,13 @@ def before_answering_request(handler, tracer):
65
84
operation_name = operation ,
66
85
child_of = extracted_context )
67
86
else :
68
- print 'ERROR: Context missing, starting new trace'
87
+ print ( 'ERROR: Context missing, starting new trace' )
69
88
global _exit_code
70
89
_exit_code = errno .ENOMSG
71
90
span = tracer .start_span (operation_name = operation )
72
91
headers = ', ' .join ({k + '=' + v for k , v in handler .headers .items ()})
73
92
span .log_event ('extract_failed' , headers )
74
- print 'Could not extract context from http headers: ' + headers
93
+ print ( 'Could not extract context from http headers: ' + headers )
75
94
76
95
host , port = handler .client_address
77
96
if host :
@@ -131,24 +150,24 @@ def lightstep_tracer_from_args():
131
150
# Run the server in a separate thread.
132
151
server_thread = threading .Thread (target = server .serve_forever )
133
152
server_thread .start ()
134
- print 'Started httpserver on port ' , port_number
153
+ print ( 'Started httpserver on port ' , port_number )
135
154
136
155
# Prepare request in the client
137
156
url = 'http://localhost:{}' .format (port_number )
138
- request = urllib2 . Request (url )
157
+ request = Request (url )
139
158
with before_sending_request (request ) as client_span :
140
159
client_span .log_event ('sending request' , url )
141
160
142
161
# Send request to server
143
- response = urllib2 . urlopen (request )
162
+ response = urlopen (request )
144
163
145
164
response_body = response .read ()
146
165
client_span .log_event ('server returned' , {
147
166
"code" : response .code ,
148
167
"body" : response_body ,
149
168
})
150
169
151
- print 'Server returned ' + str (response .code ) + ': ' + response_body
170
+ print ( 'Server returned ' + str (response .code ) + ': ' + str ( response_body ))
152
171
153
172
sys .exit (_exit_code )
154
173
0 commit comments