コード例 #1
0
ファイル: test_sampler.py プロジェクト: tebriel/dd-trace-py
    def test_set_sample_rate_by_service(self):
        cases = [
            {"service:,env:":1},
            {"service:,env:":1, "service:mcnulty,env:dev":0.33, "service:postgres,env:dev":0.7},
            {"service:,env:":1, "service:mcnulty,env:dev": 0.25, "service:postgres,env:dev": 0.5, "service:redis,env:prod": 0.75}
        ]

        tracer = get_dummy_tracer()
        tracer.configure(sampler=AllSampler(), priority_sampling=True)
        priority_sampler = tracer.priority_sampler
        for case in cases:
            priority_sampler.set_sample_rate_by_service(case)
            rates = {}
            for k,v in iteritems(priority_sampler._by_service_samplers):
                rates[k] = v.sample_rate
            assert case == rates, "%s != %s" % (case, rates)
        # It's important to also test in reverse mode for we want to make sure key deletion
        # works as well as key insertion (and doing this both ways ensures we trigger both cases)
        cases.reverse()
        for case in cases:
            priority_sampler.set_sample_rate_by_service(case)
            rates = {}
            for k,v in iteritems(priority_sampler._by_service_samplers):
                rates[k] = v.sample_rate
            assert case == rates, "%s != %s" % (case, rates)
コード例 #2
0
    def test_set_sample_rate_by_service(self):
        cases = [{
            "service:,env:": 1
        }, {
            "service:,env:": 1,
            "service:mcnulty,env:dev": 0.33,
            "service:postgres,env:dev": 0.7
        }, {
            "service:,env:": 1,
            "service:mcnulty,env:dev": 0.25,
            "service:postgres,env:dev": 0.5,
            "service:redis,env:prod": 0.75
        }]

        tracer = get_dummy_tracer()
        tracer.configure(sampler=AllSampler(), priority_sampling=True)
        priority_sampler = tracer.priority_sampler
        for case in cases:
            priority_sampler.set_sample_rate_by_service(case)
            rates = {}
            for k, v in iteritems(priority_sampler._by_service_samplers):
                rates[k] = v.sample_rate
            assert case == rates, "%s != %s" % (case, rates)
        # It's important to also test in reverse mode for we want to make sure key deletion
        # works as well as key insertion (and doing this both ways ensures we trigger both cases)
        cases.reverse()
        for case in cases:
            priority_sampler.set_sample_rate_by_service(case)
            rates = {}
            for k, v in iteritems(priority_sampler._by_service_samplers):
                rates[k] = v.sample_rate
            assert case == rates, "%s != %s" % (case, rates)
コード例 #3
0
ファイル: test_api.py プロジェクト: tebriel/dd-trace-py
    def test_parse_response_json(self, log):
        tracer = get_dummy_tracer()
        tracer.debug_logging = True
        test_cases = {'OK': {'js': None, 'log': "please make sure trace-agent is up to date"},
                      'OK\n': {'js': None, 'log': "please make sure trace-agent is up to date"},
                      'error:unsupported-endpoint': {'js': None, 'log': "unable to load JSON 'error:unsupported-endpoint'"},
                      42: {'js': None, 'log': "unable to load JSON '42'"}, # int as key to trigger TypeError
                      '{}': {'js': {}},
                      '[]': {'js': []},
                      '{"rate_by_service": {"service:,env:":0.5, "service:mcnulty,env:test":0.9, "service:postgres,env:test":0.6}}':
                      {'js': {"rate_by_service":
                              {"service:,env:":0.5,
                               "service:mcnulty,env:test":0.9,
                               "service:postgres,env:test":0.6}}},
                      ' [4,2,1] ': {'js': [4,2,1]}}

        for k,v in iteritems(test_cases):
            r = ResponseMock(k)
            js =_parse_response_json(r)
            eq_(v['js'], js)
            if 'log' in v:
                ok_(1<=len(log.call_args_list), "not enough elements in call_args_list: %s" % log.call_args_list)
                print(log.call_args_list)
                l = log.call_args_list[-1][0][0]
                ok_(v['log'] in l, "unable to find %s in %s" % (v['log'], l))
