1010logger = logging .getLogger (__name__ )
1111
1212
13- def get_xray_host_port (address ):
14- if address == "" :
15- logger .debug ("X-Ray daemon env var not set, not sending sub-segment" )
16- return None
17- parts = address .split (":" )
18- if len (parts ) <= 1 :
19- logger .debug ("X-Ray daemon env var not set, not sending sub-segment" )
20- return None
21- port = int (parts [1 ])
22- host = parts [0 ]
23- return (host , port )
24-
25-
26- def send (host_port_tuple , payload ):
27- sock = None
28- try :
29- sock = socket .socket (socket .AF_INET , socket .SOCK_DGRAM )
30- sock .setblocking (0 )
31- sock .connect (host_port_tuple )
32- sock .send (payload .encode ("utf-8" ))
33- except Exception as e_send :
34- logger .error ("Error occurred submitting to xray daemon: %s" , e_send )
35- try :
36- sock .close ()
37- except Exception as e_close :
38- logger .error ("Error while closing the socket: %s" , e_close )
13+ class Socket (object ):
14+ def __init__ (self ):
15+ self .sock = None
16+
17+ @property
18+ def host_port_tuple (self ):
19+ if not hasattr (self , "_host_port_tuple" ):
20+ self ._host_port_tuple = self ._get_xray_host_port (
21+ os .environ .get (XrayDaemon .XRAY_DAEMON_ADDRESS , "" )
22+ )
23+ return self ._host_port_tuple
24+
25+ def send (self , payload ):
26+ if not self .sock :
27+ self ._connect ()
28+ try :
29+ self .sock .send (payload .encode ("utf-8" ))
30+ except Exception as e_send :
31+ logger .error ("Error occurred submitting to xray daemon: %s" , e_send )
32+
33+ def _connect (self ):
34+ self .sock = socket .socket (socket .AF_INET , socket .SOCK_DGRAM )
35+ self .sock .setblocking (0 )
36+ self .sock .connect (self .host_port_tuple )
37+
38+ def _get_xray_host_port (self , address ):
39+ if address == "" :
40+ logger .debug ("X-Ray daemon env var not set, not sending sub-segment" )
41+ return None
42+ parts = address .split (":" )
43+ if len (parts ) <= 1 :
44+ logger .debug ("X-Ray daemon env var not set, not sending sub-segment" )
45+ return None
46+ port = int (parts [1 ])
47+ host = parts [0 ]
48+ return (host , port )
49+
50+
51+ sock = Socket ()
3952
4053
4154def build_segment_payload (payload ):
@@ -95,10 +108,7 @@ def build_segment(context, key, metadata):
95108
96109
97110def send_segment (key , metadata ):
98- host_port_tuple = get_xray_host_port (
99- os .environ .get (XrayDaemon .XRAY_DAEMON_ADDRESS , "" )
100- )
101- if host_port_tuple is None :
111+ if sock .host_port_tuple is None :
102112 return None
103113 context = parse_xray_header (
104114 os .environ .get (XrayDaemon .XRAY_TRACE_ID_HEADER_NAME , "" )
@@ -115,4 +125,4 @@ def send_segment(key, metadata):
115125 return None
116126 segment = build_segment (context , key , metadata )
117127 segment_payload = build_segment_payload (segment )
118- send (host_port_tuple , segment_payload )
128+ sock . send (segment_payload )
0 commit comments