package com.intuit.tank.perfManager.workLoads; /* * #%L * VmManager * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.util.ArrayList; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.intuit.tank.harness.AmazonUtil; import com.intuit.tank.vm.agent.messages.AgentMngrAPIRequest; import com.intuit.tank.vm.api.enumerated.VMProvider; import com.intuit.tank.vm.api.enumerated.VMRegion; import com.intuit.tank.vm.perfManager.RequestAgents; import com.intuit.tank.vm.scheduleManager.AgentDispatcher; import com.intuit.tank.vm.settings.ReportingInstance; import com.intuit.tank.vm.settings.TankConfig; import com.intuit.tank.vm.vmManager.JobRequest; import com.intuit.tank.vm.vmManager.JobUtil; import com.intuit.tank.vm.vmManager.RegionRequest; import com.intuit.tank.vm.vmManager.VMChannel; import com.intuit.tank.vm.vmManager.VMInstanceRequest; public class IncreasingWorkLoad implements Runnable { private static Logger LOG = LogManager.getLogger(IncreasingWorkLoad.class); private JobRequest job; private VMChannel channel; private AgentDispatcher agentDispatcher; public IncreasingWorkLoad(VMChannel channel, AgentDispatcher agentDispatcher, JobRequest job) { this.job = job; this.agentDispatcher = agentDispatcher; this.channel = channel; LOG.info("Job requested with values: " + job); } @Override public void run() { try { askForAgents(new JobInstanceAgentModel(job)); } catch (Exception th) { LOG.error("Error starting agents: " + th.getMessage(), th); } } public JobRequest getJob() { return job; } private void askForAgents(JobInstanceAgentModel model) { LOG.debug("asking for agents..."); // start the non region dependent reporting resources if needed int totalUsers = 0; ArrayList<AgentMngrAPIRequest.UserRequest> urList = new ArrayList<AgentMngrAPIRequest.UserRequest>(); for (RegionRequest jobRegion : job.getRegions()) { int users = JobUtil.parseUserString(jobRegion.getUsers()); LOG.info("Starting " + users + " users in region " + jobRegion.getRegion().getDescription()); totalUsers += users; if (users > 0) { VMRegion region = jobRegion.getRegion(); urList.add(new AgentMngrAPIRequest.UserRequest(region, users)); // AgentRunner.setRequestedAgents(model); RequestAgents request = new RequestAgents(job.getId(), job.getReportingMode(), job.getLoggingProfile(), region, users, job.getStopBehavior()); request.setVmInstanceType(job.getVmInstanceType()); request.setUserEips(job.isUseEips()); request.setNumUsersPerAgent(job.getNumUsersPerAgent()); agentDispatcher.processAgentsMessage(request); } } if (totalUsers <= 0) { LOG.warn("Attempt to start a job with no users."); } } }