package com.knowgate.jdc;
import java.util.ArrayList;
import java.util.Date;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import com.knowgate.debug.DebugFile;
/**
* @author Sergio Montoro Ten
* @version 5.5
*/
public class JDCActivityInfo {
private JDCProcessInfo[] aProcessInfo = null;
private JDCLockConflict[] aLocksInfo = null;
private void pgSqlActivity(Connection oConn) throws SQLException {
Statement oStmt;
ResultSet oRSet;
String sSlct;
if (DebugFile.trace) {
DebugFile.writeln("Begin JDCActivityInfo.pgSqlActivity([Connection])");
DebugFile.incIdent();
}
ArrayList<JDCProcessInfo> aPinfo = new ArrayList<JDCProcessInfo>();
oStmt = oConn.createStatement();
sSlct = "SELECT datid,datname,procpid,usesysid,usename,current_query,query_start FROM pg_stat_activity";
oRSet = oStmt.executeQuery(sSlct+" WHERE current_query NOT LIKE '"+sSlct+"%'");
while (oRSet.next()) {
Date oDt;
Timestamp oTs = oRSet.getTimestamp(7);
if (oRSet.wasNull() || oTs==null)
oDt = null;
else
oDt = new Date(oTs.getTime());
aPinfo.add (new JDCProcessInfo(oRSet.getString(1),oRSet.getString(2),
oRSet.getString(3),oRSet.getString(4),
oRSet.getString(5),oRSet.getString(6), oDt));
} // wend
oRSet.close();
oRSet = null;
oStmt.close();
oStmt=null;
final int nProcs = aPinfo.size();
if (nProcs>0) {
aProcessInfo = new JDCProcessInfo[nProcs];
aProcessInfo = aPinfo.toArray(aProcessInfo);
} // fi
ArrayList<JDCLockConflict> aLconfl = new ArrayList<JDCLockConflict>();
oStmt = oConn.createStatement();
oRSet = null;
try {
oRSet = oStmt.executeQuery("SELECT pid,waitingonpid,query,waitingonquery FROM v_querylockwait");
while (oRSet.next()) {
aLconfl.add (new JDCLockConflict(oRSet.getInt(1),oRSet.getInt(2),
oRSet.getString(3),oRSet.getString(4)));
} // wend
} finally {
if (null!=oRSet) oRSet.close();
if (null!=oStmt) oStmt.close();
}
final int nLocks = aLconfl.size();
if (nLocks>0) {
aLocksInfo = new JDCLockConflict[nLocks];
aLocksInfo = aLconfl.toArray(aLocksInfo);
} // fi
if (DebugFile.trace) {
DebugFile.decIdent();
DebugFile.writeln("End JDCActivityInfo.pgSqlActivity([Connection])");
}
} // pgSqlActivity
public JDCActivityInfo(JDCConnection oConn) throws SQLException {
if (oConn.getDataBaseProduct()==JDCConnection.DBMS_POSTGRESQL) {
pgSqlActivity(oConn);
} // fi
}
public JDCActivityInfo(JDCConnectionPool oPool)
throws SQLException,ClassNotFoundException,NullPointerException {
JDCConnection oConn = null;
if (null==oPool)
throw new NullPointerException("JDCActivityInfo() JDCConnectionPool parameter cannot be null");
try {
oConn = oPool.getConnection("activity_info");
if (oConn.getDataBaseProduct()==JDCConnection.DBMS_POSTGRESQL) {
pgSqlActivity(oConn);
} // fi
oConn.close("activity_info");
oConn=null;
} finally {
try { if (oConn!=null) oConn.close("activity_info"); } catch (Exception ignore) {}
}
}
public JDCProcessInfo[] processesInfo() {
return aProcessInfo;
}
public JDCLockConflict[] lockConflictsInfo() {
return aLocksInfo;
}
}