class DummyWriter(AgentWriter): """DummyWriter is a small fake writer used for tests. not thread-safe.""" def __init__(self, *args, **kwargs): # original call if len(args) == 0 and "agent_url" not in kwargs: kwargs["agent_url"] = "http://localhost:8126" super(DummyWriter, self).__init__(*args, **kwargs) self.spans = [] self.traces = [] self.json_encoder = JSONEncoder() self.msgpack_encoder = MsgpackEncoder() def write(self, spans=None): if spans: # the traces encoding expect a list of traces so we # put spans in a list like we do in the real execution path # with both encoders trace = [spans] self.json_encoder.encode_traces(trace) self.msgpack_encoder.encode_traces(trace) self.spans += spans self.traces += trace def pop(self): # type: () -> List[Span] s = self.spans self.spans = [] return s def pop_traces(self): # type: () -> List[List[Span]] traces = self.traces self.traces = [] return traces
class DummyWriter(AgentWriter): """ # NB: This is coy fo DummyWriter class from ddtraces tests suite DummyWriter is a small fake writer used for tests. not thread-safe. """ def __init__(self): # original call super(DummyWriter, self).__init__() # dummy components self.spans = [] self.traces = [] self.services = {} self.json_encoder = JSONEncoder() self.msgpack_encoder = MsgpackEncoder() def write(self, spans=None, services=None): if spans: # the traces encoding expect a list of traces so we # put spans in a list like we do in the real execution path # with both encoders trace = [spans] self.json_encoder.encode_traces(trace) self.msgpack_encoder.encode_traces(trace) self.spans += spans self.traces += trace if services: self.json_encoder.encode_services(services) self.msgpack_encoder.encode_services(services) self.services.update(services) def pop(self): # dummy method s = self.spans self.spans = [] return s def pop_traces(self): # dummy method traces = self.traces self.traces = [] return traces def pop_services(self): # dummy method s = self.services self.services = {} return s
class DummyWriter(AgentWriter): """DummyWriter is a small fake writer used for tests. not thread-safe.""" def __init__(self, *args, **kwargs): # original call super(DummyWriter, self).__init__(*args, **kwargs) # dummy components self.spans = [] self.traces = [] self.services = {} self.json_encoder = JSONEncoder() self.msgpack_encoder = MsgpackEncoder() def write(self, spans=None, services=None): if spans: # the traces encoding expect a list of traces so we # put spans in a list like we do in the real execution path # with both encoders trace = [spans] self.json_encoder.encode_traces(trace) self.msgpack_encoder.encode_traces(trace) self.spans += spans self.traces += trace if services: self.json_encoder.encode_services(services) self.msgpack_encoder.encode_services(services) self.services.update(services) def pop(self): # dummy method s = self.spans self.spans = [] return s def pop_traces(self): # dummy method traces = self.traces self.traces = [] return traces def pop_services(self): # dummy method # Setting service info has been deprecated, we want to make sure nothing ever gets written here assert self.services == {} s = self.services self.services = {} return s
class DummyWriter(AgentWriter): """DummyWriter is a small fake writer used for tests. not thread-safe.""" def __init__(self, *args: typing.Any, **kwargs: typing.Any) -> None: super().__init__(*args, **kwargs) # Dummy components. self.spans: typing.List[Span] = [] self.traces: typing.List[Trace] = [] self.services: typing.Dict[str, Service] = {} self.json_encoder = JSONEncoder() self.msgpack_encoder = MsgpackEncoder() def write(self, spans: typing.List[Span] = None, services: typing.List[Service] = None) -> None: if spans: # The traces encoding expect a list of traces so we # put spans in a list like we do in the real execution path # with both encoders. trace = [spans] self.json_encoder.encode_traces(trace) self.msgpack_encoder.encode_traces(trace) self.spans += spans self.traces += trace if services: self.json_encoder.encode_services(services) self.msgpack_encoder.encode_services(services) self.services.update(services) def pop(self) -> typing.List[Span]: # Dummy method. spans = self.spans self.spans = [] return spans def pop_traces(self) -> typing.List[Trace]: # Dummy method. traces = self.traces self.traces = [] return traces def pop_services(self) -> typing.Dict[str, Service]: # Dummy method. # Setting service info has been deprecated, # we want to make sure nothing ever gets written here. assert self.services == {} services = self.services self.services = {} return services
def test_encode_traces_json(self): # test encoding for JSON format traces = [] traces.append([ Span(name='client.testing', tracer=None), Span(name='client.testing', tracer=None), ]) traces.append([ Span(name='client.testing', tracer=None), Span(name='client.testing', tracer=None), ]) encoder = JSONEncoder() spans = encoder.encode_traces(traces) items = json.loads(spans) # test the encoded output that should be a string # and the output must be flatten assert isinstance(spans, string_type) assert len(items) == 2 assert len(items[0]) == 2 assert len(items[1]) == 2 for i in range(2): for j in range(2): assert 'client.testing' == items[i][j]['name']
def test_encode_traces_json(self): # test encoding for JSON format traces = [] traces.append([ Span(name='client.testing', tracer=None), Span(name='client.testing', tracer=None), ]) traces.append([ Span(name='client.testing', tracer=None), Span(name='client.testing', tracer=None), ]) encoder = JSONEncoder() spans = encoder.encode_traces(traces) items = json.loads(spans) # test the encoded output that should be a string # and the output must be flatten ok_(isinstance(spans, string_type)) eq_(len(items), 2) eq_(len(items[0]), 2) eq_(len(items[1]), 2) for i in range(2): for j in range(2): eq_('client.testing', items[i][j]['name'])
class DummyWriter(AgentWriter): """ DummyWriter is a small fake writer used for tests. not thread-safe. """ def __init__(self): # original call super(DummyWriter, self).__init__() # dummy components self.spans = [] self.traces = [] self.services = {} self.json_encoder = JSONEncoder() self.msgpack_encoder = MsgpackEncoder() def write(self, spans=None, services=None): if spans: # the traces encoding expect a list of traces so we # put spans in a list like we do in the real execution path # with both encoders trace = [spans] self.json_encoder.encode_traces(trace) self.msgpack_encoder.encode_traces(trace) self.spans += spans self.traces += trace if services: self.json_encoder.encode_services(services) self.msgpack_encoder.encode_services(services) self.services.update(services) def pop(self): # dummy method s = self.spans self.spans = [] return s def pop_traces(self): # dummy method traces = self.traces self.traces = [] return traces def pop_services(self): # dummy method s = self.services self.services = {} return s
def test_encode_traces_json(self): # test encoding for JSON format traces = [] traces.append([ Span(name='client.testing', tracer=None), Span(name='client.testing', tracer=None), ]) traces.append([ Span(name='client.testing', tracer=None), Span(name='client.testing', tracer=None), ]) encoder = JSONEncoder() spans = encoder.encode_traces(traces) items = json.loads(spans) # test the encoded output that should be a string # and the output must be flatten ok_(isinstance(spans, string_type)) eq_(len(items), 2) eq_(len(items[0]), 2) eq_(len(items[1]), 2)