All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bdware.doip.cluster.client.TraceableDoaClusterClient Maven / Gradle / Ivy

The newest version!
package org.bdware.doip.cluster.client;

import com.google.gson.JsonElement;
import io.opentracing.Span;
import org.bdware.doip.cluster.Tracing;
import org.bdware.doip.codec.doipMessage.DoipMessage;
import org.bdware.doip.codec.doipMessage.DoipMessageFactory;
import org.bdware.doip.codec.doipMessage.DoipResponseCode;
import org.bdware.doip.endpoint.client.DoipMessageCallback;

import java.util.Map;

public class TraceableDoaClusterClient extends DoaClusterClient {
//    static Logger LOGGER = LogManager.getLogger(TraceableDoaClusterClient.class);

    public TraceableDoaClusterClient(DOAConfig config) {
        super(config);
        if (config.getExtraConfig().has("serviceName"))
            Tracing.setServiceName(config.getExtraConfig().get("serviceName").getAsString());
    }

    public DoipMessage wrapSpanWithParent(DoipMessage newMessage, DoipMessage originMsg) {
        return wrapSpanWithParent(newMessage, originMsg, "default");
    }

    public DoipMessage wrapSpanWithParent(DoipMessage newMessage, DoipMessage originMsg, String operationName) {
        Span span = Tracing.startServerSpan(originMsg, operationName);
        DoipMessage ret = newMessage.clone();
        putDoipReqToSpan(newMessage, span);
        Tracing.injectSpanContext(ret, span);
        ret.header.parameters.attributes.addProperty(Tracing.IS_SPANNED, true);
        return ret;
    }

//    public SpannableDoipMessage createSpan(DoipMessage doipMessage) {
//        SpannableDoipMessage ret = new SpannableDoipMessage(null, null);
//        ret.header = doipMessage.header;
//        ret.body = doipMessage.body;
//        ret.credential = doipMessage.credential;
//        ret.span = tracer.buildSpan(doipMessage.header.parameters.id).start();
//        putDoipReqToSpan(doipMessage, ret.span);
//        return ret;
//    }

    private void putDoipReqToSpan(DoipMessage doipMessage, Span span) {
        if (doipMessage == null || span == null) {
            return;
        }
        span.setTag("doipMessage_doid", doipMessage.header.parameters.id);
        span.setTag("doipMessage_opCode", doipMessage.header.parameters.operation);
        if (doipMessage.header.parameters.attributes != null) {
            for (Map.Entry entry : doipMessage.header.parameters.attributes.entrySet()) {
                span.setTag(entry.getKey(), entry.getValue().getAsString());
            }
        }
    }

    @Override
    public void sendMessage(String targetDO, DoipMessage doipMessage, DoipMessageCallback cb, boolean needFlowControl) {
        try {
//            SpannableDoipMessage wrapMsg;
//            if (doipMessage instanceof SpannableDoipMessage) {
//                wrapMsg = (SpannableDoipMessage) doipMessage;
//            } else {
//                wrapMsg = createSpan(doipMessage);
//            }
            if (doipMessage.header.parameters.attributes == null
                    || !doipMessage.header.parameters.attributes.has(Tracing.IS_SPANNED)) {
                Tracing.startClientSpan(doipMessage);
            }
            Span span = Tracing.activeSpan();
            super.sendMessage(targetDO, doipMessage, new DoipMessageCallback() {
                @Override
                public void onResult(DoipMessage msg) {
                    putDoipRespToSpan(msg, span);
                    Tracing.finish(span);
                    cb.onResult(msg);
                }
            }, needFlowControl);
        } catch (Exception e) {
            e.printStackTrace();
            DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder();
            builder.createResponse(DoipResponseCode.UnKnownError, doipMessage);
            cb.onResult(builder.create());
        }
    }

    private void putDoipRespToSpan(DoipMessage doipMessage, Span span) {
        if (doipMessage == null || span == null) {
            return;
        }
        try {
            span.setTag("doipMessage_response_code", doipMessage.header.parameters.response.getName());
        } catch (Exception ignored) {
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy