Package org.teiid.rhq.plugin

Source Code of org.teiid.rhq.plugin.PlatformComponent

/*
* 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.plugin;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.naming.NamingException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.deployers.spi.management.ManagementView;
import org.jboss.managed.api.ComponentType;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.api.RunState;
import org.mc4j.ems.connection.EmsConnection;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.MeasurementDataNumeric;
import org.rhq.core.domain.measurement.MeasurementReport;
import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
import org.rhq.core.pluginapi.inventory.ResourceContext;
import org.rhq.plugins.jbossas5.ApplicationServerComponent;
import org.rhq.plugins.jbossas5.connection.ProfileServiceConnection;
import org.teiid.rhq.admin.DQPManagementView;
import org.teiid.rhq.plugin.util.PluginConstants;
import org.teiid.rhq.plugin.util.ProfileServiceUtil;
import org.teiid.rhq.plugin.util.PluginConstants.Operation;
import org.teiid.rhq.plugin.util.PluginConstants.ComponentType.Platform;

/**
*
*/
public class PlatformComponent extends Facet {
  private final Log LOG = LogFactory.getLog(PluginConstants.DEFAULT_LOGGER_CATEGORY);

  @Override
  public void start(ResourceContext context) {
    this.setComponentName(context.getPluginConfiguration().getSimpleValue"name", null)); //$NON-NLS-1$
    this.resourceConfiguration = context.getPluginConfiguration();
    super.start(context);
  }

  /**
   * @see org.teiid.rhq.plugin.Facet#getComponentType()
   * @since 7.0
   */
  @Override
  String getComponentType() {
    return PluginConstants.ComponentType.Platform.NAME;
  }

  @Override
  public AvailabilityType getAvailability() {

    RunState runState;
    try {
      runState = ProfileServiceUtil.getRuntimeEngineDeployer(getConnection()).getRunState();
    } catch (NamingException e) {
      LOG  .debug("Naming exception getting: " + PluginConstants.ComponentType.Platform.TEIID_RUNTIME_ENGINE); //$NON-NLS-1$
      return AvailabilityType.DOWN;
    } catch (Exception e) {
      LOG  .debug("Exception getting: "   + PluginConstants.ComponentType.Platform.TEIID_RUNTIME_ENGINE); //$NON-NLS-1$
      return AvailabilityType.DOWN;
    }
    return (runState == RunState.RUNNING) ? AvailabilityType.UP: AvailabilityType.DOWN;
  }

  @Override
  protected void setOperationArguments(String name,
      Configuration configuration, Map<String, Object> valueMap) {
    // Parameter logic for System Operations
    if (name.equals(Platform.Operations.KILL_REQUEST)) {
      valueMap.put(Operation.Value.REQUEST_ID, configuration.getSimple(Operation.Value.REQUEST_ID).getLongValue());
      valueMap.put(Operation.Value.SESSION_ID, configuration.getSimple(Operation.Value.SESSION_ID).getStringValue());
    } else if (name.equals(Platform.Operations.KILL_REQUEST)) {
      valueMap.put(Operation.Value.TRANSACTION_ID, configuration.getSimple(Operation.Value.TRANSACTION_ID).getStringValue());
    } else if (name.equals(Platform.Operations.KILL_SESSION)) {
      valueMap.put(Operation.Value.SESSION_ID, configuration.getSimple(Operation.Value.SESSION_ID).getStringValue());
    } else if (name.equals(Platform.Operations.DEPLOY_VDB_BY_URL)) {
      valueMap.put(Operation.Value.VDB_URL, configuration.getSimple(Operation.Value.VDB_URL).getStringValue());
      valueMap.put(Operation.Value.VDB_DEPLOY_NAME, configuration.getSimple(Operation.Value.VDB_DEPLOY_NAME).getStringValue());
      valueMap.put(Operation.Value.VDB_VERSION, configuration.getSimple(Operation.Value.VDB_VERSION).getIntegerValue());
    }
  }

  @Override
  public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> requests) throws Exception {

    DQPManagementView view = new DQPManagementView();

    Map<String, Object> valueMap = new HashMap<String, Object>();

    try {
      for (MeasurementScheduleRequest request : requests) {
        String name = request.getName();
        LOG.debug("Measurement name = " + name); //$NON-NLS-1$

        // Initialize any parameters to be used in the retrieval of
        // metric values

        Object metric = view.getMetric(getConnection(),
            getComponentType(), this.getComponentIdentifier(),
            name, valueMap);

        if (metric instanceof Double) {
          report.addData(new MeasurementDataNumeric(request, (Double) metric));
        }
        else if (metric instanceof Integer ){
          report.addData(new MeasurementDataNumeric(request, new Double(((Integer)metric).doubleValue())));
        }
        else if (metric instanceof Long){
          report.addData(new MeasurementDataNumeric(request, new Double(((Long)metric).longValue())));
        }
        else {
          LOG.error("Metric value must be a numeric value"); //$NON-NLS-1$
        }
      }
    } catch (Exception e) {
      LOG.error("Failed to obtain measurement [" + name   + "]. Cause: " + e); //$NON-NLS-1$ //$NON-NLS-2$
      throw (e);
    }
  }

  @Override
  public void stop() {
    // TODO Auto-generated method stub
    super.stop();
  }

  @Override
  public void updateResourceConfiguration(ConfigurationUpdateReport report) {

    resourceConfiguration = report.getConfiguration().deepCopy();

    Configuration resourceConfig = report.getConfiguration();

    ManagementView managementView = null;
    ComponentType componentType = new ComponentType(
        PluginConstants.ComponentType.Platform.TEIID_TYPE,
        PluginConstants.ComponentType.Platform.TEIID_SUB_TYPE);

    report.setStatus(ConfigurationUpdateStatus.SUCCESS);
    try {

      managementView = getConnection().getManagementView();
      Set<ManagedComponent> allComponents = managementView.getComponentsForType(componentType);
     
      for (ManagedComponent managedComponent : allComponents) {
       
        Map<String, ManagedProperty> managedProperties = managedComponent.getProperties();

       
        ProfileServiceUtil.convertConfigurationToManagedProperties(managedProperties, resourceConfig, resourceContext.getResourceType(), managedComponent.getName());

        try {
          managementView.updateComponent(managedComponent);
        } catch (Exception e) {
          LOG.error("Unable to update component [" //$NON-NLS-1$
              + managedComponent.getName() + "] of type " //$NON-NLS-1$
              + componentType + ".", e); //$NON-NLS-1$
          report.setStatus(ConfigurationUpdateStatus.FAILURE);
          report.setErrorMessageFromThrowable(e);
        }
      }
    } catch (Exception e) {
      LOG.error("Unable to process update request", e); //$NON-NLS-1$
      report.setStatus(ConfigurationUpdateStatus.FAILURE);
      report.setErrorMessageFromThrowable(e);
    }
   
    managementView.load();

  }

  /*
   * (non-Javadoc)
   *
   * @see org.teiid.rhq.plugin.Facet#loadResourceConfiguration()
   */
  @Override
  public Configuration loadResourceConfiguration() {

    // Get plugin config
    Configuration c = resourceConfiguration;
   
    getProperties(c);

    return c;

  }

  /**
   * @param mc
   * @param configuration
   * @throws Exception
   */
  private void getProperties(Configuration configuration) {

    // Get all ManagedComponents of type Teiid and subtype dqp
    Set<ManagedComponent> mcSet = null;
    try {
      mcSet = ProfileServiceUtil.getManagedComponents(getConnection(),
          new org.jboss.managed.api.ComponentType(
                  PluginConstants.ComponentType.Platform.TEIID_TYPE,
                  PluginConstants.ComponentType.Platform.TEIID_SUB_TYPE));
    } catch (NamingException e) {
      LOG.error("NamingException getting components in Platform loadConfiguration(): "  + e.getMessage()); //$NON-NLS-1$
    } catch (Exception e) {
      LOG.error("Exception getting components in Platform loadConfiguration(): "  + e.getMessage()); //$NON-NLS-1$
    }
   
    for (ManagedComponent mc : mcSet) {
      Map<String, ManagedProperty> mcMap = mc.getProperties();
      String name = mc.getName();     
      setProperties(name, mcMap, configuration);
    }
  }

  /**
   * @param mcMap
   * @param configuration
   */
  private void setProperties(String compName, Map<String, ManagedProperty> mcMap, Configuration configuration) {
    for (ManagedProperty mProp : mcMap.values()) {
      try {
        String value = ProfileServiceUtil.stringValue(mProp.getValue());
        PropertySimple prop = new PropertySimple(compName+"."+mProp.getName(), value); //$NON-NLS-1$
        configuration.put(prop);
      } catch (Exception e) {
        LOG.error("Exception setting properties in Platform loadConfiguration(): "  + e.getMessage()); //$NON-NLS-1$
      }
    }
  }

  @Override
  public ProfileServiceConnection getConnection() {
    return ((ApplicationServerComponent) this.resourceContext.getParentResourceComponent()).getConnection();
  }

  @Override
  public EmsConnection getEmsConnection() {
    return null;
  }

}
TOP

Related Classes of org.teiid.rhq.plugin.PlatformComponent

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.