コード例 #4
0
    def test_parse_response_json(self, log):
        tracer = get_dummy_tracer()
        tracer.debug_logging = True

        test_cases = {
            'OK':
            dict(
                js=None,
                log=
                'Cannot parse Datadog Agent response, please make sure your Datadog Agent is up to date',
            ),
            'OK\n':
            dict(
                js=None,
                log=
                'Cannot parse Datadog Agent response, please make sure your Datadog Agent is up to date',
            ),
            'error:unsupported-endpoint':
            dict(
                js=None,
                log=
                'Unable to parse Datadog Agent JSON response: .*? \'error:unsupported-endpoint\'',
            ),
            42:
            dict(  # int as key to trigger TypeError
                js=None,
                log='Unable to parse Datadog Agent JSON response: .*? 42',
            ),
            '{}':
            dict(js={}),
            '[]':
            dict(js=[]),

            # Priority sampling "rate_by_service" response
            ('{"rate_by_service": '
             '{"service:,env:":0.5, "service:mcnulty,env:test":0.9, "service:postgres,env:test":0.6}}'):
            dict(js=dict(rate_by_service={
                'service:,env:': 0.5,
                'service:mcnulty,env:test': 0.9,
                'service:postgres,env:test': 0.6,
            }, ), ),
            ' [4,2,1] ':
            dict(js=[4, 2, 1]),
        }

        for k, v in iteritems(test_cases):
            log.reset_mock()

            r = Response.from_http_response(ResponseMock(k))
            js = r.get_json()
            assert v['js'] == js
            if 'log' in v:
                log.assert_called_once()
                msg = log.call_args[0][0] % log.call_args[0][1:]
                assert re.match(v['log'], msg), msg
コード例 #5
0
ファイル: test_api.py プロジェクト: zapier/dd-trace-py
    def test_parse_response_json(self, log):
        tracer = get_dummy_tracer()
        tracer.debug_logging = True
        test_cases = {
            'OK': {
                'js': None,
                'log': "please make sure trace-agent is up to date"
            },
            'OK\n': {
                'js': None,
                'log': "please make sure trace-agent is up to date"
            },
            'error:unsupported-endpoint': {
                'js': None,
                'log': "unable to load JSON 'error:unsupported-endpoint'"
            },
            42: {
                'js': None,
                'log': "unable to load JSON '42'"
            },  # int as key to trigger TypeError
            '{}': {
                'js': {}
            },
            '[]': {
                'js': []
            },
            '{"rate_by_service": {"service:,env:":0.5, "service:mcnulty,env:test":0.9, "service:postgres,env:test":0.6}}':
            {
                'js': {
                    "rate_by_service": {
                        "service:,env:": 0.5,
                        "service:mcnulty,env:test": 0.9,
                        "service:postgres,env:test": 0.6
                    }
                }
            },
            ' [4,2,1] ': {
                'js': [4, 2, 1]
            }
        }

        for k, v in iteritems(test_cases):
            r = ResponseMock(k)
            js = _parse_response_json(r)
            eq_(v['js'], js)
            if 'log' in v:
                ok_(
                    1 <= len(log.call_args_list),
                    "not enough elements in call_args_list: %s" %
                    log.call_args_list)
                print(log.call_args_list)
                l = log.call_args_list[-1][0][0]
                ok_(v['log'] in l, "unable to find %s in %s" % (v['log'], l))
