diff options
2 files changed, 30 insertions, 1 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index c5da5755474..9523ca3f79b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -229,6 +229,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/service")) return services(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/service/{service}/{*}")) return service(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.get("service"), path.getRest(), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/nodes")) return nodes(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region")); + if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/clusters")) return clusters(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region")); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/logs")) return logs(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request.propertyMap()); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/global-rotation")) return rotationStatus(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), Optional.ofNullable(request.getProperty("endpointId"))); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/global-rotation/override")) return getGlobalRotationOverride(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region")); @@ -627,6 +628,34 @@ public class ApplicationApiHandler extends LoggingRequestHandler { return new SlimeJsonResponse(slime); } + private HttpResponse clusters(String tenantName, String applicationName, String instanceName, String environment, String region) { + ApplicationId id = ApplicationId.from(tenantName, applicationName, instanceName); + ZoneId zone = ZoneId.from(environment, region); + List<Node> nodes = controller.serviceRegistry().configServer().nodeRepository().list(zone, id); + + Slime slime = new Slime(); + Cursor nodesArray = slime.setObject().setArray("clusters"); + for (Node node : nodes) { + Cursor clusterObject = nodesArray.addObject(); + clusterObject.setString("hostname", node.hostname().value()); + clusterObject.setString("state", valueOf(node.state())); + node.reservedTo().ifPresent(tenant -> clusterObject.setString("reservedTo", tenant.value())); + clusterObject.setString("orchestration", valueOf(node.serviceState())); + clusterObject.setString("version", node.currentVersion().toString()); + clusterObject.setString("flavor", node.flavor()); + clusterObject.setDouble("vcpu", node.resources().vcpu()); + clusterObject.setDouble("memoryGb", node.resources().memoryGb()); + clusterObject.setDouble("diskGb", node.resources().diskGb()); + clusterObject.setDouble("bandwidthGbps", node.resources().bandwidthGbps()); + clusterObject.setString("diskSpeed", valueOf(node.resources().diskSpeed())); + clusterObject.setString("storageType", valueOf(node.resources().storageType())); + clusterObject.setBool("fastDisk", node.resources().diskSpeed() == NodeResources.DiskSpeed.fast); // TODO: Remove + clusterObject.setString("clusterId", node.clusterId()); + clusterObject.setString("clusterType", valueOf(node.clusterType())); + } + return new SlimeJsonResponse(slime); + } + private static String valueOf(Node.State state) { switch (state) { case failed: return "failed"; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java index 75b1efb649e..2d21ee9f45d 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java @@ -62,7 +62,7 @@ import static com.yahoo.slime.SlimeUtils.optionalString; /** * The implementation of the /nodes/v2 API. - * See RestApiTest for documentation. + * See NodesV2ApiTest for documentation. * * @author bratseth */ |