/*
* NOTE: This copyright does *not* cover user programs that use HQ
* program services by normal system calls through the application
* program interfaces provided as part of the Hyperic Plug-in Development
* Kit or the Hyperic Client Development Kit - this is merely considered
* normal use of the program, and does *not* fall under the heading of
* "derived work".
*
* Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
* This file is part of HQ.
*
* HQ is free software; you can redistribute it and/or modify
* it under the terms version 2 of the GNU General Public License as
* published by the Free Software Foundation. This program is distributed
* in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
package org.hyperic.hq.plugin.websphere.jmx;
import com.ibm.websphere.management.AdminClient;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import javax.management.ObjectName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hyperic.hq.plugin.websphere.WebsphereProductPlugin;
import org.hyperic.hq.product.LogFileTrackPlugin;
public class AppServerQuery extends WebSphereQuery {
private static final Log log = LogFactory.getLog(AppServerQuery.class.getName());
public static final String MBEAN_TYPE = "Server";
private static final String ATTR_VERSION = "version";
private static final String ATTR_JAVA_VERSION = "javaVersion";
private static final String ATTR_JAVA_VENDOR = "javaVendor";
private static final String[] VM_ATTRS = {
ATTR_JAVA_VERSION, ATTR_JAVA_VENDOR
};
String installpath;
@Override
public String getMBeanType() {
return MBEAN_TYPE;
}
//everything but ThreadPool has Server=...
@Override
public String getMBeanAlias() {
return "process";
}
@Override
public String getResourceName() {
return getResourceType();
}
@Override
public String getResourceType() {
return WebsphereProductPlugin.SERVER_NAME
+ " " + getVersion();
}
@Override
public String getPropertyName() {
return WebsphereProductPlugin.PROP_SERVER_NAME;
}
@Override
public Properties getMetricProperties() {
final String addr = "<address xmi:id=\"EndPoint_1\"";
String name = getName();
String node = getParent().getName();
String cell = getParent().getCell();
File serverXML = new File(
this.installpath + "/config/cells/"
+ cell + "/nodes/" + node
+ "/servers/" + name + "/server.xml");
String port = "9080"; //default
log.debug("[getMetricProperties] xml=" + serverXML);
String line;
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(serverXML));
while ((line = in.readLine()) != null) {
if (line.indexOf(addr) != -1) {
int ix = line.indexOf("port=\"");
if (ix != -1) {
line = line.substring(ix + 6);
ix = line.indexOf("\"");
port = line.substring(0, ix);
}
break;
}
}
} catch (FileNotFoundException e) {
} catch (IOException e) {
} finally {
if (in != null) {
try {
in.close();
} catch (IOException ioe) {
}
}
}
Properties props = super.getMetricProperties();
props.setProperty(WebsphereProductPlugin.PROP_SERVER_PORT,
port);
String[] logs = {
"trace.log", "SystemErr.log", "SystemOut.log"
};
StringBuffer files = new StringBuffer();
for (int i = 0; i < logs.length; i++) {
String logPath =
"logs" + File.separator + getName()
+ File.separator + logs[i];
if (!new File(this.installpath, logPath).exists()) {
continue;
}
files.append(logPath);
if (i + 1 != logs.length) {
files.append(',');
}
}
props.setProperty(LogFileTrackPlugin.PROP_FILES_SERVER,
files.toString());
return props;
}
@Override
public WebSphereQuery cloneInstance() {
WebSphereQuery query = super.cloneInstance();
((AppServerQuery) query).installpath = this.installpath;
return query;
}
@Override
public boolean getAttributes(AdminClient mServer, ObjectName name) {
String version = name.getKeyProperty(ATTR_VERSION);
if (version != null) {
this.attrs.put(ATTR_VERSION, version);
}
try {
String[] vms =
(String[]) mServer.getAttribute(name, "javaVMs");
if (vms != null) {
getAttributes(mServer,
new ObjectName(vms[0]),
VM_ATTRS);
}
//in the try block to catch SecurityException
return super.getAttributes(mServer, name);
} catch (Exception e) {
log.error("Error getting JVM attributes for '"
+ name + "': "
+ e.getMessage(), e);
return false;
}
}
@Override
public String[] getAttributeNames() {
return new String[]{
"pid", "cellName",};
}
}