コード例 #6
0
    def test_parse_response_json(self, log):
        test_cases = {
            "OK":
            dict(
                js=None,
                log=
                "Cannot parse Datadog Agent response, please make sure your Datadog Agent is up to date",
            ),
            "OK\n":
            dict(
                js=None,
                log=
                "Cannot parse Datadog Agent response, please make sure your Datadog Agent is up to date",
            ),
            "error:unsupported-endpoint":
            dict(
                js=None,
                log=
                "Unable to parse Datadog Agent JSON response: 'error:unsupported-endpoint'",
            ),
            42:
            dict(  # int as key to trigger TypeError
                js=None,
                log="Unable to parse Datadog Agent JSON response: 42",
            ),
            "{}":
            dict(js={}),
            "[]":
            dict(js=[]),
            # Priority sampling "rate_by_service" response
            ('{"rate_by_service": '
             '{"service:,env:":0.5, "service:mcnulty,env:test":0.9, "service:postgres,env:test":0.6}}'):
            dict(js=dict(rate_by_service={
                "service:,env:": 0.5,
                "service:mcnulty,env:test": 0.9,
                "service:postgres,env:test": 0.6,
            }, ), ),
            " [4,2,1] ":
            dict(js=[4, 2, 1]),
        }

        for k, v in iteritems(test_cases):
            log.reset_mock()

            r = Response.from_http_response(ResponseMock(k))
            js = r.get_json()
            assert v["js"] == js
            if "log" in v:
                log.assert_called_once()
                msg = log.call_args[0][0] % log.call_args[0][1:]
                assert re.match(v["log"], msg), msg
コード例 #7
0
def test_datadog_sampler_update_rate_by_service_sample_rates(dummy_tracer):
    cases = [
        {
            "service:,env:": 1,
        },
        {
            "service:,env:": 1,
            "service:mcnulty,env:dev": 0.33,
            "service:postgres,env:dev": 0.7,
        },
        {
            "service:,env:": 1,
            "service:mcnulty,env:dev": 0.25,
            "service:postgres,env:dev": 0.5,
            "service:redis,env:prod": 0.75,
        },
    ]

    # By default sampler sets it's default sampler to RateByServiceSampler
    sampler = DatadogSampler()
    for case in cases:
        sampler.update_rate_by_service_sample_rates(case)
        rates = {}
        for k, v in iteritems(sampler.default_sampler._by_service_samplers):
            rates[k] = v.sample_rate
        assert case == rates, "%s != %s" % (case, rates)

    # It's important to also test in reverse mode for we want to make sure key deletion
    # works as well as key insertion (and doing this both ways ensures we trigger both cases)
    cases.reverse()
    for case in cases:
        sampler.update_rate_by_service_sample_rates(case)
        rates = {}
        for k, v in iteritems(sampler.default_sampler._by_service_samplers):
            rates[k] = v.sample_rate
        assert case == rates, "%s != %s" % (case, rates)
コード例 #8
0
ファイル: test_sampler.py プロジェクト: wantsui/dd-trace-py
    def test_update_rate_by_service_sample_rates(self):
        cases = [
            {
                'service:,env:': 1,
            },
            {
                'service:,env:': 1,
                'service:mcnulty,env:dev': 0.33,
                'service:postgres,env:dev': 0.7,
            },
            {
                'service:,env:': 1,
                'service:mcnulty,env:dev': 0.25,
                'service:postgres,env:dev': 0.5,
                'service:redis,env:prod': 0.75,
            },
        ]

        tracer = get_dummy_tracer()
        tracer.configure(sampler=AllSampler())
        priority_sampler = tracer.priority_sampler
        for case in cases:
            priority_sampler.update_rate_by_service_sample_rates(case)
            rates = {}
            for k, v in iteritems(priority_sampler._by_service_samplers):
                rates[k] = v.sample_rate
            assert case == rates, '%s != %s' % (case, rates)
        # It's important to also test in reverse mode for we want to make sure key deletion
        # works as well as key insertion (and doing this both ways ensures we trigger both cases)
        cases.reverse()
        for case in cases:
            priority_sampler.update_rate_by_service_sample_rates(case)
            rates = {}
            for k, v in iteritems(priority_sampler._by_service_samplers):
                rates[k] = v.sample_rate
            assert case == rates, '%s != %s' % (case, rates)