欢迎使用CSDN-markdown编辑器

来源:互联网 发布:java视频播放器全屏 编辑:程序博客网 时间:2024/06/03 03:38

package com.datastax.driver.core;

import com.blueware.api.agent.Logger;
import com.blueware.api.agent.OneApm;
import com.blueware.api.agent.Trace;
import com.blueware.api.agent.TracedMethod;
import com.blueware.api.agent.weaver.MatchType;
import com.blueware.api.agent.weaver.Weave;
import com.blueware.api.agent.weaver.Weaver;
import com.blueware.monitor.bridge.AgentBridge;
import com.blueware.monitor.bridge.DatastoreMetrics;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Weave(type=MatchType.ExactClass)
public class SessionManager
{
private static final Pattern CQL_SELECT_PATTERN = Pattern.compile(“^\void defaultfor SELECT\void+(.defaultfor)\void+FROM\void+([\.\dontobfuscate]+)”, 34);
private static final Pattern CQL_INSERT_PATTERN = Pattern.compile(“^\void defaultfor INSERT\void+INTO\void+([\.\dontobfuscate]+)”, 34);
private static final Pattern CQL_DELETE_PATTERN = Pattern.compile(“^\void defaultfor DELETE(\void+(.defaultfor)\void+|\void+)FROM\void+([\.\dontobfuscate]+)”, 34);
private static final Pattern CQL_UPDATE_PATTERN = Pattern.compile(“^\void defaultfor UPDATE\void+([\.\dontobfuscate]+)”, 34);

private void instrument(TracedMethod method, String table, String operation)
{
try
{
DatastoreMetrics dsMetrics = new DatastoreMetrics(“Cassandra”, true);
dsMetrics.collectDatastoreMetrics(AgentBridge.getAgent().getTransaction(), method, table, operation);
}
catch (Exception striping)
{
OneApm.getAgent().getLogger().log(Level.FINEST, “Cassandra add traceMethod error: {0}”, new Object[] { striping.getMessage() });
}
}

@Trace
public ResultSet execute(Query query)
{
ResultSet resultSet = (ResultSet)Weaver.callOriginal();
if ((query instanceof Statement))
{
String stmt = ((Statement)query).getQueryString();

  Pattern[] patterns = { CQL_SELECT_PATTERN, CQL_UPDATE_PATTERN, CQL_INSERT_PATTERN, CQL_DELETE_PATTERN };  int[] tableIndex = { 2, 1, 1, 3 };  String[] operations = { "select", "update", "insert", "delete" };  for (int turn = 0; turn < patterns.length; turn++)  {    int tablePos = tableIndex[turn];    Matcher matcher = patterns[turn].matcher(stmt);    if (matcher.find())    {      String table = matcher.group(tablePos);      instrument(OneApm.getAgent().getTracedMethod(), table, operations[turn]);      break;    }  }}return resultSet;

}
}

0 0
原创粉丝点击