![[i5/OS]](../../iseries.gif)
以下のリストで、WebSphere Application Server バー
ジョン 4.0 の Performance Monitoring Infrastructure (PMI) クライアント・コードの例を紹介します。
/**
* This is a sample code to show how to use PmiClient to collect PMI data.
* You will need to use adminconsole to set instrumentation level (a level other
* than NONE) first.
*
* <p>
* End-to-end code path in 4.0:
* PmiTester -> PmiClient -> AdminServer -> appServer
*/
package com.ibm.websphere.pmi;
import com.ibm.websphere.pmi.*;
import com.ibm.websphere.pmi.server.*;
import com.ibm.websphere.pmi.client.*;
import com.ibm.ws.pmi.server.*;
import com.ibm.ws.pmi.perfServer.*;
import com.ibm.ws.pmi.server.modules.*;
import com.ibm.ws.pmi.wire.*;
import java.util.ArrayList;
/**
* Sample code to use PmiClient API (old API in 4.0) and get CpdData/CpdCollection objects.
*
*/
public class PmiTester implements PmiConstants {
/** a test driver:
* @param args[0] - node name
* @param args[1] - port number, optional, default is 2809
* @param args[2] - connector type, default is RMI
* @param args[3] - verion (AE, AEs, WAS50), default is WAS50
*
*/
public static void main(String[] args) {
String hostName = null;
String portNumber = "2809";
String connectorType = "RMI";
String version = "WAS50";
if (args.length < 1) {
System.out.println("Usage: <host> [<port>] [<connectorType>]
[<version>]");
return;
}
if(args.length >= 1)
hostName = args[0];
if(args.length >= 2)
portNumber = args[1];
if (args.length >=3)
connectorType = args[2];
if (args.length >=4)
version = args[3];
try {
PmiClient pmiClnt = new PmiClient(hostName, portNumber, version, false, connectorType);
// uncomment it if you want debug info
//pmiClnt.setDebug(true);
// get all the node PerfDescriptor in the domain
PerfDescriptor[] nodePds = pmiClnt.listNodes();
if(nodePds == null) {
System.out.println("no nodes");
return;
}
// get the first node
String nodeName = nodePds[0].getName();
System.out.println("after listNodes:" + nodeName);
//list all the servers on the node
PerfDescriptor[] serverPds = pmiClnt.listServers(nodePds[0].getName());
if (serverPds == null || serverPds.length == 0) {
System.out.println("NO app server in node");
return;
}
// print out all the servers on that node
for(int j=0; j<serverPds.length; j++) {
System.out.println("server " + j + ": " + serverPds[j].getName());
}
for(int j=0; j<serverPds.length; j++) {
System.out.println("server " + j + ": " + serverPds[j].getName());
// Option: you can call createPerfLevelSpec and then setInstrumentationLevel to set the level
// for each server if you want. For example, to set all the modules to be LEVEL_HIGH for the server j,
// uncomment the following. // PerfLevelSpec[] plds = new PerfLevelSpec[1];
// plds[0] = pmiClnt.createPerfLevelSpec(null, LEVEL_HIGH);
// pmiClnt.setInstrumentationLevel(serverPds[j].getNodeName(), serverPds[j].getServerName(), plds, true);
// First, list the PerfDescriptor in the server
PerfDescriptor[] myPds = pmiClnt.listMembers(serverPds[j]);
// check returned PerfDescriptor
if(myPds == null) {
System.out.println("null from listMembers");
continue;
}
// you can add the pds in which you are interested to PerfDescriptorList
PerfDescriptorList pdList = new PerfDescriptorList();
for(int i=0; i<myPds.length; i++) {
// Option 1: you can recursively call listMembers for each myPds
// and find the one you are interested. You can call listMembers
// until individual data level and after that level you will null from listMembers.
// e.g., PerfDescriptor[] nextPds = pmiClnt.listMembers(myPds[i]);
// Option 2: you can filter these pds before adding to pdList
System.out.println("add to pdList: " + myPds[i].getModuleName());
pdList.addDescriptor(myPds[i]);
if( i % 2 == 0)
pmiClnt.add(myPds[i]);
}
// call gets method to get the CpdCollection[] corresponding to pdList
CpdCollection[] cpdCols = pmiClnt.gets(pdList, true);
if(cpdCols == null) {
// check error
if(pmiClnt.getErrorCode() >0)
System.out.println(pmiClnt.getErrorMessage());
continue;
}
for(int i=0; i<cpdCols.length; i++) {
// simple print them
//System.out.println(cpdCols[i].toString());
// Or call processCpdCollection to get each data
processCpdCollection(cpdCols[i], "");
}
// Or call gets() method to add the CpdCollection[] for whatever there by calling pmiClnt.add().
System.out.println("¥n¥n¥n ---- get data using gets(true) ----- ");
cpdCols = pmiClnt.gets(true);
if(cpdCols == null) {
// check error
if(pmiClnt.getErrorCode() >0)
System.out.println(pmiClnt.getErrorMessage());
continue;
}
for(int i=0; i<cpdCols.length; i++) {
// simple print out the whole collection
System.out.println(cpdCols[i].toString());
// Option: refer processCpdCollection to get each data
}
}
}
catch(Exception ex) {
System.out.println("Exception calling CollectorAE");
ex.printStackTrace();
}
}
/**
* show the methods to retrieve individual data
*/
private static void processCpdCollection(CpdCollection cpdCol, String indent) {
CpdData[] dataList = cpdCol.dataMembers();
String myindent = indent;
System.out.println("¥n" + myindent + "--- CpdCollection " + cpdCol.getDescriptor().getName() + " ---");
myindent += " ";
for(int i=0; i<dataList.length; i++) {
if (dataList[i] == null)
continue;
// if you want to get static info like name, description, etc
PmiDataInfo dataInfo = dataList[i].getPmiDataInfo();
// call getName(), getDescription() on dataInfo;
CpdValue cpdVal = dataList[i].getValue();
if(cpdVal.getType() == TYPE_STAT) {
CpdStat cpdStat = (CpdStat)cpdVal;
double mean = cpdStat.mean(); double sumSquares = cpdStat.sumSquares();
int count = cpdStat.count();
double total = cpdStat.total();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=stat mean=" + mean);
// you can print more values like sumSquares, count,etc here
}
else if(cpdVal.getType() == TYPE_LOAD) {
CpdLoad cpdLoad = (CpdLoad)cpdVal;
long time = cpdLoad.getTime();
double mean = cpdLoad.mean();
double currentLevel = cpdLoad.getCurrentLevel();
double integral = cpdLoad.getIntegral();
double timeWeight = cpdLoad.getWeight();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=load mean=" + mean + " currentLevel=" + currentLevel);
// you can print more values like sumSquares, count,etc here
}
else if(cpdVal.getType() == TYPE_LONG) {
CpdValue cpdLong = (CpdValue)cpdVal;
long value = (long)cpdLong.getValue();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=long value=" + value);
}
else if(cpdVal.getType() == TYPE_DOUBLE) {
CpdValue cpdDouble = (CpdValue)cpdVal;
double value = cpdDouble.getValue();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=double value=" + value);
}
else if(cpdVal.getType() == TYPE_INT) {
CpdValue cpdInt = (CpdValue)cpdVal;
int value = (int)cpdInt.getValue();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=int value=" + value);
}
}
// recursively go through the subcollection
CpdCollection[] subCols = cpdCol.subcollections();
for(int i=0; i<subCols.length; i++) {
processCpdCollection(subCols[i], myindent);
}
}
/**
* show the methods to navigate CpdCollection
*/
private static void report(CpdCollection col) {
System.out.println("¥n¥n");
if(col==null) {
System.out.println("report: null CpdCollection");
return;
}
System.out.println("report - CpdCollection ");
printPD(col.getDescriptor());
CpdData[] dataMembers = col.dataMembers();
if (dataMembers != null) {
System.out.println("report CpdCollection: dataMembers is "
+ dataMembers.length);
for(int i=0; i<dataMembers.length; i++) {
CpdData data = dataMembers[i];
printPD(data.getDescriptor());
}
}
CpdCollection[] subCollections = col.subcollections();
if (subCollections != null) {
for(int i=0; i<subCollections.length; i++) {
report(subCollections[i]);
}
}
}
private static void printPD(PerfDescriptor pd) {
System.out.println(pd.getFullName());
}
}
![[z/OS]](../../ngzos.gif)
以下に、Performance Monitoring Infrastructure (PMI) クライアント・コード例のリストを示します。
/**
* This is a sample code to show how to use PmiClient to collect PMI data.
* You will need to use adminconsole to set instrumentation level (a level other
* than NONE) first.
*
* <p>
* End-to-end code path:
* PmiTester -> PmiClient -> AdminServer -> appServer
*/
package com.ibm.websphere.pmi;
import com.ibm.websphere.pmi.*;
import com.ibm.websphere.pmi.server.*;
import com.ibm.websphere.pmi.client.*;
import com.ibm.ws.pmi.server.*;
import com.ibm.ws.pmi.perfServer.*;
import com.ibm.ws.pmi.server.modules.*;
import com.ibm.ws.pmi.wire.*;
import java.util.ArrayList;
/**
* Sample code to use PmiClient API and get CpdData/CpdCollection objects.
*
*/
public class PmiTester implements PmiConstants {
/** a test driver:
* @param args[0] - node name
* @param args[1] - port number, optional, default is 2809
* @param args[2] - connector type, default is RMI
* @param args[3] - verion (AE, AEs, WAS50), default is WAS50
*
*/
public static void main(String[] args) {
String hostName = null;
String portNumber = "2809";
String connectorType = "RMI";
String version = "WAS50";
if (args.length < 1) {
System.out.println("Usage: <host> [<port>] [<connectorType>]
[<version>]");
return;
}
if(args.length >= 1)
hostName = args[0];
if(args.length >= 2)
portNumber = args[1];
if (args.length >=3)
connectorType = args[2];
if (args.length >=4)
version = args[3];
try {
PmiClient pmiClnt = new PmiClient(hostName, portNumber, version, false, connectorType);
// uncomment it if you want debug info
//pmiClnt.setDebug(true);
// get all the node PerfDescriptor in the domain
PerfDescriptor[] nodePds = pmiClnt.listNodes();
if(nodePds == null) {
System.out.println("no nodes");
return;
}
// get the first node
String nodeName = nodePds[0].getName();
System.out.println("after listNodes:" + nodeName);
//list all the servers on the node
PerfDescriptor[] serverPds = pmiClnt.listServers(nodePds[0].getName());
if (serverPds == null || serverPds.length == 0) {
System.out.println("NO app server in node");
return;
}
// print out all the servers on that node
for(int j=0; j<serverPds.length; j++) {
System.out.println("server " + j + ": " + serverPds[j].getName());
}
for(int j=0; j<serverPds.length; j++) {
System.out.println("server " + j + ": " + serverPds[j].getName());
// Option: you can call createPerfLevelSpec and then setInstrumentationLevel to set the level
// for each server if you want. For example, to set all the modules to be LEVEL_HIGH for the server j,
// uncomment the following. // PerfLevelSpec[] plds = new PerfLevelSpec[1];
// plds[0] = pmiClnt.createPerfLevelSpec(null, LEVEL_HIGH);
// pmiClnt.setInstrumentationLevel(serverPds[j].getNodeName(), serverPds[j].getServerName(), plds, true);
// First, list the PerfDescriptor in the server
PerfDescriptor[] myPds = pmiClnt.listMembers(serverPds[j]);
// check returned PerfDescriptor
if(myPds == null) {
System.out.println("null from listMembers");
continue;
}
// you can add the pds in which you are interested to PerfDescriptorList
PerfDescriptorList pdList = new PerfDescriptorList();
for(int i=0; i<myPds.length; i++) {
// Option 1: you can recursively call listMembers for each myPds
// and find the one you are interested. You can call listMembers
// until individual data level and after that level you will null from listMembers.
// e.g., PerfDescriptor[] nextPds = pmiClnt.listMembers(myPds[i]);
// Option 2: you can filter these pds before adding to pdList
System.out.println("add to pdList: " + myPds[i].getModuleName());
pdList.addDescriptor(myPds[i]);
if( i % 2 == 0)
pmiClnt.add(myPds[i]);
}
// call gets method to get the CpdCollection[] corresponding to pdList
CpdCollection[] cpdCols = pmiClnt.gets(pdList, true);
if(cpdCols == null) {
// check error
if(pmiClnt.getErrorCode() >0)
System.out.println(pmiClnt.getErrorMessage());
continue;
}
for(int i=0; i<cpdCols.length; i++) {
// simple print them
//System.out.println(cpdCols[i].toString());
// Or call processCpdCollection to get each data
processCpdCollection(cpdCols[i], "");
}
// Or call gets() method to add the CpdCollection[] for whatever there by calling pmiClnt.add().
System.out.println("¥n¥n¥n ---- get data using gets(true) ----- ");
cpdCols = pmiClnt.gets(true);
if(cpdCols == null) {
// check error
if(pmiClnt.getErrorCode() >0)
System.out.println(pmiClnt.getErrorMessage());
continue;
}
for(int i=0; i<cpdCols.length; i++) {
// simple print out the whole collection
System.out.println(cpdCols[i].toString());
// Option: refer processCpdCollection to get each data
}
}
}
catch(Exception ex) {
System.out.println("Exception calling CollectorAE");
ex.printStackTrace();
}
}
/**
* show the methods to retrieve individual data
*/
private static void processCpdCollection(CpdCollection cpdCol, String indent) {
CpdData[] dataList = cpdCol.dataMembers();
String myindent = indent;
System.out.println("¥n" + myindent + "--- CpdCollection " + cpdCol.getDescriptor().getName() + " ---");
myindent += " ";
for(int i=0; i<dataList.length; i++) {
if (dataList[i] == null)
continue;
// if you want to get static info like name, description, etc
PmiDataInfo dataInfo = dataList[i].getPmiDataInfo();
// call getName(), getDescription() on dataInfo;
CpdValue cpdVal = dataList[i].getValue();
if(cpdVal.getType() == TYPE_STAT) {
CpdStat cpdStat = (CpdStat)cpdVal;
double mean = cpdStat.mean(); double sumSquares = cpdStat.sumSquares();
int count = cpdStat.count();
double total = cpdStat.total();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=stat mean=" + mean);
// you can print more values like sumSquares, count,etc here
}
else if(cpdVal.getType() == TYPE_LOAD) {
CpdLoad cpdLoad = (CpdLoad)cpdVal;
long time = cpdLoad.getTime();
double mean = cpdLoad.mean();
double currentLevel = cpdLoad.getCurrentLevel();
double integral = cpdLoad.getIntegral();
double timeWeight = cpdLoad.getWeight();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=load mean=" + mean + " currentLevel=" + currentLevel);
// you can print more values like sumSquares, count,etc here
}
else if(cpdVal.getType() == TYPE_LONG) {
CpdValue cpdLong = (CpdValue)cpdVal;
long value = (long)cpdLong.getValue();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=long value=" + value);
}
else if(cpdVal.getType() == TYPE_DOUBLE) {
CpdValue cpdDouble = (CpdValue)cpdVal;
double value = cpdDouble.getValue();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=double value=" + value);
}
else if(cpdVal.getType() == TYPE_INT) {
CpdValue cpdInt = (CpdValue)cpdVal;
int value = (int)cpdInt.getValue();
System.out.println(myindent + "CpdData id=" + dataList[i].getId() + " type=int value=" + value);
}
}
// recursively go through the subcollection
CpdCollection[] subCols = cpdCol.subcollections();
for(int i=0; i<subCols.length; i++) {
processCpdCollection(subCols[i], myindent);
}
}
/**
* show the methods to navigate CpdCollection
*/
private static void report(CpdCollection col) {
System.out.println("¥n¥n");
if(col==null) {
System.out.println("report: null CpdCollection");
return;
}
System.out.println("report - CpdCollection ");
printPD(col.getDescriptor());
CpdData[] dataMembers = col.dataMembers();
if (dataMembers != null) {
System.out.println("report CpdCollection: dataMembers is "
+ dataMembers.length);
for(int i=0; i<dataMembers.length; i++) {
CpdData data = dataMembers[i];
printPD(data.getDescriptor());
}
}
CpdCollection[] subCollections = col.subcollections();
if (subCollections != null) {
for(int i=0; i<subCollections.length; i++) {
report(subCollections[i]);
}
}
}
private static void printPD(PerfDescriptor pd) {
System.out.println(pd.getFullName());
}
}