/*
* Copyright 2014 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.bootstrap.context;
import com.navercorp.pinpoint.common.trace.AnnotationKey;
import com.navercorp.pinpoint.common.trace.ServiceType;
/**
* @author emeroad
*/
public interface RecordableTrace {
void markBeforeTime();
long getBeforeTime();
void markAfterTime();
long getAfterTime();
TraceId getTraceId();
AsyncTraceId getAsyncTraceId();
boolean canSampled();
boolean isRoot();
short getServiceType();
void recordException(Throwable throwable);
void recordApi(MethodDescriptor methodDescriptor);
void recordApi(MethodDescriptor methodDescriptor, Object[] args);
void recordApi(MethodDescriptor methodDescriptor, Object args, int index);
void recordApi(MethodDescriptor methodDescriptor, Object[] args, int start, int end);
void recordApiCachedString(MethodDescriptor methodDescriptor, String args, int index);
ParsingResult recordSqlInfo(String sql);
void recordSqlParsingResult(ParsingResult parsingResult);
void recordSqlParsingResult(ParsingResult parsingResult, String bindValue);
void recordAttribute(AnnotationKey key, String value);
void recordAttribute(AnnotationKey key, int value);
void recordAttribute(AnnotationKey key, Object value);
void recordServiceType(ServiceType serviceType);
void recordRpcName(String rpc);
void recordDestinationId(String destinationId);
void recordEndPoint(String endPoint);
void recordRemoteAddress(String remoteAddress);
void recordNextSpanId(long spanId);
void recordParentApplication(String parentApplicationName, short parentApplicationType);
void recordLogging(boolean isLogging);
/**
*
* when WAS_A sends a request to WAS_B, WAS_A stores its own data through parameters sent by WAS_B.
* This data is needed to extract caller/callee relationship.
*
* @param host (we need to extract hostname from the request URL)
*
*
*/
void recordAcceptorHost(String host);
int getStackFrameId();
void recordAsyncId(int asyncId);
void recordNextAsyncId(int asyncId);
void recordAsyncSequence(short sequence);
boolean isAsync();
long getTraceStartTime();
}