use of com.yahoo.vespa.serviceview.bindings.ServiceView in project vespa by vespa-engine.
the class ServiceApiResponse method rewriteIfUrl.
private String rewriteIfUrl(String urlOrAnyString, Uri requestUri) {
if (urlOrAnyString == null)
return null;
String hostPattern = "(" + String.join("|", configServerURIs.stream().map(URI::toString).map(s -> s.substring(0, s.length() - 1)).map(Pattern::quote).toArray(String[]::new)) + ")";
String remoteServicePath = "/serviceview/" + "v1/tenant/" + application.tenant().value() + "/application/" + application.application().value() + "/environment/" + zone.environment().value() + "/region/" + zone.region().value() + "/instance/" + application.instance() + "/service/";
Pattern remoteServiceResourcePattern = Pattern.compile("^(" + hostPattern + Pattern.quote(remoteServicePath) + ")");
Matcher matcher = remoteServiceResourcePattern.matcher(urlOrAnyString);
if (matcher.find()) {
String proxiedPath = urlOrAnyString.substring(matcher.group().length());
return requestUri.append(proxiedPath).toString();
} else {
// not a service url
return urlOrAnyString;
}
}
use of com.yahoo.vespa.serviceview.bindings.ServiceView in project vespa by vespa-engine.
the class ServiceApiResponseTest method testServiceViewResponseWithURLs.
@Test
public void testServiceViewResponseWithURLs() throws URISyntaxException, IOException {
ServiceApiResponse response = new ServiceApiResponse(ZoneId.from(Environment.prod, RegionName.from("us-west-1")), ApplicationId.from("tenant2", "application2", "default"), Collections.singletonList(new URI("http://cfg1.test/")), new URI("http://cfg1.test/serviceview/v1/tenant/tenant2/application/application2/environment/prod/region/us-west-1/instance/default/service/searchnode-9dujk1pa0vufxrj6n4yvmi8uc/state/v1"));
ApplicationView applicationView = new ApplicationView();
ClusterView clusterView = new ClusterView();
clusterView.type = "container";
clusterView.name = "cluster1";
clusterView.url = "http://cfg1.test/serviceview/v1/tenant/tenant2/application/application2/environment/prod/region/us-west-1/instance/default/service/searchnode-9dujk1pa0vufxrj6n4yvmi8uc/state/v1/health";
ServiceView serviceView = new ServiceView();
serviceView.url = null;
serviceView.serviceType = "container";
serviceView.serviceName = "service1";
serviceView.configId = "configId1";
serviceView.host = "host1";
serviceView.legacyStatusPages = "legacyPages";
clusterView.services = Collections.singletonList(serviceView);
applicationView.clusters = Collections.singletonList(clusterView);
response.setResponse(applicationView);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
response.render(stream);
Slime responseSlime = SlimeUtils.jsonToSlime(stream.toByteArray());
Slime expectedSlime = SlimeUtils.jsonToSlime(IOUtils.readFile(new File(responseFiles + "service-api-response-with-urls.json")).getBytes(StandardCharsets.UTF_8));
assertEquals("service-api-response.json", new String(SlimeUtils.toJsonBytes(expectedSlime), StandardCharsets.UTF_8), new String(SlimeUtils.toJsonBytes(responseSlime), StandardCharsets.UTF_8));
}
Aggregations