Finally I managed to obtain the stats following these addresses https://www.ibm.com/developerworks/websphere/techjournal/1112_guillemenot/1112_guillemenot.html?ca=drs-
Basically I've created a function to get the statistics about JDBC connection pools I need:
def getStats(server,driver,datasource):
perfStr = AdminControl.queryNames( 'type=Perf,process=' + server + ',*')
if perfStr == "":
print "Sorry I can't find server " + server
sys.exit(1)
perfObj = AdminControl.makeObjectName( perfStr)
srvrStr = AdminControl.queryNames( 'type=Server,process=' + server + ',*')
srvrObj = AdminControl.makeObjectName( srvrStr)
stats = AdminControl.invoke_jmx( perfObj, 'getStatsObject', [ srvrObj, java.lang.Boolean('true')], ['javax.management.ObjectName', 'java.lang.Boolean'])
try:
waitingThreads=stats.getStats('connectionPoolModule').getStats(driver).getStats(datasource).getStatistic('WaitingThreadCount').getCurrent()
poolSize=stats.getStats('connectionPoolModule').getStats(driver).getStats(datasource).getStatistic('PoolSize').getCurrent()
freePoolSize=stats.getStats('connectionPoolModule').getStats(driver).getStats(datasource).getStatistic('FreePoolSize').getCurrent()
percentUsed=stats.getStats('connectionPoolModule').getStats(driver).getStats(datasource).getStatistic('PercentUsed').getCurrent()
print "WaitingThreadCount=" + str(waitingThreads) + ", PoolSize=" + str(poolSize) + ", FreePoolSize=" + str(freePoolSize) + ", PercentUsed=" + str(percentUsed)
except:
print "Ooops, something went wrong :("
raise
And in order to identify server, driver and datasource variables I also added a function to list them:
def listServers():
"""List the servers Database Connection Pools"""
servers = AdminControl.queryNames( 'type=Perf,*').split("\n")
for i in range(0, len(servers)):
srvName = servers[i].split(",")[1].split("=")[1]
if srvName == "nodeagent":
continue
print "Server: " + srvName
perfStr = AdminControl.queryNames( 'type=Perf,process=' + srvName +',*')
perfObj = AdminControl.makeObjectName( perfStr)
srvrStr = AdminControl.queryNames( 'type=Server,process=' + srvName +',*')
srvrObj = AdminControl.makeObjectName( srvrStr)
stats = AdminControl.invoke_jmx( perfObj, 'getStatsObject', [ srvrObj, java.lang.Boolean('true')], ['javax.management.ObjectName', 'java.lang.Boolean'])
for driver in stats.getStats('connectionPoolModule').subCollections():
print "\tDriver Name: " + driver.getName()
for datasource in stats.getStats('connectionPoolModule').getStats(driver.getName()).subCollections():
print "\t\tDatasource: " + datasource.getName()
Which will output something like:
Server: APP_CLUSTER_APP01
Driver Name: Oracle JDBC Driver (XA)
Datasource: jdbc/AppEngine
Datasource: jdbc/AppEngineH
Server: APP_CLUSTER_APP02
Driver Name: Oracle JDBC Driver (XA)
Datasource: jdbc/AppEngine
Datasource: jdbc/AppEngineH
Server: SOL_CLUSTER_SOL01
Driver Name: Oracle JDBC Driver (XA)
Datasource: jdbc/dict1ds
Datasource: jdbc/dict2ds
Datasource: jdbc/dict3ds
Server: SOL_CLUSTER_SOL02
Driver Name: Oracle JDBC Driver (XA)
Datasource: jdbc/dict1ds
Datasource: jdbc/dict2ds
Datasource: jdbc/dict3ds