Example #1
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 setUp(self):
     super().setUp()
     GrpcInstrumentorClient().instrument()
     self.server = create_test_server(25565)
     self.server.start()
     self.channel = grpc.insecure_channel("localhost:25565")
     self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel)
Example #3
0
 def setUp(self):
     super().setUp()
     GrpcInstrumentorClient().instrument()
     self.server = create_test_server(25565)
     self.server.start()
     # use a user defined interceptor along with the opentelemetry client interceptor
     interceptors = [Interceptor()]
     self.channel = grpc.insecure_channel("localhost:25565")
     self.channel = grpc.intercept_channel(self.channel, *interceptors)
     self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel)
 def getProductDetails(self, request, context):
     GrpcInstrumentorClient().instrument()
     channel = grpc.insecure_channel('localhost:50051')
     image_service = ImageServiceStub(channel)
     image_id = ProductImageId()
     image_id.value = "1"
     retVal = image_service.getImageDetails(image_id)
     product_details = ProductDetails()
     product_details.name = "test"
     product_details.imageUrl = retVal.imageUrl
     return product_details
Example #5
0
 def tearDown(self):
     super().tearDown()
     GrpcInstrumentorClient().uninstrument()
     self.server.stop(None)
     self.channel.close()
 def tearDown(self):
     super().tearDown()
     GrpcInstrumentorClient().uninstrument()
     self.memory_metrics_exporter.clear()
     self.server.stop(None)
     self.channel.close()
from logger import getJSONLogger
logger = getJSONLogger('recommendationservice-server')

zipkin_exporter = zipkin.ZipkinSpanExporter(
    service_name="recommendationservice",
    url=os.environ['SIGNALFX_ENDPOINT_URL']
)
span_processor = BatchExportSpanProcessor(zipkin_exporter)

propagators.set_global_textmap(FixedB3Format())
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(span_processor)
tracer = trace.get_tracer(__name__)

instrumentor = GrpcInstrumentorClient()
instrumentor.instrument()
grpc_server_instrumentor = GrpcInstrumentorServer()
grpc_server_instrumentor.instrument()


class RecommendationService(demo_pb2_grpc.RecommendationServiceServicer):
    def ListRecommendations(self, request, context):
        max_responses = 5
        # fetch list of products from product catalog stub
        cat_response = product_catalog_stub.ListProducts(demo_pb2.Empty())
        product_ids = [x.id for x in cat_response.products]
        filtered_products = list(set(product_ids)-set(request.product_ids))
        num_products = len(filtered_products)
        num_return = min(max_responses, num_products)
        # sample list of indicies to return