/* * Copyright 2017-2020 The OpenTracing Authors * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package io.opentracing.contrib.grpc; import io.grpc.ServerInterceptor; import io.grpc.ServerInterceptors; import io.grpc.stub.StreamObserver; import io.grpc.util.MutableHandlerRegistry; import io.opentracing.contrib.grpc.gen.GreeterGrpc; import io.opentracing.contrib.grpc.gen.HelloReply; import io.opentracing.contrib.grpc.gen.HelloRequest; import io.opentracing.util.GlobalTracer; class TracedService { static void addGeeterService(MutableHandlerRegistry registry) { registry.addService(new GreeterImpl()); } static void addGeeterService(MutableHandlerRegistry registry, ServerInterceptor... interceptors) { registry.addService(ServerInterceptors.intercept(new GreeterImpl(), interceptors)); } private static class GreeterImpl extends GreeterGrpc.GreeterImplBase { @Override public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) { // verify that there is an active span in case of using GlobalTracer: if (GlobalTracer.isRegistered() && GlobalTracer.get().activeSpan() == null) { throw new RuntimeException("no active span"); } HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build(); responseObserver.onNext(reply); responseObserver.onCompleted(); } } }