/*
* JBoss, Home of Professional Open Source.
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership. Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*/
package org.teiid.rhq.admin;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.naming.NamingException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedOperation;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.plugins.ManagedObjectImpl;
import org.jboss.metatype.api.types.MetaType;
import org.jboss.metatype.api.values.CollectionValueSupport;
import org.jboss.metatype.api.values.CompositeValue;
import org.jboss.metatype.api.values.CompositeValueSupport;
import org.jboss.metatype.api.values.GenericValueSupport;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.SimpleValue;
import org.jboss.metatype.api.values.SimpleValueSupport;
import org.rhq.plugins.jbossas5.connection.ProfileServiceConnection;
import org.teiid.adminapi.Admin;
import org.teiid.adminapi.Request.ProcessingState;
import org.teiid.adminapi.VDB.Status;
import org.teiid.rhq.plugin.objects.ExecutedResult;
import org.teiid.rhq.plugin.objects.RequestMetadata;
import org.teiid.rhq.plugin.objects.SessionMetadata;
import org.teiid.rhq.plugin.objects.TransactionMetadata;
import org.teiid.rhq.plugin.util.DeploymentUtils;
import org.teiid.rhq.plugin.util.PluginConstants;
import org.teiid.rhq.plugin.util.ProfileServiceUtil;
import org.teiid.rhq.plugin.util.PluginConstants.ComponentType.Platform;
import org.teiid.rhq.plugin.util.PluginConstants.ComponentType.VDB;
public class DQPManagementView implements PluginConstants {
private static ManagedComponent mc = null;
private static final Log LOG = LogFactory.getLog(PluginConstants.DEFAULT_LOGGER_CATEGORY);
public static final String VDB_EXT = ".vdb"; //$NON-NLS-1$
public static final String DYNAMIC_VDB_EXT = "-vdb.xml"; //$NON-NLS-1$
//Session metadata fields
private static final String SECURITY_DOMAIN = "securityDomain"; //$NON-NLS-1$
private static final String VDB_VERSION = "VDBVersion"; //$NON-NLS-1$
private static final String VDB_NAME = "VDBName"; //$NON-NLS-1$
private static final String USER_NAME = "userName"; //$NON-NLS-1$
private static final String SESSION_ID = "sessionId"; //$NON-NLS-1$
private static final String LAST_PING_TIME = "lastPingTime"; //$NON-NLS-1$
private static final String IP_ADDRESS = "IPAddress"; //$NON-NLS-1$
private static final String CLIENT_HOST_NAME = "clientHostName"; //$NON-NLS-1$
private static final String CREATED_TIME = "createdTime"; //$NON-NLS-1$
private static final String APPLICATION_NAME = "applicationName"; //$NON-NLS-1$
//Request metadata fields
private static final String TRANSACTION_ID = "transactionId"; //$NON-NLS-1$
private static final String NODE_ID = "nodeId"; //$NON-NLS-1$
private static final String SOURCE_REQUEST = "sourceRequest"; //$NON-NLS-1$
private static final String COMMAND = "command"; //$NON-NLS-1$
private static final String START_TIME = "startTime"; //$NON-NLS-1$
private static final String EXECUTION_ID = "executionId"; //$NON-NLS-1$
private static final String STATE = "processingState"; //$NON-NLS-1$
//Transaction metadata fields
private static final String SCOPE = "scope"; //$NON-NLS-1$
private static final String ASSOCIATED_SESSION = "associatedSession"; //$NON-NLS-1$
public DQPManagementView() {
}
/*
* Metric methods
*/
public Object getMetric(ProfileServiceConnection connection,
String componentType, String identifier, String metric,
Map<String, Object> valueMap) throws Exception {
Object resultObject = new Object();
if (componentType.equals(PluginConstants.ComponentType.Platform.NAME)) {
resultObject = getPlatformMetric(connection, componentType, metric, valueMap);
} else if (componentType.equals(PluginConstants.ComponentType.VDB.NAME)) {
resultObject = getVdbMetric(connection, componentType, identifier,metric, valueMap);
}
return resultObject;
}
private Object getPlatformMetric(ProfileServiceConnection connection,
String componentType, String metric, Map<String, Object> valueMap) throws Exception {
Object resultObject = new Object();
if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.QUERY_COUNT)) {
resultObject = new Double(getQueryCount(connection).doubleValue());
} else if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.SESSION_COUNT)) {
resultObject = new Double(getSessionCount(connection).doubleValue());
} else if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.LONG_RUNNING_QUERIES)) {
Collection<RequestMetadata> longRunningQueries = new ArrayList<RequestMetadata>();
getRequestCollectionValue(getLongRunningQueries(connection), longRunningQueries);
resultObject = new Double(longRunningQueries.size());
} else if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.BUFFER_USAGE)) {
try {
resultObject = ProfileServiceUtil.doubleValue(getUsedBufferSpace(connection));
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_BUFFER_USAGE; //$NON-NLS-1$
LOG.error(msg, e);
}
} else if (metric.startsWith(Admin.Cache.PREPARED_PLAN_CACHE.toString() + ".") //$NON-NLS-1$
|| metric.startsWith(Admin.Cache.QUERY_SERVICE_RESULT_SET_CACHE .toString()+ ".")) { //$NON-NLS-1$
return getCacheProperty(connection, metric);
}
return resultObject;
}
private Object getCacheProperty(ProfileServiceConnection connection,String metric) {
int dotIndex = metric.indexOf('.');
String cacheType = metric.substring(0, dotIndex);
String property = metric.substring(dotIndex + 1);
CompositeValueSupport mv = (CompositeValueSupport) getCacheStats(connection, cacheType);
MetaValue v = mv.get(property);
return ((SimpleValue) v).getValue();
}
private Object getVdbMetric(ProfileServiceConnection connection,
String componentType, String identifier, String metric,
Map<String, Object> valueMap) throws Exception {
Object resultObject = new Object();
if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.ERROR_COUNT)) {
resultObject = getErrorCount(connection, (String) valueMap.get(VDB.NAME));
} else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.STATUS)) {
resultObject = getVDBStatus(connection, (String) valueMap.get(VDB.NAME));
} else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.QUERY_COUNT)) {
resultObject = new Double(getQueryCount(connection).doubleValue());
} else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.SESSION_COUNT)) {
resultObject = new Double(getSessionCount(connection).doubleValue());
} else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.LONG_RUNNING_QUERIES)) {
Collection<RequestMetadata> longRunningQueries = new ArrayList<RequestMetadata>();
getRequestCollectionValue(getLongRunningQueries(connection), longRunningQueries);
resultObject = new Double(longRunningQueries.size());
}
return resultObject;
}
/*
* Operation methods
*/
public void executeOperation(ProfileServiceConnection connection,
ExecutedResult operationResult, final Map<String, Object> valueMap) throws Exception {
if (operationResult.getComponentType().equals(PluginConstants.ComponentType.Platform.NAME)) {
executePlatformOperation(connection, operationResult, operationResult.getOperationName(), valueMap);
} else if (operationResult.getComponentType().equals( PluginConstants.ComponentType.VDB.NAME)) {
executeVdbOperation(connection, operationResult, operationResult .getOperationName(), valueMap);
}
}
private void executePlatformOperation(ProfileServiceConnection connection,
ExecutedResult operationResult, final String operationName,
final Map<String, Object> valueMap) throws Exception {
Collection<RequestMetadata> resultObject = new ArrayList<RequestMetadata>();
Collection<SessionMetadata> activeSessionsCollection = new ArrayList<SessionMetadata>();
Collection<TransactionMetadata> transactionsCollection = new ArrayList<TransactionMetadata>();
if (operationName.equals(Platform.Operations.GET_LONGRUNNINGQUERIES)) {
List<String> fieldNameList = operationResult.getFieldNameList();
getRequestCollectionValue(getLongRunningQueries(connection), resultObject);
operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(Platform.Operations.GET_SESSIONS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue sessionMetaValue = getSessions(connection);
getSessionCollectionValue(sessionMetaValue,activeSessionsCollection);
operationResult.setContent(createReportResultList(fieldNameList, activeSessionsCollection.iterator()));
} else if (operationName.equals(Platform.Operations.GET_REQUESTS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue requestMetaValue = getRequests(connection);
getRequestCollectionValue(requestMetaValue, resultObject);
operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(Platform.Operations.GET_TRANSACTIONS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue transactionMetaValue = getTransactions(connection);
getTransactionCollectionValue(transactionMetaValue,transactionsCollection);
operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(Platform.Operations.KILL_TRANSACTION)) {
String sessionID = (String) valueMap.get(Operation.Value.TRANSACTION_ID);
MetaValue[] args = new MetaValue[] { SimpleValueSupport.wrap(sessionID) };
try {
executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), Platform.Operations.KILL_TRANSACTION, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.KILL_TRANSACTION; //$NON-NLS-1$
LOG.error(msg, e);
}
} else if (operationName.equals(Platform.Operations.KILL_SESSION)) {
String sessionID = (String) valueMap.get(Operation.Value.SESSION_ID);
MetaValue[] args = new MetaValue[] { SimpleValueSupport.wrap(sessionID) };
try {
executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), Platform.Operations.KILL_SESSION, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.KILL_SESSION; //$NON-NLS-1$
LOG.error(msg, e);
}
} else if (operationName.equals(Platform.Operations.KILL_REQUEST)) {
Long requestID = (Long) valueMap.get(Operation.Value.REQUEST_ID);
String sessionID = (String) valueMap.get(Operation.Value.SESSION_ID);
MetaValue[] args = new MetaValue[] {
SimpleValueSupport.wrap(requestID),
SimpleValueSupport.wrap(sessionID) };
try {
executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), Platform.Operations.KILL_REQUEST, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.KILL_REQUEST; //$NON-NLS-1$
LOG.error(msg, e);
}
} else if (operationName.equals(Platform.Operations.DEPLOY_VDB_BY_URL)) {
String vdbUrl = (String) valueMap.get(Operation.Value.VDB_URL);
String deployName = (String) valueMap.get(Operation.Value.VDB_DEPLOY_NAME);
Object vdbVersion = valueMap.get(Operation.Value.VDB_VERSION);
//strip off vdb extension if user added it
if (deployName.endsWith(VDB_EXT)){
deployName = deployName.substring(0, deployName.lastIndexOf(VDB_EXT));
}
if (vdbVersion!=null){
deployName = deployName + "." + ((Integer)vdbVersion).toString() + VDB_EXT; //$NON-NLS-1$
}
//add vdb extension if there was no version
if (!deployName.endsWith(VDB_EXT) && !deployName.endsWith(DYNAMIC_VDB_EXT)){
deployName = deployName + VDB_EXT;
}
try {
URL url = new URL(vdbUrl);
DeploymentUtils.deployArchive( deployName, connection.getDeploymentManager(), url, false);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.DEPLOY_VDB_BY_URL; //$NON-NLS-1$
LOG.error(msg, e);
throw new RuntimeException(e);
}
}
}
private void executeVdbOperation(ProfileServiceConnection connection,
ExecutedResult operationResult, final String operationName,
final Map<String, Object> valueMap) throws Exception {
Collection<ArrayList<String>> sqlResultsObject = new ArrayList<ArrayList<String>>();
Collection<RequestMetadata> resultObject = new ArrayList<RequestMetadata>();
Collection<SessionMetadata> activeSessionsCollection = new ArrayList<SessionMetadata>();
String vdbName = (String) valueMap.get(PluginConstants.ComponentType.VDB.NAME);
vdbName = formatVdbName(vdbName);
String vdbVersion = (String) valueMap.get(PluginConstants.ComponentType.VDB.VERSION);
if (operationName.equals(VDB.Operations.GET_PROPERTIES)) {
List<String> fieldNameList = operationResult.getFieldNameList();
getProperties(connection, PluginConstants.ComponentType.VDB.NAME);
operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(VDB.Operations.GET_SESSIONS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue sessionMetaValue = getSessions(connection);
getSessionCollectionValueForVDB(sessionMetaValue, activeSessionsCollection, vdbName);
operationResult.setContent(createReportResultList(fieldNameList, activeSessionsCollection.iterator()));
} else if (operationName.equals(VDB.Operations.GET_REQUESTS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue requestMetaValue = getRequestsForVDB(connection, vdbName, Integer.parseInt(vdbVersion));
getRequestCollectionValue(requestMetaValue, resultObject);
operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(VDB.Operations.GET_MATVIEWS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue resultsMetaValue = executeMaterializedViewQuery( connection, vdbName, Integer.parseInt(vdbVersion));
getResultsCollectionValue(resultsMetaValue, sqlResultsObject);
operationResult.setContent(createReportResultListForMatViewQuery(fieldNameList, sqlResultsObject.iterator()));
} else if (operationName.equals(VDB.Operations.CLEAR_CACHE)) {
try {
executeClearCache( connection, vdbName, Integer.parseInt(vdbVersion),
(String) valueMap.get(Operation.Value.CACHE_TYPE));
}catch(Exception e){
//Some failure during Clear Cache. Set message here since it has already been logged.
operationResult.setContent("failure - see log for details"); //$NON-NLS-1$
}
//If no exceptions, we assume the clear cache worked
operationResult.setContent("cache successfully cleared!"); //$NON-NLS-1$
} else if (operationName.equals(VDB.Operations.RELOAD_MATVIEW)) {
MetaValue resultsMetaValue = reloadMaterializedView(connection, vdbName, Integer.parseInt(vdbVersion),
(String) valueMap.get(Operation.Value.MATVIEW_SCHEMA),
(String) valueMap.get(Operation.Value.MATVIEW_TABLE),
(Boolean) valueMap.get(Operation.Value.INVALIDATE_MATVIEW));
if (resultsMetaValue==null) {
operationResult.setContent("failure - see log for details"); //$NON-NLS-1$
} else {
operationResult.setContent("data successfully refreshed!"); //$NON-NLS-1$
}
}
}
/*
* Helper methods
*/
private String formatVdbName(String vdbName) {
return vdbName.substring(0, vdbName.lastIndexOf(".")); //$NON-NLS-1$
}
public MetaValue getProperties(ProfileServiceConnection connection, final String component) {
MetaValue propertyValue = null;
MetaValue args = null;
try {
propertyValue = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
PluginConstants.Operation.GET_PROPERTIES, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_PROPERTIES; //$NON-NLS-1$
LOG.error(msg, e);
}
return propertyValue;
}
protected MetaValue getRequests(ProfileServiceConnection connection) {
MetaValue requestsCollection = null;
MetaValue args = null;
try {
requestsCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), PluginConstants.Operation.GET_REQUESTS, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_REQUESTS; //$NON-NLS-1$
LOG.error(msg, e);
}
return requestsCollection;
}
protected void executeClearCache(
ProfileServiceConnection connection, String vdbName, int vdbVersion, String cacheType) throws Exception {
MetaValue[] args = new MetaValue[] {SimpleValueSupport.wrap(cacheType),
SimpleValueSupport.wrap(vdbName),
SimpleValueSupport.wrap(vdbVersion) };
try {
executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), VDB.Operations.CLEAR_CACHE, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + VDB.Operations.EXECUTE_QUERIES; //$NON-NLS-1$
LOG.error(msg, e);
throw e;
}
}
protected MetaValue executeMaterializedViewQuery(
ProfileServiceConnection connection, String vdbName, int vdbVersion) {
MetaValue resultsCollection = null;
MetaValue[] args = new MetaValue[] {
SimpleValueSupport.wrap(vdbName),
SimpleValueSupport.wrap(vdbVersion),
SimpleValueSupport.wrap(Operation.Value.MAT_VIEW_QUERY),
SimpleValueSupport.wrap(Long.parseLong("9999999")) }; //$NON-NLS-1$
try {
resultsCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), VDB.Operations.EXECUTE_QUERIES, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + VDB.Operations.EXECUTE_QUERIES; //$NON-NLS-1$
LOG.error(msg, e);
}
return resultsCollection;
}
protected MetaValue reloadMaterializedView(
ProfileServiceConnection connection, String vdbName,
int vdbVersion, String schema, String table, Boolean invalidate) {
MetaValue result = null;
String matView = schema + "." + table; //$NON-NLS-1$
String query = PluginConstants.Operation.Value.MAT_VIEW_REFRESH;
query = query.replace("param1", matView); //$NON-NLS-1$
query = query.replace("param2", invalidate.toString()); //$NON-NLS-1$
MetaValue[] args = new MetaValue[] {
SimpleValueSupport.wrap(vdbName),
SimpleValueSupport.wrap(vdbVersion),
SimpleValueSupport.wrap(query),
SimpleValueSupport.wrap(Long.parseLong("9999999")) }; //$NON-NLS-1$
try {
result = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
VDB.Operations.EXECUTE_QUERIES, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + VDB.Operations.RELOAD_MATVIEW; //$NON-NLS-1$
LOG.error(msg, e);
}
return result;
}
protected MetaValue getRequestsForVDB(ProfileServiceConnection connection,
String vdbName, int vdbVersion) {
MetaValue requestsCollection = null;
MetaValue[] args = new MetaValue[] {
SimpleValueSupport.wrap(vdbName),
SimpleValueSupport.wrap(vdbVersion) };
try {
requestsCollection = executeManagedOperation(connection,
getRuntimeEngineDeployer(connection, mc),
PluginConstants.ComponentType.VDB.Operations.GET_REQUESTS,
args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_REQUESTS; //$NON-NLS-1$
LOG.error(msg, e);
}
return requestsCollection;
}
protected MetaValue getTransactions(ProfileServiceConnection connection) {
MetaValue transactionsCollection = null;
MetaValue args = null;
try {
transactionsCollection = executeManagedOperation(connection,
getRuntimeEngineDeployer(connection, mc),
Platform.Operations.GET_TRANSACTIONS, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_TRANSACTIONS; //$NON-NLS-1$
LOG.error(msg, e);
}
return transactionsCollection;
}
public MetaValue getSessions(ProfileServiceConnection connection) {
MetaValue sessionCollection = null;
MetaValue args = null;
try {
sessionCollection = executeManagedOperation(connection,
getRuntimeEngineDeployer(connection, mc),
PluginConstants.Operation.GET_SESSIONS, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_SESSIONS; //$NON-NLS-1$
LOG.error(msg, e);
}
return sessionCollection;
}
public static String getVDBStatus(ProfileServiceConnection connection,
String vdbName) {
ManagedComponent mcVdb = null;
try {
mcVdb = ProfileServiceUtil.getManagedComponent(connection,
new org.jboss.managed.api.ComponentType(
PluginConstants.ComponentType.VDB.TYPE,
PluginConstants.ComponentType.VDB.SUBTYPE), vdbName);
} catch (NamingException e) {
final String msg = "NamingException in getVDBStatus(): " + e.getExplanation(); //$NON-NLS-1$
LOG.error(msg, e);
} catch (Exception e) {
final String msg = "Exception in getVDBStatus(): " + e.getMessage(); //$NON-NLS-1$
LOG.error(msg, e);
}
if (mcVdb == null) {
return Status.INACTIVE.toString();
}
return ProfileServiceUtil.getSimpleValue(mcVdb, "status", String.class); //$NON-NLS-1$
}
public static MetaValue executeManagedOperation(
ProfileServiceConnection connection, ManagedComponent mc,
String operation, MetaValue... args) throws Exception {
for (ManagedOperation mo : mc.getOperations()) {
String opName = mo.getName();
if (opName.equals(operation)) {
try {
if (args.length == 1 && args[0] == null) {
return mo.invoke();
}
return mo.invoke(args);
} catch (Exception e) {
final String msg = "Exception getting the AdminApi in " + operation; //$NON-NLS-1$
LOG.error(msg, e);
throw new RuntimeException(e);
}
}
}
throw new Exception("No operation found with given name = " + operation); //$NON-NLS-1$
}
/**
* @param mc
* @return
*/
private static ManagedComponent getRuntimeEngineDeployer(
ProfileServiceConnection connection, ManagedComponent mc) {
try {
mc = ProfileServiceUtil.getRuntimeEngineDeployer(connection);
} catch (NamingException e) {
final String msg = "NamingException getting the DQPManagementView"; //$NON-NLS-1$
LOG.error(msg, e);
} catch (Exception e1) {
final String msg = "Exception getting the DQPManagementView"; //$NON-NLS-1$
LOG.error(msg, e1);
}
return mc;
}
/**
* @param mc
* @return
*/
private static ManagedComponent getBufferService(ProfileServiceConnection connection, ManagedComponent mc) {
try {
mc = ProfileServiceUtil.getBufferService(connection);
} catch (NamingException e) {
final String msg = "NamingException getting the SessionService"; //$NON-NLS-1$
LOG.error(msg, e);
} catch (Exception e1) {
final String msg = "Exception getting the SessionService"; //$NON-NLS-1$
LOG.error(msg, e1);
}
return mc;
}
public static MetaValue getManagedProperty(ProfileServiceConnection connection, ManagedComponent mc, String property) throws Exception {
ManagedProperty managedProperty = null;
try {
managedProperty = mc.getProperty(property);
} catch (Exception e) {
final String msg = "Exception getting the AdminApi in " + property; //$NON-NLS-1$
LOG.error(msg, e);
}
if (managedProperty != null) {
return managedProperty.getValue();
}
throw new Exception("No property found with given name =" + property); //$NON-NLS-1$
}
private Integer getQueryCount(ProfileServiceConnection connection) throws Exception {
Integer count = new Integer(0);
MetaValue requests = null;
Collection<RequestMetadata> requestsCollection = new ArrayList<RequestMetadata>();
requests = getRequests(connection);
getRequestCollectionValue(requests, requestsCollection);
if (!requestsCollection.isEmpty()) {
count = requestsCollection.size();
}
return count;
}
private Integer getSessionCount(ProfileServiceConnection connection) throws Exception {
Collection<SessionMetadata> activeSessionsCollection = new ArrayList<SessionMetadata>();
MetaValue sessionMetaValue = getSessions(connection);
getSessionCollectionValue(sessionMetaValue, activeSessionsCollection);
return activeSessionsCollection.size();
}
/**
* @param mcVdb
* @return count
* @throws Exception
*/
private int getErrorCount(ProfileServiceConnection connection,String vdbName) {
ManagedComponent mcVdb = null;
try {
mcVdb = ProfileServiceUtil.getManagedComponent(connection,
new org.jboss.managed.api.ComponentType(
PluginConstants.ComponentType.VDB.TYPE,
PluginConstants.ComponentType.VDB.SUBTYPE),vdbName);
} catch (NamingException e) {
final String msg = "NamingException in getVDBStatus(): " + e.getExplanation(); //$NON-NLS-1$
LOG.error(msg, e);
} catch (Exception e) {
final String msg = "Exception in getVDBStatus(): " + e.getMessage(); //$NON-NLS-1$
LOG.error(msg, e);
}
// Get models from VDB
int count = 0;
ManagedProperty property = mcVdb.getProperty("models"); //$NON-NLS-1$
CollectionValueSupport valueSupport = (CollectionValueSupport) property.getValue();
MetaValue[] metaValues = valueSupport.getElements();
for (MetaValue value : metaValues) {
GenericValueSupport genValueSupport = (GenericValueSupport) value;
ManagedObjectImpl managedObject = (ManagedObjectImpl) genValueSupport.getValue();
// Get any model errors/warnings
MetaValue errors = managedObject.getProperty("errors").getValue(); //$NON-NLS-1$
if (errors != null) {
CollectionValueSupport errorValueSupport = (CollectionValueSupport) errors;
MetaValue[] errorArray = errorValueSupport.getElements();
count += errorArray.length;
}
}
return count;
}
protected MetaValue getCacheStats(ProfileServiceConnection connection,
String type) {
try {
return executeManagedOperation(connection,getRuntimeEngineDeployer(connection, mc),
Platform.Operations.GET_CACHE_STATS, SimpleValueSupport.wrap(type));
} catch (Exception e) {
LOG.error("Exception executing operation: " + Platform.Operations.GET_CACHE_STATS, e); //$NON-NLS-1$
}
return null;
}
protected MetaValue getLongRunningQueries(
ProfileServiceConnection connection) {
MetaValue requestsCollection = null;
MetaValue args = null;
try {
requestsCollection = executeManagedOperation(connection,
getRuntimeEngineDeployer(connection, mc),
Platform.Operations.GET_LONGRUNNINGQUERIES, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_LONGRUNNINGQUERIES; //$NON-NLS-1$
LOG.error(msg, e);
}
return requestsCollection;
}
protected MetaValue getUsedBufferSpace(ProfileServiceConnection connection) {
MetaValue usedBufferSpace = null;
try {
usedBufferSpace = getManagedProperty(connection, getBufferService(
connection, mc), Platform.Operations.GET_BUFFER_USAGE);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_BUFFER_USAGE; //$NON-NLS-1$
LOG.error(msg, e);
}
return usedBufferSpace;
}
private void getRequestCollectionValue(MetaValue pValue, Collection<RequestMetadata> list) throws Exception {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isComposite()) {
RequestMetadata request = unwrapRequestMetaValue(value);
list.add(request);
} else {
throw new IllegalStateException(pValue + " is not a Composite type"); //$NON-NLS-1$
}
}
}
}
private void getResultsCollectionValue(MetaValue pValue, Collection<ArrayList<String>> list) throws Exception {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isCollection()) {
ArrayList<String> row = new ArrayList<String>();
MetaValue[] metaValueArray = ((CollectionValueSupport)value).getElements();
for (MetaValue cell : metaValueArray){
row.add(ProfileServiceUtil.stringValue(cell));
}
list.add(row);
}
}
}
}
private void getResultsCollectionValueForMatViewRefresh(MetaValue pValue, Collection<ArrayList<String>> list) throws Exception {
MetaType metaType = pValue.getMetaType();
for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isCollection()) {
ArrayList<String> row = new ArrayList<String>();
MetaValue[] metaValueArray = ((CollectionValueSupport)value).getElements();
for (MetaValue cell : metaValueArray){
row.add(ProfileServiceUtil.stringValue(cell));
}
list.add(row);
}
}
}
public <T> void getTransactionCollectionValue(MetaValue pValue, Collection<TransactionMetadata> list) throws Exception {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isComposite()) {
TransactionMetadata transaction = unwrapTransactionMetaValue(value);
list.add(transaction);
} else {
throw new IllegalStateException(pValue
+ " is not a Composite type"); //$NON-NLS-1$
}
}
}
}
public <T> void getSessionCollectionValue(MetaValue pValue,Collection<SessionMetadata> list) throws Exception {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isComposite()) {
SessionMetadata session = unwrapSessionMetaValue(value);
list.add(session);
} else {
throw new IllegalStateException(pValue
+ " is not a Composite type"); //$NON-NLS-1$
}
}
}
}
public <T> void getSessionCollectionValueForVDB(MetaValue pValue,Collection<SessionMetadata> list, String vdbName) throws Exception {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isComposite()) {
if (ProfileServiceUtil.stringValue(((CompositeValueSupport)value).get("VDBName")).equals(vdbName)) { //$NON-NLS-1$
SessionMetadata session = unwrapSessionMetaValue(value);
list.add(session);
}
} else {
throw new IllegalStateException(pValue+ " is not a Composite type"); //$NON-NLS-1$
}
}
}
}
private Collection createReportResultList(List fieldNameList, Iterator objectIter) {
Collection reportResultList = new ArrayList();
while (objectIter.hasNext()) {
Object object = objectIter.next();
Class cls = null;
try {
cls = object.getClass();
Iterator methodIter = fieldNameList.iterator();
Map reportValueMap = new HashMap<String, String>();
while (methodIter.hasNext()) {
String fieldName = (String) methodIter.next();
String methodName = fieldName;
Method meth = cls.getMethod(methodName, (Class[]) null);
Object retObj = meth.invoke(object, (Object[]) null);
reportValueMap.put(fieldName, retObj);
}
reportResultList.add(reportValueMap);
} catch (Throwable e) {
System.err.println(e);
}
}
return reportResultList;
}
private Collection createReportResultListForMatViewQuery(List fieldNameList, Iterator objectIter) {
Collection reportResultList = new ArrayList();
// Iterate through rows
while (objectIter.hasNext()) {
ArrayList<Object> columnValues = (ArrayList<Object>) objectIter.next();
try {
Iterator fieldIter = fieldNameList.iterator();
Map reportValueMap = new HashMap<String, Object>();
// Iterate through columns with a row
for (Object columnValue : columnValues) {
String fieldName = (String) fieldIter.next();
reportValueMap.put(fieldName, columnValue);
}
reportResultList.add(reportValueMap);
} catch (Throwable e) {
System.err.println(e);
}
}
return reportResultList;
}
public SessionMetadata unwrapSessionMetaValue(MetaValue metaValue) throws Exception {
if (metaValue == null)
return null;
if (metaValue instanceof CompositeValue) {
CompositeValueSupport compositeValue = (CompositeValueSupport) metaValue;
SessionMetadata session = new SessionMetadata();
session.setApplicationName((String) ProfileServiceUtil.stringValue(compositeValue.get(APPLICATION_NAME)));
session.setCreatedTime((Long) ProfileServiceUtil.longValue(compositeValue.get(CREATED_TIME)));
session.setClientHostName((String) ProfileServiceUtil.stringValue(compositeValue.get(CLIENT_HOST_NAME)));
session.setIPAddress((String) ProfileServiceUtil.stringValue(compositeValue.get(IP_ADDRESS)));
session.setLastPingTime((Long) ProfileServiceUtil.longValue(compositeValue.get(LAST_PING_TIME)));
session.setSessionId((String) ProfileServiceUtil.stringValue(compositeValue.get(SESSION_ID)));
session.setUserName((String) ProfileServiceUtil.stringValue(compositeValue.get(USER_NAME)));
session.setVDBName((String) ProfileServiceUtil.stringValue(compositeValue.get(VDB_NAME)));
session.setVDBVersion((Integer) ProfileServiceUtil.integerValue(compositeValue.get(VDB_VERSION)));
session.setSecurityDomain((String) ProfileServiceUtil.stringValue(compositeValue.get(SECURITY_DOMAIN)));
return session;
}
throw new IllegalStateException("Unable to unwrap session " + metaValue); //$NON-NLS-1$
}
public RequestMetadata unwrapRequestMetaValue(MetaValue metaValue) throws Exception {
if (metaValue == null)
return null;
if (metaValue instanceof CompositeValue) {
CompositeValue compositeValue = (CompositeValue) metaValue;
RequestMetadata request = new RequestMetadata();
request.setExecutionId((Long) ProfileServiceUtil.longValue(compositeValue.get(EXECUTION_ID)));
request.setSessionId((String) ProfileServiceUtil.stringValue(compositeValue.get(SESSION_ID)));
request.setStartTime((Long) ProfileServiceUtil.longValue(compositeValue.get(START_TIME)));
request.setCommand((String) ProfileServiceUtil.stringValue(compositeValue.get(COMMAND)));
request.setSourceRequest((Boolean) ProfileServiceUtil.booleanValue(compositeValue.get(SOURCE_REQUEST)));
request.setNodeId((Integer) ProfileServiceUtil.integerValue(compositeValue.get(NODE_ID)));
request.setTransactionId((String) ProfileServiceUtil.stringValue(compositeValue.get(TRANSACTION_ID)));
request.setState((ProcessingState) ProfileServiceUtil.getSimpleValue(compositeValue.get(STATE), ProcessingState.class));
return request;
}
throw new IllegalStateException("Unable to unwrap RequestMetadata " + metaValue); //$NON-NLS-1$
}
public TransactionMetadata unwrapTransactionMetaValue(MetaValue metaValue) throws Exception {
if (metaValue == null)
return null;
if (metaValue instanceof CompositeValue) {
CompositeValue compositeValue = (CompositeValue) metaValue;
TransactionMetadata transaction = new TransactionMetadata();
transaction.setAssociatedSession((String) ProfileServiceUtil.stringValue(compositeValue.get(ASSOCIATED_SESSION)));
transaction.setCreatedTime((Long) ProfileServiceUtil.longValue(compositeValue.get(CREATED_TIME)));
transaction.setScope((String) ProfileServiceUtil.stringValue(compositeValue.get(SCOPE)));
transaction.setId((String) ProfileServiceUtil.stringValue(compositeValue.get("id"))); //$NON-NLS-1$
return transaction;
}
throw new IllegalStateException("Unable to unwrap TransactionMetadata " + metaValue); //$NON-NLS-1$
}
}