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)
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
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()