use of com.pamirs.pradar.interceptor.SpanRecord in project LinkAgent by shulieTech.
the class ConsumerTraceInterceptor method beforeTrace.
@Override
public SpanRecord beforeTrace(Advice advice) {
Object result = advice.getReturnObj();
KafkaConsumer kafkaConsumer = (KafkaConsumer) advice.getTarget();
if (ConsumerHolder.isWorkWithOtherFramework(kafkaConsumer)) {
return null;
}
ConsumerMetaData consumerMetaData = ConsumerHolder.getConsumerMetaData(kafkaConsumer);
ConsumerRecords consumerRecords = (ConsumerRecords) result;
if (consumerRecords.isEmpty()) {
lastPollHasRecordsThreadLocal.set(false);
return null;
}
Iterator iterator = consumerRecords.iterator();
Object next = iterator.next();
if (!(next instanceof ConsumerRecord)) {
return null;
}
lastPollHasRecordsThreadLocal.set(true);
ConsumerRecord consumerRecord = (ConsumerRecord) next;
SpanRecord spanRecord = new SpanRecord();
if (PradarSwitcher.isKafkaMessageHeadersEnabled()) {
HeaderProcessor headerProcessor = HeaderProvider.getHeaderProcessor(consumerRecord);
Map<String, String> ctx = headerProcessor.getHeaders(consumerRecord);
spanRecord.setContext(ctx);
}
String topic = consumerRecord.topic();
// TODO 原生这里的kafka服务器信息 和通过spring获取的服务器信息,集群节点顺序不一致
spanRecord.setRemoteIp(consumerMetaData.getBootstrapServers());
spanRecord.setRequest(consumerRecords.count());
spanRecord.setService(consumerRecord.topic());
boolean clusterTestPrefix = Pradar.isClusterTestPrefix(topic);
spanRecord.setMethod(clusterTestPrefix ? consumerMetaData.getPtGroupId() : consumerMetaData.getGroupId());
return spanRecord;
}
use of com.pamirs.pradar.interceptor.SpanRecord in project LinkAgent by shulieTech.
the class ConsumerTraceInterceptor method exceptionTrace.
@Override
public SpanRecord exceptionTrace(Advice advice) {
if (ConsumerHolder.isWorkWithOtherFramework((Consumer) advice.getTarget())) {
return null;
}
Throwable throwable = advice.getThrowable();
SpanRecord spanRecord = new SpanRecord();
spanRecord.setRequest("poll");
spanRecord.setResponse(throwable);
spanRecord.setResultCode(ResultCode.INVOKE_RESULT_FAILED);
return spanRecord;
}
use of com.pamirs.pradar.interceptor.SpanRecord in project LinkAgent by shulieTech.
the class ConsumerTraceInterceptor method afterTrace.
@Override
public SpanRecord afterTrace(Advice advice) {
if (ConsumerHolder.isWorkWithOtherFramework((Consumer) advice.getTarget())) {
return null;
}
Boolean lastPollHasRecords = lastPollHasRecordsThreadLocal.get();
if (lastPollHasRecords == null || !lastPollHasRecords) {
return null;
}
SpanRecord spanRecord = new SpanRecord();
spanRecord.setResponse("next poll");
spanRecord.setResultCode(ResultCode.INVOKE_RESULT_SUCCESS);
return spanRecord;
}
use of com.pamirs.pradar.interceptor.SpanRecord in project LinkAgent by shulieTech.
the class ConsumerMultiRecordEntryPointInterceptor method beforeTrace.
@Override
public SpanRecord beforeTrace(Advice advice) {
Object[] args = advice.getParameterArray();
if (args == null || args.length == 0) {
return null;
}
if (!(args[0] instanceof List)) {
return null;
}
List<ConsumerRecord> list = (List<ConsumerRecord>) args[0];
if (list.isEmpty()) {
return null;
}
Object consumer = advice.getParameterArray()[2];
if (consumer instanceof Consumer && consumer.getClass().getName().equals("brave.kafka.clients.TracingConsumer")) {
consumer = Reflect.on(consumer).get("delegate");
}
ConsumerRecord consumerRecord = list.get(0);
String group = null;
String remoteAddress = null;
if (args.length >= 3) {
group = manager.getDynamicField(consumer, KafkaConstants.DYNAMIC_FIELD_GROUP);
remoteAddress = KafkaUtils.getRemoteAddress(consumer, manager);
}
SpanRecord spanRecord = new SpanRecord();
spanRecord.setRemoteIp(remoteAddress);
if (PradarSwitcher.isKafkaMessageHeadersEnabled()) {
HeaderProcessor headerProcessor = HeaderProvider.getHeaderProcessor(consumerRecord);
Map<String, String> ctx = headerProcessor.getHeaders(consumerRecord);
spanRecord.setContext(ctx);
}
spanRecord.setRequest(consumerRecord);
spanRecord.setService(consumerRecord.topic());
spanRecord.setMethod(group == null ? "" : group);
spanRecord.setRemoteIp(remoteAddress);
spanRecord.setCallbackMsg((System.currentTimeMillis() - consumerRecord.timestamp()) + "");
return spanRecord;
}
use of com.pamirs.pradar.interceptor.SpanRecord in project LinkAgent by shulieTech.
the class ConsumerMultiRecordEntryPointInterceptor method afterTrace.
@Override
public SpanRecord afterTrace(Advice advice) {
Object[] args = advice.getParameterArray();
if (args == null || args.length == 0) {
return null;
}
if (!(args[0] instanceof List)) {
return null;
}
List<ConsumerRecord> list = (List<ConsumerRecord>) args[0];
if (list.isEmpty()) {
return null;
}
ConsumerRecord consumerRecord = list.get(0);
SpanRecord spanRecord = new SpanRecord();
spanRecord.setRequest(consumerRecord);
spanRecord.setResponse(advice.getReturnObj());
return spanRecord;
}
Aggregations