Esempio n. 1
0
 def test_is_not_match(self):
     span = Span(name="Name", tracer=None)
     span.set_tag(URL, r"http://anotherexample.com")
     filtr = FilterRequestsOnUrl("http://examp.*.com")
     trace = filtr.process_trace([span])
     self.assertIsNotNone(trace)
Esempio n. 2
0
 def test_current_root_span(self):
     # it should return the current active root span
     ctx = Context()
     span = Span(tracer=None, name="fake_span")
     ctx.add_span(span)
     assert span == ctx.get_current_root_span()
Esempio n. 3
0
def span_type_span():
    s = Span(None, "span_name")
    s.span_type = SpanTypes.WEB
    return s
Esempio n. 4
0
 def _fill_ctx():
     ctx = l_ctx.get()
     span = Span(tracer=None, name='fake_span')
     ctx.add_span(span)
     eq_(1, len(ctx._trace))
Esempio n. 5
0
 def test_finished(self):
     # a Context is finished if all spans inside are finished
     ctx = Context()
     span = Span(tracer=None, name="fake_span")
     ctx.add_span(span)
     ctx.close_span(span)
Esempio n. 6
0
    def test_keep_rate(self):
        statsd = mock.Mock()
        writer_run_periodic = mock.Mock()
        writer_put = mock.Mock()
        writer_put.return_value = Response(status=200)
        writer = AgentWriter(agent_url="http://asdf:1234", dogstatsd=statsd, report_metrics=False)
        writer.run_periodic = writer_run_periodic
        writer._put = writer_put

        traces = [
            [Span(tracer=None, name="name", trace_id=i, span_id=j, parent_id=j - 1 or None) for j in range(5)]
            for i in range(4)
        ]

        traces_too_big = [
            [Span(tracer=None, name="a" * 5000, trace_id=i, span_id=j, parent_id=j - 1 or None) for j in range(2 ** 10)]
            for i in range(4)
        ]

        # 1. We write 4 traces successfully.
        for trace in traces:
            writer.write(trace)
        writer.flush_queue()

        payload = msgpack.unpackb(writer_put.call_args.args[0])
        # No previous drops.
        assert 0.0 == writer._drop_sma.get()
        # 4 traces written.
        assert 4 == len(payload)
        # 100% of traces kept (refers to the past).
        # No traces sent before now so 100% kept.
        for trace in payload:
            assert 1.0 == trace[0]["metrics"].get(KEEP_SPANS_RATE_KEY, -1)

        # 2. We fail to write 4 traces because of size limitation.
        for trace in traces_too_big:
            writer.write(trace)
        writer.flush_queue()

        # 50% of traces were dropped historically.
        # 4 successfully written before and 4 dropped now.
        assert 0.5 == writer._drop_sma.get()
        # put not called since no new traces are available.
        writer_put.assert_called_once()

        # 3. We write 2 traces successfully.
        for trace in traces[:2]:
            writer.write(trace)
        writer.flush_queue()

        payload = msgpack.unpackb(writer_put.call_args.args[0])
        # 40% of traces were dropped historically.
        assert 0.4 == writer._drop_sma.get()
        # 2 traces written.
        assert 2 == len(payload)
        # 50% of traces kept (refers to the past).
        # We had 4 successfully written and 4 dropped.
        for trace in payload:
            assert 0.5 == trace[0]["metrics"].get(KEEP_SPANS_RATE_KEY, -1)

        # 4. We write 1 trace successfully and fail to write 3.
        writer.write(traces[0])
        for trace in traces_too_big[:3]:
            writer.write(trace)
        writer.flush_queue()

        payload = msgpack.unpackb(writer_put.call_args.args[0])
        # 50% of traces were dropped historically.
        assert 0.5 == writer._drop_sma.get()
        # 1 trace written.
        assert 1 == len(payload)
        # 60% of traces kept (refers to the past).
        # We had 4 successfully written, then 4 dropped, then 2 written.
        for trace in payload:
            assert 0.6 == trace[0]["metrics"].get(KEEP_SPANS_RATE_KEY, -1)
Esempio n. 7
0
def test_flush_connection_uds(endpoint_uds_server):
    writer = AgentWriter(agent_url="unix://%s" % endpoint_uds_server.server_address)
    writer._encoder.put([Span(None, "foobar")])
    writer.flush_queue(raise_exc=True)
 def test_is_match(self):
     span = Span(name='Name', tracer=None)
     span.set_tag(URL, r'http://example.com')
     filtr = FilterRequestsOnUrl('http://examp.*.com')
     trace = filtr.process_trace([span])
     self.assertIsNone(trace)
Esempio n. 9
0
 def test_numeric_tags_bad_value(self):
     s = Span(tracer=None, name='test.span')
     s.set_tag(ANALYTICS_SAMPLE_RATE_KEY, 'Hello')
     d = s.to_dict()
     assert d
     assert 'metrics' not in d
Esempio n. 10
0
 def test_finish_called_multiple_times(self):
     # we should only record a span the first time finish is called on it
     s = Span(self.tracer, "bar")
     s.finish()
     s.finish()
Esempio n. 11
0
def test_numeric_tags_none():
    s = Span(tracer=None, name='test.span')
    s.set_tag(ANALYTICS_SAMPLE_RATE_KEY, None)
    d = s.to_dict()
    assert d
    assert 'metrics' not in d
Esempio n. 12
0
    ref = refencoder.join_encoded([refencoder.encode_trace(trace) for _ in range(1)])
    custom = encoder.join_encoded([encoder.encode_trace(trace) for _ in range(1)])
    assert decode(ref) == decode(custom)


def span_type_span():
    s = Span(None, "span_name")
    s.span_type = SpanTypes.WEB
    return s


