diff options
Diffstat (limited to 'vespa-athenz/src/main/java')
4 files changed, 120 insertions, 0 deletions
diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/DefaultZmsClient.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/DefaultZmsClient.java index 136ae1df8ae..8ffb9331ddb 100644 --- a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/DefaultZmsClient.java +++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/DefaultZmsClient.java @@ -23,6 +23,7 @@ import com.yahoo.vespa.athenz.client.zms.bindings.ResponseListEntity; import com.yahoo.vespa.athenz.client.zms.bindings.RoleEntity; import com.yahoo.vespa.athenz.client.zms.bindings.ServiceEntity; import com.yahoo.vespa.athenz.client.zms.bindings.ServiceListResponseEntity; +import com.yahoo.vespa.athenz.client.zms.bindings.StatisticsEntity; import com.yahoo.vespa.athenz.client.zms.bindings.TenancyRequestEntity; import com.yahoo.vespa.athenz.identity.ServiceIdentityProvider; import com.yahoo.vespa.athenz.utils.AthenzIdentities; @@ -408,6 +409,17 @@ public class DefaultZmsClient extends ClientBase implements ZmsClient { execute(request, response -> readEntity(response, Void.class)); } + @Override + public QuotaUsage getQuotaUsage() { + var uri = zmsUrl.resolve(String.format("domain/%s/quota", identity.getDomainName())); + var quotaEntity = execute(RequestBuilder.get(uri).build(), response -> readEntity(response, StatisticsEntity.class)); + + uri = zmsUrl.resolve(String.format("domain/%s/stats", identity.getDomainName())); + var usageEntity = execute(RequestBuilder.get(uri).build(), response -> readEntity(response, StatisticsEntity.class)); + + return QuotaUsage.calculateUsage(usageEntity, quotaEntity); + } + public AthenzRoleInformation getFullRoleInformation(AthenzRole role) { var uri = zmsUrl.resolve(String.format("domain/%s/role/%s?pending=true&auditLog=true", role.domain().getName(), role.roleName())); var request = RequestBuilder.get(uri).build(); diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/QuotaUsage.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/QuotaUsage.java new file mode 100644 index 00000000000..8e9c7de9272 --- /dev/null +++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/QuotaUsage.java @@ -0,0 +1,55 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.athenz.client.zms; + +import com.yahoo.vespa.athenz.client.zms.bindings.StatisticsEntity; + +/** + * @author olaa + */ +public class QuotaUsage { + + private double subdomainUsage; + private double roleUsage; + private double policyUsage; + private double serviceUsage; + private double groupUsage; + + + public QuotaUsage(double subdomainUsage, double roleUsage, double policyUsage, double serviceUsage, double groupUsage) { + this.subdomainUsage = subdomainUsage; + this.roleUsage = roleUsage; + this.policyUsage = policyUsage; + this.serviceUsage = serviceUsage; + this.groupUsage = groupUsage; + } + + public static QuotaUsage calculateUsage(StatisticsEntity used, StatisticsEntity quota) { + return new QuotaUsage( + (double) used.getSubdomains() / quota.getSubdomains(), + (double) used.getRoles() / quota.getRoles(), + (double) used.getPolicies() / quota.getPolicies(), + (double) used.getServices() / quota.getServices(), + (double) used.getGroups() / quota.getGroups() + ); + } + + public double getSubdomainUsage() { + return subdomainUsage; + } + + public double getRoleUsage() { + return roleUsage; + } + + public double getPolicyUsage() { + return policyUsage; + } + + public double getServiceUsage() { + return serviceUsage; + } + + public double getGroupUsage() { + return groupUsage; + } +}
\ No newline at end of file diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/ZmsClient.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/ZmsClient.java index 3ff2ff843a0..b07f6da1a01 100644 --- a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/ZmsClient.java +++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/ZmsClient.java @@ -83,5 +83,7 @@ public interface ZmsClient extends AutoCloseable { AthenzRoleInformation getFullRoleInformation(AthenzRole role); + QuotaUsage getQuotaUsage(); + void close(); } diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/bindings/StatisticsEntity.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/bindings/StatisticsEntity.java new file mode 100644 index 00000000000..bba6195363c --- /dev/null +++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/zms/bindings/StatisticsEntity.java @@ -0,0 +1,51 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.athenz.client.zms.bindings; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author olaa + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class StatisticsEntity { + + private int subdomains; + private int roles; + private int policies; + private int services; + private int groups; + + public StatisticsEntity(@JsonProperty("subdomain") int subdomains, + @JsonProperty("role") int roles, + @JsonProperty("policy") int policies, + @JsonProperty("service") int services, + @JsonProperty("group") int groups) { + this.subdomains = subdomains; + this.roles = roles; + this.policies = policies; + this.services = services; + this.groups = groups; + } + + public int getSubdomains() { + return subdomains; + } + + public int getRoles() { + return roles; + } + + public int getPolicies() { + return policies; + } + + public int getServices() { + return services; + } + + public int getGroups() { + return groups; + } + +}
\ No newline at end of file |