blob: 3a3dfa47502161e7ee6deb4011dcf467b7ba9dec [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.agent.api.to;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.cloud.network.as.AutoScalePolicy;
import com.cloud.network.as.AutoScaleVmGroup;
import com.cloud.network.as.AutoScaleVmProfile;
import com.cloud.network.as.Condition;
import com.cloud.network.as.Counter;
import com.cloud.network.lb.LoadBalancingRule.LbAutoScalePolicy;
import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmGroup;
import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmProfile;
import com.cloud.network.lb.LoadBalancingRule.LbCondition;
import com.cloud.network.lb.LoadBalancingRule.LbDestination;
import com.cloud.network.lb.LoadBalancingRule.LbHealthCheckPolicy;
import com.cloud.network.lb.LoadBalancingRule.LbSslCert;
import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;
import com.cloud.utils.Pair;
public class LoadBalancerTO {
String uuid;
String srcIp;
int srcPort;
String protocol;
String lbProtocol;
String algorithm;
boolean revoked;
boolean alreadyAdded;
boolean inline;
String srcIpVlan;
String srcIpGateway;
String srcIpNetmask;
Long networkId;
DestinationTO[] destinations;
private StickinessPolicyTO[] stickinessPolicies;
private HealthCheckPolicyTO[] healthCheckPolicies;
private LbSslCert sslCert; /* XXX: Should this be SslCertTO? */
private AutoScaleVmGroupTO autoScaleVmGroupTO;
final static int MAX_STICKINESS_POLICIES = 1;
final static int MAX_HEALTHCHECK_POLICIES = 1;
public LoadBalancerTO(String uuid, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, boolean inline,
List<LbDestination> destinations) {
if (destinations == null) { // for autoscaleconfig destinations will be null;
destinations = new ArrayList<LbDestination>();
}
this.uuid = uuid;
this.srcIp = srcIp;
this.srcPort = srcPort;
this.protocol = protocol;
this.algorithm = algorithm;
this.revoked = revoked;
this.alreadyAdded = alreadyAdded;
this.inline = inline;
this.destinations = new DestinationTO[destinations.size()];
this.stickinessPolicies = null;
this.sslCert = null;
this.lbProtocol = null;
int i = 0;
for (LbDestination destination : destinations) {
this.destinations[i++] = new DestinationTO(destination.getIpAddress(), destination.getDestinationPortStart(), destination.isRevoked(), false);
}
}
public LoadBalancerTO(String id, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, boolean inline,
List<LbDestination> argDestinations, List<LbStickinessPolicy> stickinessPolicies) {
this(id, srcIp, srcPort, protocol, algorithm, revoked, alreadyAdded, inline, argDestinations, stickinessPolicies, null, null, null);
}
public LoadBalancerTO(String id, List<DestinationTO> destinations) {
this.uuid = id;
int i = 0;
this.destinations = new DestinationTO[destinations.size()];
for (DestinationTO destination : destinations) {
this.destinations[i++] = new DestinationTO(destination.getDestIp(), destination.getDestPort(), destination.getMonitorState());
}
}
public LoadBalancerTO(String id, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, boolean inline,
List<LbDestination> argDestinations, List<LbStickinessPolicy> stickinessPolicies, List<LbHealthCheckPolicy> healthCheckPolicies, LbSslCert sslCert,
String lbProtocol) {
this(id, srcIp, srcPort, protocol, algorithm, revoked, alreadyAdded, inline, argDestinations);
this.stickinessPolicies = null;
this.healthCheckPolicies = null;
if (stickinessPolicies != null && stickinessPolicies.size() > 0) {
this.stickinessPolicies = new StickinessPolicyTO[MAX_STICKINESS_POLICIES];
int index = 0;
for (LbStickinessPolicy stickinesspolicy : stickinessPolicies) {
if (!stickinesspolicy.isRevoked()) {
this.stickinessPolicies[index] = new StickinessPolicyTO(stickinesspolicy.getMethodName(), stickinesspolicy.getParams());
index++;
if (index == MAX_STICKINESS_POLICIES)
break;
}
}
if (index == 0)
this.stickinessPolicies = null;
}
if (healthCheckPolicies != null && healthCheckPolicies.size() > 0) {
this.healthCheckPolicies = new HealthCheckPolicyTO[MAX_HEALTHCHECK_POLICIES];
int index = 0;
for (LbHealthCheckPolicy hcp : healthCheckPolicies) {
this.healthCheckPolicies[0] =
new HealthCheckPolicyTO(hcp.getpingpath(), hcp.getDescription(), hcp.getResponseTime(), hcp.getHealthcheckInterval(), hcp.getHealthcheckThresshold(),
hcp.getUnhealthThresshold(), hcp.isRevoked());
index++;
if (index == MAX_HEALTHCHECK_POLICIES)
break;
}
if (index == 0)
this.healthCheckPolicies = null;
}
this.sslCert = sslCert;
this.lbProtocol = lbProtocol;
}
protected LoadBalancerTO() {
}
public String getUuid() {
return uuid;
}
public String getSrcIp() {
return srcIp;
}
public int getSrcPort() {
return srcPort;
}
public String getAlgorithm() {
return algorithm;
}
public String getProtocol() {
return protocol;
}
public String getLbProtocol() {
return lbProtocol;
}
public void setLbProtocol(String lbProtocol) {
this.lbProtocol = lbProtocol;
}
public boolean isRevoked() {
return revoked;
}
public boolean isAlreadyAdded() {
return alreadyAdded;
}
public boolean isInline() {
return inline;
}
public StickinessPolicyTO[] getStickinessPolicies() {
return stickinessPolicies;
}
public HealthCheckPolicyTO[] getHealthCheckPolicies() {
return healthCheckPolicies;
}
public DestinationTO[] getDestinations() {
return destinations;
}
public AutoScaleVmGroupTO getAutoScaleVmGroupTO() {
return autoScaleVmGroupTO;
}
public void setAutoScaleVmGroupTO(AutoScaleVmGroupTO autoScaleVmGroupTO) {
this.autoScaleVmGroupTO = autoScaleVmGroupTO;
}
public boolean isAutoScaleVmGroupTO() {
return this.autoScaleVmGroupTO != null;
}
public LbSslCert getSslCert() {
return this.sslCert;
}
public String getSrcIpVlan() {
return srcIpVlan;
}
public void setSrcIpVlan(String srcIpVlan) {
this.srcIpVlan = srcIpVlan;
}
public Long getNetworkId() {
return networkId;
}
public void setNetworkId(long id) {
this.networkId = id;
}
public String getSrcIpGateway() {
return srcIpGateway;
}
public void setSrcIpGateway(String srcIpGateway) {
this.srcIpGateway = srcIpGateway;
}
public String getSrcIpNetmask() {
return srcIpNetmask;
}
public void setSrcIpNetmask(String srcIpNetmask) {
this.srcIpNetmask = srcIpNetmask;
}
public static class StickinessPolicyTO {
private String methodName;
private List<Pair<String, String>> params;
public String getMethodName() {
return methodName;
}
public List<Pair<String, String>> getParams() {
return params;
}
public StickinessPolicyTO(String methodName, List<Pair<String, String>> paramsList) {
this.methodName = methodName;
this.params = paramsList;
}
}
public static class HealthCheckPolicyTO {
private String pingPath;
private String description;
private int responseTime;
private int healthcheckInterval;
private int healthcheckThresshold;
private int unhealthThresshold;
private boolean revoked = false;
public HealthCheckPolicyTO(String pingPath, String description, int responseTime, int healthcheckInterval, int healthcheckThresshold, int unhealthThresshold,
boolean revoke) {
this.description = description;
this.pingPath = pingPath;
this.responseTime = responseTime;
this.healthcheckInterval = healthcheckInterval;
this.healthcheckThresshold = healthcheckThresshold;
this.unhealthThresshold = unhealthThresshold;
this.revoked = revoke;
}
public HealthCheckPolicyTO() {
}
public String getpingPath() {
return pingPath;
}
public String getDescription() {
return description;
}
public int getResponseTime() {
return responseTime;
}
public int getHealthcheckInterval() {
return healthcheckInterval;
}
public int getHealthcheckThresshold() {
return healthcheckThresshold;
}
public int getUnhealthThresshold() {
return unhealthThresshold;
}
public void setRevoke(boolean revoke) {
this.revoked = revoke;
}
public boolean isRevoked() {
return revoked;
}
}
public static class DestinationTO {
String destIp;
int destPort;
boolean revoked;
boolean alreadyAdded;
String monitorState;
public DestinationTO(String destIp, int destPort, boolean revoked, boolean alreadyAdded) {
this.destIp = destIp;
this.destPort = destPort;
this.revoked = revoked;
this.alreadyAdded = alreadyAdded;
}
public DestinationTO(String destIp, int destPort, String monitorState) {
this.destIp = destIp;
this.destPort = destPort;
this.monitorState = monitorState;
}
protected DestinationTO() {
}
public String getDestIp() {
return destIp;
}
public int getDestPort() {
return destPort;
}
public boolean isRevoked() {
return revoked;
}
public boolean isAlreadyAdded() {
return alreadyAdded;
}
public void setMonitorState(String state) {
this.monitorState = state;
}
public String getMonitorState() {
return monitorState;
}
}
public static class CounterTO implements Serializable {
private static final long serialVersionUID = 2L;
private final String name;
private final String source;
private final String value;
public CounterTO(String name, String source, String value) {
this.name = name;
this.source = source;
this.value = value;
}
public String getName() {
return name;
}
public String getSource() {
return source;
}
public String getValue() {
return value;
}
}
public static class ConditionTO implements Serializable {
private static final long serialVersionUID = 2L;
private final long threshold;
private final String relationalOperator;
private final CounterTO counter;
public ConditionTO(long threshold, String relationalOperator, CounterTO counter) {
this.threshold = threshold;
this.relationalOperator = relationalOperator;
this.counter = counter;
}
public long getThreshold() {
return threshold;
}
public String getRelationalOperator() {
return relationalOperator;
}
public CounterTO getCounter() {
return counter;
}
}
public static class AutoScalePolicyTO implements Serializable {
private static final long serialVersionUID = 2L;
private final long id;
private final int duration;
private final int quietTime;
private String action;
boolean revoked;
private final List<ConditionTO> conditions;
public AutoScalePolicyTO(long id, int duration, int quietTime, String action, List<ConditionTO> conditions, boolean revoked) {
this.id = id;
this.duration = duration;
this.quietTime = quietTime;
this.conditions = conditions;
this.action = action;
this.revoked = revoked;
}
public long getId() {
return id;
}
public int getDuration() {
return duration;
}
public int getQuietTime() {
return quietTime;
}
public String getAction() {
return action;
}
public boolean isRevoked() {
return revoked;
}
public List<ConditionTO> getConditions() {
return conditions;
}
}
public static class AutoScaleVmProfileTO implements Serializable {
private static final long serialVersionUID = 2L;
private final String zoneId;
private final String domainId;
private final String serviceOfferingId;
private final String templateId;
private final String otherDeployParams;
private final List<Pair<String, String>> counterParamList;
private final Integer destroyVmGraceperiod;
private final String cloudStackApiUrl;
private final String autoScaleUserApiKey;
private final String autoScaleUserSecretKey;
private final String vmName;
private final String networkId;
public AutoScaleVmProfileTO(String zoneId, String domainId, String cloudStackApiUrl, String autoScaleUserApiKey, String autoScaleUserSecretKey,
String serviceOfferingId, String templateId, String vmName, String networkId, String otherDeployParams, List<Pair<String, String>> counterParamList,
Integer destroyVmGraceperiod) {
this.zoneId = zoneId;
this.domainId = domainId;
this.serviceOfferingId = serviceOfferingId;
this.templateId = templateId;
this.otherDeployParams = otherDeployParams;
this.counterParamList = counterParamList;
this.destroyVmGraceperiod = destroyVmGraceperiod;
this.cloudStackApiUrl = cloudStackApiUrl;
this.autoScaleUserApiKey = autoScaleUserApiKey;
this.autoScaleUserSecretKey = autoScaleUserSecretKey;
this.vmName = vmName;
this.networkId = networkId;
}
public String getZoneId() {
return zoneId;
}
public String getDomainId() {
return domainId;
}
public String getServiceOfferingId() {
return serviceOfferingId;
}
public String getTemplateId() {
return templateId;
}
public String getOtherDeployParams() {
return otherDeployParams;
}
public List<Pair<String, String>> getCounterParamList() {
return counterParamList;
}
public Integer getDestroyVmGraceperiod() {
return destroyVmGraceperiod;
}
public String getCloudStackApiUrl() {
return cloudStackApiUrl;
}
public String getAutoScaleUserApiKey() {
return autoScaleUserApiKey;
}
public String getAutoScaleUserSecretKey() {
return autoScaleUserSecretKey;
}
public String getVmName() {
return vmName;
}
public String getNetworkId() {
return networkId;
}
}
public static class AutoScaleVmGroupTO implements Serializable {
private static final long serialVersionUID = 2L;
private final String uuid;
private final int minMembers;
private final int maxMembers;
private final int memberPort;
private final int interval;
private final List<AutoScalePolicyTO> policies;
private final AutoScaleVmProfileTO profile;
private final String state;
private final String currentState;
AutoScaleVmGroupTO(String uuid, int minMembers, int maxMembers, int memberPort, int interval, List<AutoScalePolicyTO> policies, AutoScaleVmProfileTO profile,
String state, String currentState) {
this.uuid = uuid;
this.minMembers = minMembers;
this.maxMembers = maxMembers;
this.memberPort = memberPort;
this.interval = interval;
this.policies = policies;
this.profile = profile;
this.state = state;
this.currentState = currentState;
}
public String getUuid() {
return uuid;
}
public int getMinMembers() {
return minMembers;
}
public int getMaxMembers() {
return maxMembers;
}
public int getMemberPort() {
return memberPort;
}
public int getInterval() {
return interval;
}
public List<AutoScalePolicyTO> getPolicies() {
return policies;
}
public AutoScaleVmProfileTO getProfile() {
return profile;
}
public String getState() {
return state;
}
public String getCurrentState() {
return currentState;
}
}
public void setAutoScaleVmGroup(LbAutoScaleVmGroup lbAutoScaleVmGroup) {
List<LbAutoScalePolicy> lbAutoScalePolicies = lbAutoScaleVmGroup.getPolicies();
List<AutoScalePolicyTO> autoScalePolicyTOs = new ArrayList<AutoScalePolicyTO>(lbAutoScalePolicies.size());
for (LbAutoScalePolicy lbAutoScalePolicy : lbAutoScalePolicies) {
List<LbCondition> lbConditions = lbAutoScalePolicy.getConditions();
List<ConditionTO> conditionTOs = new ArrayList<ConditionTO>(lbConditions.size());
for (LbCondition lbCondition : lbConditions) {
Counter counter = lbCondition.getCounter();
CounterTO counterTO = new CounterTO(counter.getName(), counter.getSource().toString(), "" + counter.getValue());
Condition condition = lbCondition.getCondition();
ConditionTO conditionTO = new ConditionTO(condition.getThreshold(), condition.getRelationalOperator().toString(), counterTO);
conditionTOs.add(conditionTO);
}
AutoScalePolicy autoScalePolicy = lbAutoScalePolicy.getPolicy();
autoScalePolicyTOs.add(new AutoScalePolicyTO(autoScalePolicy.getId(), autoScalePolicy.getDuration(), autoScalePolicy.getQuietTime(),
autoScalePolicy.getAction(), conditionTOs, lbAutoScalePolicy.isRevoked()));
}
LbAutoScaleVmProfile lbAutoScaleVmProfile = lbAutoScaleVmGroup.getProfile();
AutoScaleVmProfile autoScaleVmProfile = lbAutoScaleVmProfile.getProfile();
AutoScaleVmProfileTO autoScaleVmProfileTO =
new AutoScaleVmProfileTO(lbAutoScaleVmProfile.getZoneId(), lbAutoScaleVmProfile.getDomainId(), lbAutoScaleVmProfile.getCsUrl(),
lbAutoScaleVmProfile.getAutoScaleUserApiKey(), lbAutoScaleVmProfile.getAutoScaleUserSecretKey(), lbAutoScaleVmProfile.getServiceOfferingId(),
lbAutoScaleVmProfile.getTemplateId(), lbAutoScaleVmProfile.getVmName(), lbAutoScaleVmProfile.getNetworkId(), autoScaleVmProfile.getOtherDeployParams(),
autoScaleVmProfile.getCounterParams(), autoScaleVmProfile.getDestroyVmGraceperiod());
AutoScaleVmGroup autoScaleVmGroup = lbAutoScaleVmGroup.getVmGroup();
autoScaleVmGroupTO =
new AutoScaleVmGroupTO(autoScaleVmGroup.getUuid(), autoScaleVmGroup.getMinMembers(), autoScaleVmGroup.getMaxMembers(), autoScaleVmGroup.getMemberPort(),
autoScaleVmGroup.getInterval(), autoScalePolicyTOs, autoScaleVmProfileTO, autoScaleVmGroup.getState(), lbAutoScaleVmGroup.getCurrentState());
}
}