/* * Copyright 2017 NAVER Corp. * * 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 com.navercorp.pinpoint.profiler.context.recorder; import com.navercorp.pinpoint.profiler.context.Annotation; import com.navercorp.pinpoint.profiler.context.DefaultTrace; import com.navercorp.pinpoint.profiler.context.Span; import com.navercorp.pinpoint.profiler.metadata.SqlMetaDataService; import com.navercorp.pinpoint.profiler.metadata.StringMetaDataService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.navercorp.pinpoint.bootstrap.context.SpanRecorder; import com.navercorp.pinpoint.common.trace.LoggingInfo; import com.navercorp.pinpoint.common.trace.ServiceType; /** * * @author jaehong.kim * */ public class DefaultSpanRecorder extends AbstractRecorder implements SpanRecorder { private final Logger logger = LoggerFactory.getLogger(DefaultTrace.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); private final Span span; private final boolean isRoot; private final boolean sampling; public DefaultSpanRecorder(final Span span, final boolean isRoot, final boolean sampling, final StringMetaDataService stringMetaDataService, SqlMetaDataService sqlMetaDataService) { super(stringMetaDataService, sqlMetaDataService); this.span = span; this.isRoot = isRoot; this.sampling = sampling; } public Span getSpan() { return span; } @Override public void recordStartTime(long startTime) { span.setStartTime(startTime); } @Override void setExceptionInfo(int exceptionClassId, String exceptionMessage) { setExceptionInfo(true, exceptionClassId, exceptionMessage); } @Override void setExceptionInfo(boolean markError, int exceptionClassId, String exceptionMessage) { span.setExceptionInfo(exceptionClassId, exceptionMessage); if (markError) { if (!span.isSetErrCode()) { span.setErrCode(1); } } } @Override public void recordApiId(int apiId) { setApiId0(apiId); } void setApiId0(final int apiId) { span.setApiId(apiId); } @Override void addAnnotation(Annotation annotation) { span.addAnnotation(annotation); } @Override public void recordServiceType(ServiceType serviceType) { span.setServiceType(serviceType.getCode()); } @Override public void recordRpcName(String rpc) { span.setRpc(rpc); } @Override public void recordRemoteAddress(String remoteAddress) { span.setRemoteAddr(remoteAddress); } @Override public void recordEndPoint(String endPoint) { span.setEndPoint(endPoint); } @Override public void recordParentApplication(String parentApplicationName, short parentApplicationType) { span.setParentApplicationName(parentApplicationName); span.setParentApplicationType(parentApplicationType); if (isDebug) { logger.debug("ParentApplicationName marked. parentApplicationName={}", parentApplicationName); } } @Override public void recordAcceptorHost(String host) { span.setAcceptorHost(host); // me if (isDebug) { logger.debug("Acceptor host received. host={}", host); } } @Override public boolean canSampled() { return sampling; } @Override public boolean isRoot() { return isRoot; } @Override public void recordLogging(LoggingInfo loggingInfo) { if (!span.isSetLoggingTransactionInfo()) { span.setLoggingTransactionInfo(loggingInfo.getCode()); } } @Override public void recordTime(boolean time) { span.setTimeRecording(time); if (time) { if(!span.isSetStartTime()) { span.markBeforeTime(); } } else { span.setElapsed(0); span.setElapsedIsSet(false); span.setStartTime(0); span.setStartTimeIsSet(false); } } @Override public Object attachFrameObject(Object frameObject) { return span.attachFrameObject(frameObject); } @Override public Object getFrameObject() { return span.getFrameObject(); } @Override public Object detachFrameObject() { return span.detachFrameObject(); } }