diff options
Diffstat (limited to 'configserver')
-rw-r--r-- | configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java | 9 | ||||
-rw-r--r-- | configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java | 17 |
2 files changed, 26 insertions, 0 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index 083112d8456..cfccd0f7e16 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -11,6 +11,7 @@ import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.api.HostInfo; import com.yahoo.config.model.api.ServiceInfo; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.HostFilter; import com.yahoo.config.provision.InfraDeployer; @@ -981,6 +982,14 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye return null; } + public double getQuotaUsageRate(ApplicationId applicationId) { + var application = getApplication(applicationId); + return application.getModel().provisioned().all().values().stream() + .map(Capacity::maxResources) + .mapToDouble(resources -> resources.nodes() * resources.nodeResources().cost()) + .sum(); + } + private static void logConfigChangeActions(ConfigChangeActions actions, DeployLogger logger) { RestartActions restartActions = actions.getRestartActions(); if ( ! restartActions.isEmpty()) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java index 17b132a3df8..59523a28b33 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java @@ -52,6 +52,7 @@ public class ApplicationHandler extends HttpHandler { "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/logs", "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/tester/*/*", "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/tester/*", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/quota", "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*", "http://*/application/v2/tenant/*/application/*") .map(UriPattern::new) @@ -157,6 +158,11 @@ public class ApplicationHandler extends HttpHandler { } } + if (isQuotaUsageRequest(request)) { + var quotaUsageRate = applicationRepository.getQuotaUsageRate(applicationId); + return new QuotaUsageResponse(quotaUsageRate); + } + return getApplicationResponse(applicationId); } @@ -267,6 +273,11 @@ public class ApplicationHandler extends HttpHandler { request.getUri().getPath().contains("/tester/run/"); } + private static boolean isQuotaUsageRequest(HttpRequest request) { + return getBindingMatch(request).groupCount() > 7 && + request.getUri().getPath().contains("/quota"); + } + private static String getHostNameFromRequest(HttpRequest req) { BindingMatch<?> bm = getBindingMatch(req); return bm.group(7); @@ -343,4 +354,10 @@ public class ApplicationHandler extends HttpHandler { } } + private static class QuotaUsageResponse extends JSONResponse { + QuotaUsageResponse(double usageRate) { + super(Response.Status.OK); + object.setDouble("rate", usageRate); + } + } } |