package org.openstack.atlas.usagerefactor.processor.mapper;
import org.openstack.atlas.service.domain.entities.LoadBalancer;
import org.openstack.atlas.service.domain.events.UsageEvent;
import org.openstack.atlas.service.domain.usage.BitTag;
import org.openstack.atlas.service.domain.usage.BitTags;
import org.openstack.atlas.service.domain.usage.entities.LoadBalancerHostUsage;
import org.openstack.atlas.usagerefactor.SnmpUsage;
import java.util.Calendar;
public class UsageEventMapper {
private LoadBalancer loadBalancer;
private boolean isServiceNetLb;
private SnmpUsage snmpUsage;
private UsageEvent usageEvent;
private Calendar pollTime;
private Integer tagsBitmask;
private Integer numVips;
public UsageEventMapper(LoadBalancer loadBalancer,
boolean isServiceNetLb, SnmpUsage snmpUsage, UsageEvent usageEvent, Calendar polltime) {
this.loadBalancer = loadBalancer;
this.isServiceNetLb = isServiceNetLb;
this.snmpUsage = snmpUsage;
this.usageEvent = usageEvent;
this.pollTime = polltime;
}
public UsageEventMapper(LoadBalancer loadBalancer, SnmpUsage usage, UsageEvent usageEvent, Calendar pollTime,
Integer tagsBitmask, Integer numVips) {
this.loadBalancer = loadBalancer;
this.snmpUsage = usage;
this.usageEvent = usageEvent;
this.pollTime = pollTime;
this.tagsBitmask = tagsBitmask;
this.numVips = numVips;
}
public LoadBalancerHostUsage mapSnmpUsageToUsageEvent() {
LoadBalancerHostUsage newUsageEvent = new LoadBalancerHostUsage();
newUsageEvent.setAccountId(loadBalancer.getAccountId());
newUsageEvent.setLoadbalancerId(loadBalancer.getId());
newUsageEvent.setHostId(snmpUsage.getHostId());
newUsageEvent.setPollTime(pollTime);
newUsageEvent.setEventType(usageEvent);
newUsageEvent.setOutgoingTransfer(snmpUsage.getBytesOut());
newUsageEvent.setOutgoingTransferSsl(snmpUsage.getBytesOutSsl());
newUsageEvent.setIncomingTransfer(snmpUsage.getBytesIn());
newUsageEvent.setIncomingTransferSsl(snmpUsage.getBytesInSsl());
newUsageEvent.setConcurrentConnections(snmpUsage.getConcurrentConnections());
newUsageEvent.setConcurrentConnectionsSsl(snmpUsage.getConcurrentConnectionsSsl());
if (numVips == null) {
numVips = loadBalancer.getLoadBalancerJoinVipSet().size();
}
newUsageEvent.setNumVips(numVips);
if (tagsBitmask == null) {
tagsBitmask = calculateTags();
}
newUsageEvent.setTagsBitmask(tagsBitmask);
return newUsageEvent;
}
public LoadBalancerHostUsage mapPreviousUsageEvent(LoadBalancerHostUsage previousUsage) {
LoadBalancerHostUsage newUsageEvent = new LoadBalancerHostUsage();
newUsageEvent.setAccountId(previousUsage.getAccountId());
newUsageEvent.setLoadbalancerId(previousUsage.getLoadbalancerId());
newUsageEvent.setHostId(previousUsage.getHostId());
newUsageEvent.setPollTime(pollTime);
newUsageEvent.setEventType(usageEvent);
newUsageEvent.setOutgoingTransfer(previousUsage.getOutgoingTransfer());
newUsageEvent.setOutgoingTransferSsl(previousUsage.getOutgoingTransferSsl());
newUsageEvent.setIncomingTransfer(previousUsage.getIncomingTransfer());
newUsageEvent.setIncomingTransferSsl(previousUsage.getIncomingTransferSsl());
newUsageEvent.setConcurrentConnections(previousUsage.getConcurrentConnections());
newUsageEvent.setConcurrentConnectionsSsl(previousUsage.getConcurrentConnectionsSsl());
newUsageEvent.setNumVips(loadBalancer.getLoadBalancerJoinVipSet().size());
int tags = calculateTags();
newUsageEvent.setTagsBitmask(tags);
return newUsageEvent;
}
public int calculateTags() {
BitTags tags = new BitTags(0);
switch (usageEvent) {
case CREATE_LOADBALANCER:
tags.flipAllTagsOff();
break;
case DELETE_LOADBALANCER:
tags.flipTagOff(BitTag.SSL);
tags.flipTagOff(BitTag.SSL_MIXED_MODE);
break;
case SSL_OFF:
tags.flipTagOff(BitTag.SSL);
tags.flipTagOff(BitTag.SSL_MIXED_MODE);
break;
case SSL_ONLY_ON:
tags.flipTagOn(BitTag.SSL);
tags.flipTagOff(BitTag.SSL_MIXED_MODE);
break;
case SSL_MIXED_ON:
tags.flipTagOn(BitTag.SSL);
tags.flipTagOn(BitTag.SSL_MIXED_MODE);
break;
default:
}
if (isServiceNetLb) {
tags.flipTagOn(BitTag.SERVICENET_LB);
}
return tags.toInt();
}
}