package org.rhq.plugins.services; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.freedesktop.dbus.DBusConnection; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.PropertySimple; import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.pluginapi.configuration.ConfigurationFacet; import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport; import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException; import org.rhq.core.pluginapi.inventory.ResourceComponent; import org.rhq.core.pluginapi.inventory.ResourceContext; import org.rhq.services.Service; import org.rhq.services.SysVService; import org.rhq.services.XinetdService; public class ServiceComponent<T extends ResourceComponent> implements ResourceComponent<T>, ConfigurationFacet { private final Log log = LogFactory.getLog(this.getClass()); private ResourceContext<T> resourceContext; private String resourceDescription; private Service service; DBusConnection conn; @Override public void start(ResourceContext<T> context) throws InvalidPluginConfigurationException, Exception { this.resourceContext = context; this.resourceDescription = this.resourceContext.getResourceType() + " Resource with key [" + this.resourceContext.getResourceKey() + "]"; Configuration pluginConfig = resourceContext.getPluginConfiguration(); String type = pluginConfig.getSimple("type").getStringValue(); String name = pluginConfig.getSimple("name").getStringValue(); conn = DBusConnection.getConnection(DBusConnection.SYSTEM); if (ServiceDiscoveryComponent.SYS_V_SERVICE.equals(type)) { service = SysVService.load(name, conn); } else if (ServiceDiscoveryComponent.XINETD_SERVICE.equals(type)) { service = XinetdService.load(name, conn); } } @Override public void stop() { if (conn != null) { conn.disconnect(); } } @Override public AvailabilityType getAvailability() { if (service.isSysVService()) { SysVService s = (SysVService) service; if (s.isRunning()) { return AvailabilityType.UP; } else { return AvailabilityType.DOWN; } } return AvailabilityType.UP; } @Override public Configuration loadResourceConfiguration() throws Exception { Configuration config = new Configuration(); String name = resourceContext.getPluginConfiguration().getSimple("name").getStringValue(); config.put(new PropertySimple("name", name)); config.put(new PropertySimple("enabled", service.isEnabled())); return config; } @Override public void updateResourceConfiguration(ConfigurationUpdateReport report) { // TODO Auto-generated method stub } }