package org.ow2.choreos.ee.reconfiguration.events; import java.util.List; import org.apache.log4j.Logger; import org.ow2.choreos.chors.ChoreographyNotFoundException; import org.ow2.choreos.chors.EnactmentException; import org.ow2.choreos.chors.datamodel.Choreography; import org.ow2.choreos.chors.datamodel.ChoreographySpec; import org.ow2.choreos.ee.reconfiguration.ComplexEventHandler; import org.ow2.choreos.ee.reconfiguration.HandlingEvent; import org.ow2.choreos.services.datamodel.DeployableService; import org.ow2.choreos.services.datamodel.DeployableServiceSpec; public class LowCpuUser extends ComplexEventHandler { Logger logger = Logger.getLogger(this.getClass()); @Override public void handleEvent(HandlingEvent event) { List<DeployableService> services = registryHelper.getServicesHostedOn(event.getNode()); if (services.isEmpty()) { logger.warn("Ooops! No servives hosted on " + event.getNode()); return; } List<DeployableServiceSpec> serviceSpecs = registryHelper.getServiceSpecsForServices(services); for (DeployableServiceSpec spec : serviceSpecs) { Choreography c = registryHelper.getChor(event.getNode()); ChoreographySpec cSpec = c.getChoreographySpec(); for (DeployableServiceSpec s : cSpec.getDeployableServiceSpecs()) { if (s.getName().equals(spec.getName())) { logger.debug("Found service spec. Going to increase number of instances"); if (s.getNumberOfInstances() > 1) s.setNumberOfInstances(s.getNumberOfInstances() - 1); break; } } try { logger.info("Going to update chor with spec: " + cSpec); registryHelper.getChorClient().updateChoreography("1", cSpec); } catch (ChoreographyNotFoundException e) { logger.error(e.getMessage()); } catch (EnactmentException e) { logger.error(e.getMessage()); } try { logger.info("Enacting choreography"); registryHelper.getChorClient().enactChoreography("1"); } catch (EnactmentException e) { logger.error(e.getMessage()); } catch (ChoreographyNotFoundException e) { logger.error(e.getMessage()); } } } }