def test_block_until_thread_is_ready(): threadloop = ThreadLoop() assert not threadloop.is_ready() threadloop.start() assert threadloop.is_ready()
class LocalAgentSender(TBufferedTransport): """ LocalAgentSender implements everything necessary to communicate with local jaeger-agent. This class is designed to work in tornado and non-tornado environments. If in torndado, pass in the ioloop, if not then LocalAgentSender will create one for itself. NOTE: LocalAgentSender derives from TBufferedTransport. This will buffer up all written data until flush() is called. Flush gets called at the end of the batch span submission call. """ def __init__(self, host, sampling_port, reporting_port, io_loop=None, throttling_port=None): # IOLoop self._thread_loop = None self.io_loop = io_loop or self._create_new_thread_loop() # HTTP sampling self.local_agent_http = LocalAgentHTTP(host, sampling_port) # HTTP throttling if throttling_port: self.throttling_http = LocalAgentHTTP(host, throttling_port) # UDP reporting - this will only get written to after our flush() call. # We are buffering things up because we are a TBufferedTransport. udp = TUDPTransport(host, reporting_port) TBufferedTransport.__init__(self, udp) def _create_new_thread_loop(self): """ Create a daemonized thread that will run Tornado IOLoop. :return: the IOLoop backed by the new thread. """ self._thread_loop = ThreadLoop() if not self._thread_loop.is_ready(): self._thread_loop.start() return self._thread_loop._io_loop def readFrame(self): """Empty read frame that is never ready""" return Future() # Pass-through for HTTP sampling strategies request. def request_sampling_strategy(self, *args, **kwargs): return self.local_agent_http.request_sampling_strategy(*args, **kwargs) # Pass-through for HTTP throttling credit request. def request_throttling_credits(self, *args, **kwargs): return self.throttling_http.request_throttling_credits(*args, **kwargs)
class Sender(object): def __init__(self, host, port, io_loop=None): self.host = host self.port = port self.io_loop = io_loop or self._create_new_thread_loop() def send(self, batch): raise NotImplementedError( 'This method should be implemented by subclasses') def _create_new_thread_loop(self): """ Create a daemonized thread that will run Tornado IOLoop. :return: the IOLoop backed by the new thread. """ self._thread_loop = ThreadLoop() if not self._thread_loop.is_ready(): self._thread_loop.start() return self._thread_loop._io_loop
class LocalAgentSender(TBufferedTransport): """ LocalAgentSender implements a everything necessary to communicate with local jaeger-agent. This class is designed to work in tornado and non-tornado environments. If in torndado, pass in the ioloop, if not then LocalAgentSender will create one for itself. NOTE: LocalAgentSender derives from TBufferedTransport. This will buffer up all written data until flush() is called. Flush gets called at the end of the batch span submission call. """ def __init__(self, host, sampling_port, reporting_port, ioloop=None): # ioloop if ioloop is None: self.create_new_threadloop() else: self.io_loop = ioloop # http sampling self.local_agent_http = LocalAgentHTTP(host, sampling_port) # udp reporting - this will only get written to after our flush() call. # We are buffering things up because we are a TBufferedTransport. udp = TUDPTransport(host, reporting_port) TBufferedTransport.__init__(self, udp) def create_new_threadloop(self): self._threadloop = ThreadLoop() if not self._threadloop.is_ready(): self._threadloop.start() self.io_loop = ioloop_util.get_io_loop(self) def readFrame(self): """Empty read frame that is never ready""" return Future() # Passthroughs for the http def request_sampling_strategy(self, service_name, timeout): return self.local_agent_http.request_sampling_strategy(service_name, timeout)
def test_is_not_ready_when_ready_hasnt_been_sent(): threadloop = ThreadLoop() threadloop._thread = True # fake the Thread being set assert not threadloop.is_ready()