in apm-sniffer/apm-sdk-plugin/lettuce-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/lettuce/v5/RedisChannelWriterInterceptor.java [51:95]
public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, MethodInterceptResult result) {
String peer = (String) objInst.getSkyWalkingDynamicField();
RedisCommand<?, ?, ?> spanCarrierCommand = getSpanCarrierCommand(allArguments[0]);
if (spanCarrierCommand == null) {
return;
}
EnhancedInstance enhancedCommand = (EnhancedInstance) spanCarrierCommand;
// command has been handle by another channel writer (cluster or sentinel case)
if (enhancedCommand.getSkyWalkingDynamicField() != null) {
//set peer in last channel writer (delegate)
if (peer != null) {
AbstractSpan span = (AbstractSpan) enhancedCommand.getSkyWalkingDynamicField();
span.setPeer(peer);
}
return;
}
String operationName = "Lettuce/";
String key = Constants.EMPTY_STRING;
String command = Constants.EMPTY_STRING;
if (allArguments[0] instanceof RedisCommand) {
RedisCommand<?, ?, ?> redisCommand = (RedisCommand<?, ?, ?>) allArguments[0];
command = redisCommand.getType().name();
operationName = operationName + command;
if (LettucePluginConfig.Plugin.Lettuce.TRACE_REDIS_PARAMETERS) {
key = getArgsKey(redisCommand);
}
} else if (allArguments[0] instanceof Collection) {
operationName = operationName + "BATCH_WRITE";
command = "BATCH_WRITE";
}
AbstractSpan span = ContextManager.createExitSpan(operationName, peer);
span.setComponent(ComponentsDefine.LETTUCE);
Tags.CACHE_TYPE.set(span, "Redis");
if (StringUtil.isNotEmpty(key)) {
Tags.CACHE_KEY.set(span, key);
}
Tags.CACHE_CMD.set(span, command);
parseOperation(command.toLowerCase()).ifPresent(op -> Tags.CACHE_OP.set(span, op));
SpanLayer.asCache(span);
span.prepareForAsync();
ContextManager.stopSpan();
enhancedCommand.setSkyWalkingDynamicField(span);
}