package com.intuit.tank.vm.vmManager;
/*
* #%L
* Intuit Tank Api
* %%
* 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.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import com.intuit.tank.harness.StopBehavior;
import com.intuit.tank.logging.LoggingProfile;
import com.intuit.tank.vm.api.enumerated.IncrementStrategy;
import com.intuit.tank.vm.api.enumerated.JobQueueStatus;
import com.intuit.tank.vm.api.enumerated.TerminationPolicy;
import com.intuit.tank.vm.common.TankConstants;
import com.intuit.tank.vm.vmManager.JobRequestImpl.Builder;
import com.intuit.tank.vm.vmManager.JobRequestImpl.JobRequestBuilderBase;
/**
*
* JobInstance
*
* @author dangleton
*
*/
public final class JobRequestImpl implements Serializable, JobRequest {
private static final long serialVersionUID = 1L;
private String id;
private IncrementStrategy incrementStrategy = IncrementStrategy.increasing;
private String location;
private TerminationPolicy terminationPolicy = TerminationPolicy.time;
private long rampTime;
private int baselineVirtualUsers;
private long simulationTime;
private boolean useEips;
private int userIntervalIncrement;
private String reportingMode = TankConstants.RESULTS_NONE;
private String loggingProfile = LoggingProfile.STANDARD.name();
private String stopBehavior = StopBehavior.END_OF_SCRIPT_GROUP.name();
private JobQueueStatus status = JobQueueStatus.Created;
private Set<? extends RegionRequest> regions = new HashSet<RegionRequest>();
private Set<? extends Notification> notifications = new HashSet<Notification>();
private Set<Integer> dataFileIds = new HashSet<Integer>();
private String vmInstanceType;
private int numUsersPerAgent;
private String scriptsXmlUrl;
public static Builder builder() {
return new Builder();
}
/**
*
*/
private JobRequestImpl() {
super();
}
public String getLoggingProfile() {
return loggingProfile;
}
/**
* @return the useEips
*/
public boolean isUseEips() {
return useEips;
}
/**
* @return the stopBehavior
*/
public String getStopBehavior() {
return stopBehavior;
}
/**
* @{inheritDoc
*/
@Override
public String getId() {
return id;
}
/**
* @{inheritDoc
*/
@Override
public IncrementStrategy getIncrementStrategy() {
return incrementStrategy;
}
/**
* @{inheritDoc
*/
@Override
public String getLocation() {
return location;
}
/**
* @{inheritDoc
*/
@Override
public TerminationPolicy getTerminationPolicy() {
return terminationPolicy;
}
/**
* @{inheritDoc
*/
@Override
public long getRampTime() {
return rampTime;
}
/**
* @{inheritDoc
*/
@Override
public int getBaselineVirtualUsers() {
return baselineVirtualUsers;
}
/**
* @{inheritDoc
*/
@Override
public long getSimulationTime() {
return simulationTime;
}
/**
* @{inheritDoc
*/
@Override
public int getUserIntervalIncrement() {
return userIntervalIncrement > 0 ? userIntervalIncrement : 1;
}
/**
* @{inheritDoc
*/
@Override
public String getReportingMode() {
return reportingMode;
}
/**
* @return the scriptsXml
*/
public String getScriptsXmlUrl() {
return scriptsXmlUrl;
}
/**
* @return the vmInstanceType
*/
public String getVmInstanceType() {
return vmInstanceType;
}
/**
* @param vmInstanceType
* the vmInstanceType to set
*/
public void setVmInstanceType(String vmInstanceType) {
this.vmInstanceType = vmInstanceType;
}
/**
* @return the numUsersPerAgent
*/
public int getNumUsersPerAgent() {
return numUsersPerAgent;
}
/**
* @param numUsersPerAgent
* the numUsersPerAgent to set
*/
public void setNumUsersPerAgent(int numUsersPerAgent) {
this.numUsersPerAgent = numUsersPerAgent;
}
/**
* @{inheritDoc
*/
@Override
public int getTotalVirtualUsers() {
int result = 0;
for (RegionRequest region : regions) {
result += JobUtil.parseUserString(region.getUsers());
}
return result;
}
/**
* @{inheritDoc
*/
@Override
public JobQueueStatus getStatus() {
return status;
}
/**
* @{inheritDoc
*/
@Override
public Set<? extends RegionRequest> getRegions() {
return regions;
}
/**
* @{inheritDoc
*/
@Override
public Set<? extends Notification> getNotifications() {
return notifications;
}
/**
* @{inheritDoc
*/
@Override
public Set<Integer> getDataFileIds() {
return dataFileIds;
}
/**
* @{inheritDoc private String id;
*
* private IncrementStrategy incrementStrategy = IncrementStrategy.increasing; private Location
* location = Location.san_diego; private TerminationPolicy terminationPolicy = TerminationPolicy.time;
* private int rampTime; private int baselineVirtualUsers; private int simulationTime; private int
* userIntervalIncrement; private ReportingMode reportingMode = ReportingMode.None; private
* JobQueueStatus status = JobQueueStatus.Created; private Set<? extends RegionRequest> regions = new
* HashSet<RegionRequest>(); private Set<? extends Notification> notifications = new
* HashSet<Notification>(); private Set<Integer> dataFileIds = new HashSet<Integer>();
*/
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.append("location", location)
.append("terminationPolicy", terminationPolicy)
.append("rampTime", rampTime)
.append("loggingProfile", LoggingProfile.fromString(loggingProfile).getDisplayName())
.append("stopBehavior", StopBehavior.fromString(stopBehavior).getDisplay())
.append("simulationTime", simulationTime)
.append("useEips", useEips)
.append("baselineVirtualUsers", baselineVirtualUsers)
.append("userIntervalIncrement", userIntervalIncrement)
.append("reportingMode", reportingMode)
.append("regions", ToStringBuilder.reflectionToString(regions))
.toString();
}
/**
* @{inheritDoc
*/
@Override
public boolean equals(Object obj) {
if (!(obj instanceof JobRequestImpl)) {
return false;
}
JobRequest o = (JobRequest) obj;
return new EqualsBuilder().append(o.getId(), getId()).isEquals();
}
/**
* @{inheritDoc
*/
@Override
public int hashCode() {
return new HashCodeBuilder(29, 45).append(getId()).toHashCode();
}
/**
* Fluent Builder for JobRequests
*
* @author dangleton
*
*/
public static class Builder extends JobRequestBuilderBase<Builder> {
public Builder() {
super(new JobRequestImpl());
}
public JobRequest build() {
return getInstance();
}
}
/**
*
* JobRequestImpl JobRequestBuilderBase
*
* @author dangleton
*
* @param <GeneratorT>
*/
static class JobRequestBuilderBase<GeneratorT extends JobRequestBuilderBase<GeneratorT>> {
private JobRequestImpl instance;
protected JobRequestBuilderBase(JobRequestImpl aInstance) {
instance = aInstance;
}
protected JobRequest getInstance() {
return instance;
}
@SuppressWarnings("unchecked")
public GeneratorT withId(String aValue) {
instance.id = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withStopBehavior(String aValue) {
instance.stopBehavior = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withVmInstanceType(String aValue) {
instance.vmInstanceType = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withnumUsersPerAgent(int aValue) {
instance.numUsersPerAgent = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withUseEips(boolean aValue) {
instance.useEips = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withLoggingProfile(String aValue) {
instance.loggingProfile = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withIncrementStrategy(IncrementStrategy aValue) {
instance.incrementStrategy = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withLocation(String aValue) {
instance.location = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withTerminationPolicy(TerminationPolicy aValue) {
instance.terminationPolicy = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withRampTime(long aValue) {
instance.rampTime = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withBaselineVirtualUsers(int aValue) {
instance.baselineVirtualUsers = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withSimulationTime(long aValue) {
instance.simulationTime = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withUserIntervalIncrement(int aValue) {
instance.userIntervalIncrement = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withReportingMode(String aValue) {
instance.reportingMode = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withStatus(JobQueueStatus aValue) {
instance.status = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withRegions(Set<? extends RegionRequest> aValue) {
instance.regions = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withAddedRegion(RegionRequest aValue) {
if (instance.getRegions() == null) {
instance.regions = new HashSet<RegionRequest>();
}
((HashSet<RegionRequest>) instance.getRegions()).add(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withNofitications(Set<? extends Notification> aValue) {
instance.notifications = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withAddedNofitication(Notification aValue) {
if (instance.getNotifications() == null) {
instance.notifications = new HashSet<Notification>();
}
((HashSet<Notification>) instance.getNotifications()).add(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withDataFileIds(Set<Integer> aValue) {
instance.dataFileIds = aValue;
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withAddedDataFileId(Integer aValue) {
if (instance.getDataFileIds() == null) {
instance.dataFileIds = new HashSet<Integer>();
}
((HashSet<Integer>) instance.getDataFileIds()).add(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT withScriptXmlUrl(String aValue) {
instance.scriptsXmlUrl = aValue;
return (GeneratorT) this;
}
}
}