/** * Licensed 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 org.apache.aurora.scheduler.quota; import java.util.Objects; import com.google.common.base.MoreObjects; import org.apache.aurora.scheduler.resources.ResourceBag; import static java.util.Objects.requireNonNull; /** * Wraps allocated quota and consumption details. */ public class QuotaInfo { private final ResourceBag quota; private final ResourceBag prodSharedConsumption; private final ResourceBag prodDedicatedConsumption; private final ResourceBag nonProdSharedConsumption; private final ResourceBag nonProdDedicatedConsumption; QuotaInfo( ResourceBag quota, ResourceBag prodSharedConsumption, ResourceBag prodDedicatedConsumption, ResourceBag nonProdSharedConsumption, ResourceBag nonProdDedicatedConsumption) { this.quota = requireNonNull(quota); this.prodSharedConsumption = requireNonNull(prodSharedConsumption); this.prodDedicatedConsumption = requireNonNull(prodDedicatedConsumption); this.nonProdSharedConsumption = requireNonNull(nonProdSharedConsumption); this.nonProdDedicatedConsumption = requireNonNull(nonProdDedicatedConsumption); } /** * Total quota available. * * @return Available quota. */ public ResourceBag getQuota() { return quota; } /** * Quota consumed by production jobs from a shared resource pool. * * @return Production job consumption. */ public ResourceBag getProdSharedConsumption() { return prodSharedConsumption; } /** * Resources consumed by production jobs from a dedicated resource pool. * * @return Production dedicated job consumption. */ public ResourceBag getProdDedicatedConsumption() { return prodDedicatedConsumption; } /** * Resources consumed by non-production jobs from a shared resource pool. * * @return Non production job consumption. */ public ResourceBag getNonProdSharedConsumption() { return nonProdSharedConsumption; } /** * Resources consumed by non-production jobs from a dedicated resource pool. * * @return Non production dedicated job consumption. */ public ResourceBag getNonProdDedicatedConsumption() { return nonProdDedicatedConsumption; } @Override public boolean equals(Object o) { if (!(o instanceof QuotaInfo)) { return false; } QuotaInfo other = (QuotaInfo) o; return Objects.equals(quota, other.quota) && Objects.equals(prodSharedConsumption, other.prodSharedConsumption) && Objects.equals(prodDedicatedConsumption, other.prodDedicatedConsumption) && Objects.equals(nonProdSharedConsumption, other.nonProdSharedConsumption) && Objects.equals(nonProdDedicatedConsumption, other.nonProdDedicatedConsumption); } @Override public int hashCode() { return Objects.hash( quota, prodSharedConsumption, prodDedicatedConsumption, nonProdSharedConsumption, nonProdDedicatedConsumption); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("quota", quota) .add("prodSharedConsumption", prodSharedConsumption) .add("prodDedicatedConsumption", prodDedicatedConsumption) .add("nonProdSharedConsumption", nonProdSharedConsumption) .add("nonProdDedicatedConsumption", nonProdDedicatedConsumption) .toString(); } }