From 4ed56600d6b2ac958c9630cc679256ca540bc433 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Thu, 21 Jul 2022 18:17:30 +0200 Subject: [PATCH] Backported service instance predictive URL --- ...rceRegistryQueryTemplateClientFactory.java | 85 ++----------------- 1 file changed, 6 insertions(+), 79 deletions(-) diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/queries/templates/ResourceRegistryQueryTemplateClientFactory.java b/src/main/java/org/gcube/informationsystem/resourceregistry/queries/templates/ResourceRegistryQueryTemplateClientFactory.java index dcb7130..e866e68 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/queries/templates/ResourceRegistryQueryTemplateClientFactory.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/queries/templates/ResourceRegistryQueryTemplateClientFactory.java @@ -1,17 +1,10 @@ package org.gcube.informationsystem.resourceregistry.queries.templates; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - import org.gcube.common.authorization.library.AuthorizationEntry; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; -import org.gcube.common.resources.gcore.GCoreEndpoint; -import org.gcube.common.resources.gcore.ServiceEndpoint; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.informationsystem.resourceregistry.api.Constants; -import org.gcube.resources.discovery.client.queries.api.SimpleQuery; -import org.gcube.resources.discovery.icclient.ICFactory; +import org.gcube.informationsystem.resourceregistry.api.rest.ServiceInstance; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,28 +15,6 @@ public class ResourceRegistryQueryTemplateClientFactory { private static final Logger logger = LoggerFactory.getLogger(ResourceRegistryQueryTemplateClientFactory.class); - protected static List addresses; - - static { - addresses = new ArrayList<>(); - } - - private static String FORCED_URL = null; - - protected static void forceToURL(String url){ - FORCED_URL = url; - } - - private static String classFormat = "$resource/Profile/ServiceClass/text() eq '%1s'"; - private static String nameFormat = "$resource/Profile/ServiceName/text() eq '%1s'"; - private static String statusFormat = "$resource/Profile/DeploymentData/Status/text() eq 'ready'"; - private static String containsFormat = "$entry/@EntryName eq '%1s'"; - - - private static String serviceEndpointCategoryFormat = "$resource/Profile/Category/text() eq '%1s'"; - private static String serviceEndpointNameFormat = "$resource/Profile/Name/text() eq '%1s'"; - private static String serviceEndpointstatusFormat = "$resource/Profile/RunTime/Status/text() eq 'READY'"; - public static String getCurrentContextFullName() { String token = SecurityTokenProvider.instance.get(); AuthorizationEntry authorizationEntry = null; @@ -55,43 +26,10 @@ public class ResourceRegistryQueryTemplateClientFactory { return authorizationEntry.getContext(); } - private static SimpleQuery queryForService(){ - return ICFactory.queryFor(GCoreEndpoint.class) - .addCondition(String.format(classFormat, Constants.SERVICE_CLASS)) - .addCondition(String.format(nameFormat, Constants.SERVICE_NAME)) - .addCondition(String.format(statusFormat)) - .addVariable("$entry","$resource/Profile/AccessPoint/RunningInstanceInterfaces/Endpoint") - .addCondition(String.format(containsFormat, Constants.SERVICE_ENTRY_NAME)) - .setResult("$entry/text()"); - } + private static String FORCED_URL = null; - private static SimpleQuery queryForProxy(){ - return ICFactory.queryFor(ServiceEndpoint.class) - .addCondition(String.format(serviceEndpointCategoryFormat, Constants.SERVICE_CLASS)) - .addCondition(String.format(serviceEndpointNameFormat, Constants.SERVICE_NAME)) - .addCondition(String.format(serviceEndpointstatusFormat)) - .addVariable("$entry","$resource/Profile/AccessPoint/Interface/Endpoint") - .addCondition(String.format(containsFormat, Constants.SERVICE_ENTRY_NAME)) - .setResult("$entry/text()"); - } - - - protected static List getAddresses(){ - List addresses = new ArrayList<>(); - - try { - SimpleQuery proxyQuery = queryForProxy(); - addresses = ICFactory.client().submit(proxyQuery); - if(addresses==null || addresses.isEmpty()){ - throw new Exception("No ResourceRegistry Proxy Found"); - } - } catch (Exception e) { - logger.debug("{}. Looking for RunningInstance.", e.getMessage()); - SimpleQuery serviceQuery = queryForService(); - addresses = ICFactory.client().submit(serviceQuery); - } - - return addresses; + protected static void forceToURL(String url){ + FORCED_URL = url; } public static ResourceRegistryQueryTemplateClient create() { @@ -100,21 +38,10 @@ public class ResourceRegistryQueryTemplateClientFactory { if(FORCED_URL!=null){ address = FORCED_URL; }else { - - if(addresses==null || addresses.isEmpty()) { - addresses = getAddresses(); - } - - if(addresses==null || addresses.isEmpty()){ - String error = String.format("No %s:%s found in the current context %s", Constants.SERVICE_CLASS, Constants.SERVICE_NAME, getCurrentContextFullName()); - throw new RuntimeException(error); - } - - Random random = new Random(); - int index = random.nextInt(addresses.size()); - address = addresses.get(index); + address = String.format("%s/%s", ServiceInstance.getServiceURL(),Constants.SERVICE_NAME); } + logger.trace("The {} will be contacted at {}", Constants.SERVICE_NAME, address); return new ResourceRegistryQueryTemplateClientImpl(address); }