def test_double_patch(self):
        s3 = boto.s3.connect_to_region("us-east-1")

        BotoInstrumentor().instrument()
        BotoInstrumentor().instrument()

        # Get the created bucket
        s3.create_bucket("cheese")
        spans = self.memory_exporter.get_finished_spans()
        assert spans
        self.assertEqual(len(spans), 1)
示例#2
0
    def _enable_otel(self):

        from opentelemetry                  import trace
        from opentelemetry.propagate        import set_global_textmap
        from opentelemetry.sdk.resources    import Resource
        from opentelemetry.sdk.trace        import TracerProvider
        from opentelemetry.exporter.datadog import DatadogSpanExporter, DatadogExportSpanProcessor
        from opentelemetry.exporter.datadog.propagator import DatadogFormat
        from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient

        r = Resource({
            'app.version':      __version__,
            'app.framework':    ':'.join((self._name, __version__)),
            'net.hostname':     socket.gethostname(),
            'service.name':     self._name,
            'service.version':  __version__,
        })
        trace.set_tracer_provider(TracerProvider(resource = r))
        self.tracer = trace.get_tracer_provider()

        self.exporter = DatadogSpanExporter(
            service   = self._name,
            agent_url = 'http://localhost:8126',
            version   = __version__,
            env       = 'dev',
        )
        self.tracer.add_span_processor(DatadogExportSpanProcessor(self.exporter))
        set_global_textmap(DatadogFormat())


        # setup client instrumentation
        GrpcInstrumentorClient().instrument(tracer = self.tracer)
        BotocoreInstrumentor().instrument(tracer_provider = self.tracer)
        BotoInstrumentor().instrument(tracer_provider = self.tracer)
    def test_unpatch(self):

        lamb = boto.awslambda.connect_to_region("us-east-2")

        BotoInstrumentor().uninstrument()

        # multiple calls
        lamb.list_functions()
        spans = self.memory_exporter.get_finished_spans()
        assert not spans, spans
示例#4
0
    def __init__(self, app, service='atlas-api', sqlalchemy_engine=None, datadog_agent=None,
                 span_callback=None, ignored_paths: List[str] = None, sql_service=None):
        self.app = app
        trace.set_tracer_provider(TracerProvider())
        self.tracer = trace.get_tracer(__name__)
        if datadog_agent:
            from ddtrace.internal.writer import AgentWriter
            from opentelemetry.exporter.datadog import DatadogExportSpanProcessor, \
                DatadogSpanExporter
            exporter = DatadogSpanExporter(agent_url=datadog_agent, service=service)
            exporter._agent_writer = AgentWriter(datadog_agent)
            span_processor = DatadogExportSpanProcessor(exporter)
            trace.get_tracer_provider().add_span_processor(span_processor)

        AtlasFastAPIInstrumentor.instrument_app(app, span_callback=span_callback,
                                                ignored_paths=ignored_paths)
        RequestsInstrumentor().instrument()
        BotocoreInstrumentor().instrument(tracer_provider=trace.get_tracer_provider())
        BotoInstrumentor().instrument(tracer_provider=trace.get_tracer_provider())
        RedisInstrumentor().instrument(tracer_provider=trace.get_tracer_provider())
        if sqlalchemy_engine:
            sqlalch_service_name = service if not sql_service else sql_service
            SQLAlchemyInstrumentor().instrument(engine=sqlalchemy_engine,
                                                service=sqlalch_service_name)
 def tearDown(self):
     BotoInstrumentor().uninstrument()
 def setUp(self):
     super().setUp()
     BotoInstrumentor().instrument()