@pytest.mark.parametrize(
    "span",
    [
        Span(None, "span_name", span_type=SpanTypes.WEB),
        Span(None, "span_name", resource="/my-resource"),
        Span(None, "span_name", service="my-svc"),
        span_type_span(),
    ],
)
def test_msgpack_span_property_variations(span):
    refencoder = RefMsgpackEncoder()
    encoder = MsgpackEncoder()

    # Finish the span to ensure a duration exists.
    span.finish()

    trace = [span]
    assert decode(refencoder.encode_trace(trace)) == decode(encoder.encode_trace(trace))
Esempio n. 13
0
 def _fill_ctx():
     ctx = ctxm.get()
     span = Span(tracer=None, name='fake_span')
     ctx.add_span(span)
     assert 1 == len(ctx._trace)
Esempio n. 14
0
                    sampling_priority=2),
            Context(trace_id=123,
                    span_id=321,
                    dd_origin="synthetics",
                    sampling_priority=2),
        ),
    ],
)
def test_eq(ctx1, ctx2):
    assert ctx1 == ctx2


@pytest.mark.parametrize(
    "ctx1,ctx2",
    [
        (Context(), Span("")),
        (Context(), None),
        (Context(), object()),
        (None, Context()),
        (Context(), 5),
        (5, Context()),
        (
            Context(trace_id=123,
                    span_id=321,
                    dd_origin="synthetics",
                    sampling_priority=2),
            Context(trace_id=1234,
                    span_id=321,
                    dd_origin="synthetics",
                    sampling_priority=2),
        ),
Esempio n. 15
0
def test_set_tag_measured_no_value():
    s = Span(tracer=None, name="test.span")
    s.set_tag(SPAN_MEASURED_KEY)
    assert_is_measured(s)
Esempio n. 16
0
 def test_set_tag_env(self):
     s = Span(tracer=None, name='test.span')
     s.set_tag(ENV_KEY, 'prod')
     assert s.get_tag(ENV_KEY) == 'prod'
Esempio n. 17
0
def test_span_unicode_set_tag():
    span = Span(None, None)
    span.set_tag("key", u"😌")
    span.set_tag("😐", u"😌")
    span._set_str_tag("key", u"😌")
    span._set_str_tag(u"😐", u"😌")
Esempio n. 18
0
def test_sampling_rule_sample_rate_0():
    rule = SamplingRule(sample_rate=0)

    iterations = int(1e4)
    assert sum(rule.sample(Span(name=str(i))) for i in range(iterations)) == 0
Esempio n. 19
0
def test_flush_connection_timeout(endpoint_test_timeout_server):
    writer = AgentWriter(agent_url="http://%s:%s" % (_HOST, _TIMEOUT_PORT))
    with pytest.raises(socket.timeout):
        writer._encoder.put([Span(None, "foobar")])
        writer.flush_queue(raise_exc=True)
Esempio n. 20
0
 def test_numeric_tags_bad_value(self):
     s = Span(tracer=None, name="test.span")
     s.set_tag(ANALYTICS_SAMPLE_RATE_KEY, "Hello")
     d = s.to_dict()
     assert d
     assert "metrics" not in d
Esempio n. 21
0
 def do_write(i):
     writer.write([Span(None, str(i))])
Esempio n. 22
0
 def test_duration_zero(self):
     s = Span(tracer=None, name="foo.bar", service="s", resource="r", start=123)
     s.finish(finish_time=123)
     assert s.duration_ns == 0
     assert s.duration == 0
Esempio n. 23
0
 def test_current_span(self):
     # it should return the current active span
     ctx = Context()
     span = Span(tracer=None, name='fake_span')
     ctx.add_span(span)
     eq_(span, ctx.get_current_span())
Esempio n. 24
0
 def test_set_tag_env(self):
     s = Span(tracer=None, name="test.span")
     s.set_tag(ENV_KEY, "prod")
     assert s.get_tag(ENV_KEY) == "prod"
Esempio n. 25
0
 def _fill_ctx():
     span = Span(tracer=None, name="fake_span")
     ctx.add_span(span)
Esempio n. 26
0
def test_set_tag_measured(value, assertion):
    s = Span(tracer=None, name="test.span")
    s.set_tag(SPAN_MEASURED_KEY, value)
    assertion(s)
Esempio n. 27
0
        [refencoder.encode_trace(trace) for _ in range(1)])
    custom = encoder.join_encoded(
        [encoder.encode_trace(trace) for _ in range(1)])
    assert decode(ref) == decode(custom)


def span_type_span():
    s = Span(None, "span_name")
    s.span_type = SpanTypes.WEB
    return s


@pytest.mark.parametrize(
    "span",
    [
        Span(None, "span_name", span_type=SpanTypes.WEB),
        Span(None, "span_name", resource="/my-resource"),
        Span(None, "span_name", service="my-svc"),
        span_type_span(),
    ],
)
def test_msgpack_span_property_variations(span):
    refencoder = RefMsgpackEncoder()
    encoder = MsgpackEncoder()

    # Finish the span to ensure a duration exists.
    span.finish()

    trace = [span]
    assert decode(refencoder.encode_trace(trace)) == decode(
        encoder.encode_trace(trace))
Esempio n. 28
0
def test_set_tag_measured_not_set():
    # Span is not measured by default
    s = Span(tracer=None, name="test.span")
    assert_is_not_measured(s)
Esempio n. 29
0
 def test_finish_no_tracer(self):
     # ensure finish works with no tracer without raising exceptions
     s = Span(tracer=None, name='test.span')
     s.finish()
Esempio n. 30
0
def test_span_preconditions(arg):
    Span("test", **{arg: None})
    with pytest.raises(TypeError):
        Span("test", **{arg: "foo"})