package com.sequenceiq.cloudbreak.domain;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import com.sequenceiq.cloudbreak.api.model.UsageStatus;
@Entity
@NamedQueries({
@NamedQuery(
name = "CloudbreakUsage.findOpensForStack",
query = "SELECT u FROM CloudbreakUsage u "
+ "WHERE u.stackId = :stackId "
+ "AND u.status = 'OPEN'"),
@NamedQuery(
name = "CloudbreakUsage.findStoppedForStack",
query = "SELECT u FROM CloudbreakUsage u "
+ "WHERE u.stackId = :stackId "
+ "AND u.status = 'STOPPED'"),
@NamedQuery(
name = "CloudbreakUsage.getOpenUsageByStackAndGroupName",
query = "SELECT u FROM CloudbreakUsage u "
+ "WHERE u.stackId = :stackId "
+ "AND u.instanceGroup = :instanceGroupName "
+ "AND u.status = 'OPEN'"),
@NamedQuery(
name = "CloudbreakUsage.findAllOpenAndStopped",
query = "SELECT u FROM CloudbreakUsage u "
+ "WHERE (u.status = 'STOPPED' "
+ "OR u.status = 'OPEN')"
+ "AND u.day < :today")
})
public class CloudbreakUsage implements ProvisionEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "cloudbreakusage_generator")
@SequenceGenerator(name = "cloudbreakusage_generator", sequenceName = "cloudbreakusage_id_seq", allocationSize = 1)
private Long id;
@Column(nullable = false)
private String owner;
@Column(nullable = false)
private String account;
@Column(nullable = false)
private Long stackId;
@Column(nullable = false)
private String stackName;
@Column(nullable = false)
private String provider;
@Column(nullable = false)
private String region;
private String availabilityZone;
@Column(nullable = false)
private Date day;
@Column(nullable = false)
private Long instanceHours;
@Column(nullable = false)
private Double costs;
@Column(nullable = false)
private String instanceType;
@Column(nullable = false)
private String instanceGroup;
@Column
private Date periodStarted;
@Column
private String duration;
@Column
private Integer peak;
@Column
private String flexId;
@Column
private String smartSenseId;
@Column
private String stackUuid;
@Column
private String parentUuid;
@Enumerated(EnumType.STRING)
private UsageStatus status;
@Column
private Integer instanceNum;
private Long blueprintId;
private String blueprintName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getProvider() {
return provider;
}
public void setProvider(String provider) {
this.provider = provider;
}
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
public Long getInstanceHours() {
return instanceHours;
}
public void setInstanceHours(Long instanceHours) {
this.instanceHours = instanceHours;
}
public Date getDay() {
return day;
}
public void setDay(Date day) {
this.day = day;
}
public Long getStackId() {
return stackId;
}
public void setStackId(Long stackId) {
this.stackId = stackId;
}
public String getStackName() {
return stackName;
}
public void setStackName(String stackName) {
this.stackName = stackName;
}
public String getInstanceType() {
return instanceType;
}
public void setInstanceType(String instanceType) {
this.instanceType = instanceType;
}
public String getInstanceGroup() {
return instanceGroup;
}
public void setInstanceGroup(String instanceGroup) {
this.instanceGroup = instanceGroup;
}
public String getAvailabilityZone() {
return availabilityZone;
}
public void setAvailabilityZone(String availabilityZone) {
this.availabilityZone = availabilityZone;
}
public Long getBlueprintId() {
return blueprintId;
}
public void setBlueprintId(Long blueprintId) {
this.blueprintId = blueprintId;
}
public String getBlueprintName() {
return blueprintName;
}
public void setBlueprintName(String blueprintName) {
this.blueprintName = blueprintName;
}
public Date getPeriodStarted() {
return periodStarted;
}
public void setPeriodStarted(Date periodStarted) {
this.periodStarted = periodStarted;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
public UsageStatus getStatus() {
return status;
}
public void setStatus(UsageStatus status) {
this.status = status;
}
public Integer getInstanceNum() {
return instanceNum;
}
public void setInstanceNum(Integer instanceNum) {
this.instanceNum = instanceNum;
}
public Integer getPeak() {
return peak;
}
public void setPeak(Integer peak) {
this.peak = peak;
}
public String getFlexId() {
return flexId;
}
public void setFlexId(String flexId) {
this.flexId = flexId;
}
public String getStackUuid() {
return stackUuid;
}
public void setStackUuid(String stackUuid) {
this.stackUuid = stackUuid;
}
public String getParentUuid() {
return parentUuid;
}
public void setParentUuid(String parentUuid) {
this.parentUuid = parentUuid;
}
public String getSmartSenseId() {
return smartSenseId;
}
public void setSmartSenseId(String smartSenseId) {
this.smartSenseId = smartSenseId;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("CloudbreakUsage{");
sb.append("id=").append(id);
sb.append(", owner='").append(owner).append('\'');
sb.append(", account='").append(account).append('\'');
sb.append(", day=").append(day);
sb.append(", provider='").append(provider).append('\'');
sb.append(", region='").append(region).append('\'');
sb.append(", availabilityZone='").append(availabilityZone).append('\'');
sb.append(", instanceHours='").append(instanceHours).append('\'');
sb.append(", stackId='").append(stackId).append('\'');
sb.append(", stackName='").append(stackName).append('\'');
sb.append(", instanceType='").append(instanceType).append('\'');
sb.append(", instanceGroup='").append(instanceGroup).append('\'');
sb.append(", blueprintId='").append(blueprintId).append('\'');
sb.append(", blueprintName='").append(blueprintName).append('\'');
sb.append(", costs='").append(costs).append('\'');
sb.append('}');
return sb.toString();
}
public Double getCosts() {
return costs;
}
public void setCosts(Double costs) {
this.costs = costs;
}
}