Пример #1
0
def runtime_metrics_service(tracer=None, flush_interval=None):
    RuntimeWorker.enable(tracer=tracer, flush_interval=flush_interval)
    assert RuntimeWorker._instance is not None
    assert RuntimeWorker._instance.status == ServiceStatus.RUNNING

    yield RuntimeWorker._instance

    RuntimeWorker._instance.stop()
    assert RuntimeWorker._instance.status == ServiceStatus.STOPPED
    RuntimeWorker._instance = None
Пример #2
0
class TestRuntimeWorker(BaseTracerTestCase):
    def test_worker_metrics(self):
        self.tracer.configure(collect_metrics=True)

        with self.override_global_tracer(self.tracer):
            self.tracer._dogstatsd_client = DogStatsd()
            self.tracer._dogstatsd_client.socket = FakeSocket()

            root = self.start_span('parent', service='parent')
            context = root.context
            self.start_span('child', service='child', child_of=context)

            self.worker = RuntimeWorker(self.tracer._dogstatsd_client)
            self.worker.start()
            self.worker.stop()

            # get all received metrics
            received = []
            while True:
                new = self.tracer._dogstatsd_client.socket.recv()
                if not new:
                    break

                received.append(new)
                # DEV: sleep since metrics will still be getting collected and written
                time.sleep(.5)

            # expect received all default metrics
            self.assertEqual(len(received), len(DEFAULT_RUNTIME_METRICS))

            # expect all metrics in default set are received
            # DEV: dogstatsd gauges in form "{metric_name}:{metric_value}|g#t{tag_name}:{tag_value},..."
            self.assertSetEqual(
                set([gauge.split(':')[0] for gauge in received]),
                DEFAULT_RUNTIME_METRICS
            )

            for gauge in received:
                self.assertRegexpMatches(gauge, 'runtime-id:')
                self.assertRegexpMatches(gauge, 'service:parent')
                self.assertRegexpMatches(gauge, 'service:child')
Пример #3
0
try:
    from ddtrace import tracer

    dd_hostname = os.getenv("DD_TRACE_AGENT_HOSTNAME")
    hostname = os.getenv("DD_AGENT_HOST", dd_hostname)
    port = os.getenv("DD_TRACE_AGENT_PORT")
    priority_sampling = os.getenv("DD_PRIORITY_SAMPLING")
    profiling = asbool(os.getenv("DD_PROFILING_ENABLED", False))

    if profiling:
        log.debug("profiler enabled via environment variable")
        import ddtrace.profiling.auto  # noqa: F401

    if asbool(os.getenv("DD_RUNTIME_METRICS_ENABLED")):
        RuntimeWorker.enable()

    opts = {}  # type: Dict[str, Any]

    dd_trace_enabled = os.getenv("DD_TRACE_ENABLED", default=True)
    if asbool(dd_trace_enabled):
        trace_enabled = True
    else:
        trace_enabled = False
        opts["enabled"] = False

    if hostname:
        opts["hostname"] = hostname
    if port:
        opts["port"] = int(port)
    if priority_sampling: