package phoenix.datasource; import java.sql.SQLException; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.druid.filter.FilterChain; import com.alibaba.druid.filter.FilterEventAdapter; import com.alibaba.druid.proxy.jdbc.ConnectionProxy; import com.alibaba.druid.proxy.jdbc.PreparedStatementProxy; import com.alibaba.druid.proxy.jdbc.ResultSetProxy; import com.alibaba.druid.proxy.jdbc.StatementProxy; public class DruidMonitorFilter extends FilterEventAdapter { protected static Logger LOG = LoggerFactory.getLogger(DruidMonitorFilter.class); private String dbType; private String name; public DruidMonitorFilter() { } @Override public ConnectionProxy connection_connect(FilterChain chain, Properties info) throws SQLException { ConnectionProxy connection = null; if (this.dbType == null) { this.dbType = chain.getDataSource().getDbType(); } if (this.name == null) { this.name = chain.getDataSource().getName(); } long start = System.currentTimeMillis(); try { connection = chain.connection_connect(info); long span = System.currentTimeMillis() - start; if (LOG.isInfoEnabled()) { LOG.info("Create " + dbType + "-" + name + " Connect :" + span); } } catch (SQLException ex) { if (LOG.isInfoEnabled()) { LOG.info("Create " + dbType + "-" + name + " Connect Error " + ex.getMessage() + " :" + 1); } throw ex; } return connection; } @Override protected void statementCreateAfter(StatementProxy statement) { if (LOG.isInfoEnabled()) { LOG.info("Create Statement : " + statement.getBatchSql() != null ? statement.getBatchSql() : ""); } super.statementCreateAfter(statement); } @Override protected void statementPrepareAfter(PreparedStatementProxy statement) { if (LOG.isInfoEnabled()) { LOG.info("Create Statement : " + statement.getSql()); } super.statementPrepareAfter(statement); } @Override public void resultSet_close(FilterChain chain, ResultSetProxy resultSet) throws SQLException { double span = ((System.nanoTime() - resultSet.getConstructNano()) / 1000000.0d); if (LOG.isInfoEnabled()) { LOG.info("Resultset : " + resultSet.getFetchRowCount() + " cost : " + span); } chain.resultSet_close(resultSet); } @Override protected void statementExecuteBefore(StatementProxy statement, String sql) { statement.setLastExecuteStartNano(); super.statementExecuteBefore(statement, sql); } @Override protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) { statement.setLastExecuteTimeNano(); double span = statement.getLastExecuteTimeNano() / 1000000.0d; if (LOG.isInfoEnabled()) { System.out.println(statement.getRawObject().getClass().getSimpleName()); LOG.info("Statement : " + statement.getLastExecuteType() + " cost : " + span + " sql : " + sql + " name : " + name); } super.statementExecuteAfter(statement, sql, result); } }