From be3d37d6c31dc5772dd64d0faa110c54413fa3d6 Mon Sep 17 00:00:00 2001 From: lucio Date: Fri, 31 Mar 2023 14:16:23 +0200 Subject: [PATCH] updated --- .../META-INF/smartgears-config.ini | 2 + .../META-INF/smartgears-config.xml | 2 - pom.xml | 15 +- .../SmartgearsConfiguration.java | 15 ++ .../application/ApplicationConfiguration.java | 8 +- .../ApplicationConfigurationBinder.java | 141 ++++++++++-------- .../ContainerConfigurationBinder.java | 11 ++ .../library/SmartGearsConfiguration.java | 75 ---------- .../smartgears/extensions/HttpController.java | 1 - .../smartgears/extensions/HttpExtension.java | 13 +- .../resource/ConfigurationResource.java | 8 +- .../resource/FrontPageResource.java | 3 +- .../extensions/resource/HealthResource.java | 19 +-- .../request/RequestAccounting.java | 6 +- .../application/request/RequestMetrics.java | 1 - .../smartgears/health/HealthManager.java | 3 +- .../gcube/smartgears/health/HealthTask.java | 8 +- .../smartgears/provider/DefaultProvider.java | 9 ++ .../gcube/smartgears/provider/Provider.java | 2 + .../org/gcube/smartgears/utils/Utils.java | 2 +- ...smartgears.extensions.ApplicationExtension | 1 - src/test/java/utils/ConfigurationTest.java | 4 +- 22 files changed, 157 insertions(+), 192 deletions(-) create mode 100644 gcube/extra-resources/META-INF/smartgears-config.ini delete mode 100644 gcube/extra-resources/META-INF/smartgears-config.xml create mode 100644 src/main/java/org/gcube/smartgears/configuration/SmartgearsConfiguration.java delete mode 100644 src/main/java/org/gcube/smartgears/configuration/library/SmartGearsConfiguration.java delete mode 100644 src/main/resources/META-INF/services/org.gcube.smartgears.extensions.ApplicationExtension diff --git a/gcube/extra-resources/META-INF/smartgears-config.ini b/gcube/extra-resources/META-INF/smartgears-config.ini new file mode 100644 index 0000000..62fedff --- /dev/null +++ b/gcube/extra-resources/META-INF/smartgears-config.ini @@ -0,0 +1,2 @@ +[smartgears] +version = ${version} \ No newline at end of file diff --git a/gcube/extra-resources/META-INF/smartgears-config.xml b/gcube/extra-resources/META-INF/smartgears-config.xml deleted file mode 100644 index 5b56d71..0000000 --- a/gcube/extra-resources/META-INF/smartgears-config.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index a0bc221..5d2e02e 100644 --- a/pom.xml +++ b/pom.xml @@ -28,8 +28,8 @@ 8.0.42 2.25.1 UTF-8 - 1.8 - 1.8 + 11 + 11 scm:git:https://code-repo.d4science.org/gCubeSystem/common-smartgears.git @@ -106,10 +106,6 @@ org.gcube.common.security gcube-secrets - - javax.ws.rs - javax.ws.rs-api - javax.servlet javax.servlet-api @@ -151,12 +147,7 @@ org.glassfish.jersey.core jersey-client - test - - - org.apache.tomcat.embed - tomcat-embed-core - ${tomcat.version} + 2.25.1 test diff --git a/src/main/java/org/gcube/smartgears/configuration/SmartgearsConfiguration.java b/src/main/java/org/gcube/smartgears/configuration/SmartgearsConfiguration.java new file mode 100644 index 0000000..43d6311 --- /dev/null +++ b/src/main/java/org/gcube/smartgears/configuration/SmartgearsConfiguration.java @@ -0,0 +1,15 @@ +package org.gcube.smartgears.configuration; + +public class SmartgearsConfiguration { + + private String version; + + public SmartgearsConfiguration(String version) { + super(); + this.version = version; + } + + public String getVersion() { + return version; + } +} diff --git a/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfiguration.java b/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfiguration.java index c8624da..8f46c9d 100644 --- a/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfiguration.java +++ b/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfiguration.java @@ -48,9 +48,9 @@ public class ApplicationConfiguration { private boolean proxable = true; - Set excludes= null; + Set excludes= new HashSet<>(); - Set includes= null; + Set includes= new HashSet<>(); @NotEmpty @JsonProperty("persistence") PersistenceConfiguration persistenceConfiguration; @@ -103,12 +103,12 @@ public class ApplicationConfiguration { return this; } - public String serviceClass() { + public String group() { return group; } - public ApplicationConfiguration serviceClass(String group) { + public ApplicationConfiguration group(String group) { this.group=group; return this; } diff --git a/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfigurationBinder.java b/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfigurationBinder.java index 144d57a..f7699a1 100644 --- a/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfigurationBinder.java +++ b/src/main/java/org/gcube/smartgears/configuration/application/ApplicationConfigurationBinder.java @@ -1,16 +1,21 @@ package org.gcube.smartgears.configuration.application; +import java.io.File; import java.io.InputStream; import java.util.LinkedList; import java.util.List; import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; +import org.gcube.smartgears.configuration.PersistenceConfiguration; import org.gcube.smartgears.handlers.application.ApplicationLifecycleHandler; import org.gcube.smartgears.handlers.application.RequestHandler; import org.gcube.smartgears.handlers.application.lifecycle.ApplicationProfileManager; import org.gcube.smartgears.handlers.application.request.RequestAccounting; import org.gcube.smartgears.handlers.application.request.RequestMetrics; import org.gcube.smartgears.handlers.application.request.RequestValidator; +import org.gcube.smartgears.persistence.LocalWriter; +import org.gcube.smartgears.persistence.LocalWriterConfiguration; +import org.gcube.smartgears.utils.Utils; import org.yaml.snakeyaml.Yaml; /** @@ -33,9 +38,22 @@ public class ApplicationConfigurationBinder { Yaml yaml = new Yaml(); ObjectMapper mapper = new ObjectMapper(); String mapAsString = mapper.writeValueAsString(yaml.load(stream)); - - return mapper.readValue(mapAsString, ApplicationConfiguration.class); - }catch (Exception e) { + + ApplicationConfiguration conf = mapper.readValue(mapAsString, ApplicationConfiguration.class); + + if (conf.persistenceConfiguration() == null) { + String location = String.format("%s/state/%s_%s", Utils.home(), conf.group(), conf.name()); + File dir = new File(location); + if (!dir.exists()) + dir.mkdirs(); + + conf.persistenceConfiguration( + new PersistenceConfiguration(LocalWriter.class, new LocalWriterConfiguration(location))); + + } + + return conf; + } catch (Exception e) { throw new RuntimeException(e); } } @@ -50,80 +68,79 @@ public class ApplicationConfigurationBinder { public ApplicationHandlers bindHandlers(ClassLoader classLoader) { List requestHandlers = new LinkedList(); - - //ADDING BASE Handler (order is important) + + // ADDING BASE Handler (order is important) requestHandlers.add(new RequestMetrics()); requestHandlers.add(new RequestValidator()); requestHandlers.add(new RequestAccounting()); - - //TODO scan RequestHAndler form classloader - - + + // TODO scan RequestHAndler form classloader + List lifecycleHandlers = new LinkedList(); - - //ADDING BASE Handler (order is important) + + // ADDING BASE Handler (order is important) lifecycleHandlers.add(new ApplicationProfileManager()); - - - //TODO scan ApplicationLifecycleHandler form classloader - + + // TODO scan ApplicationLifecycleHandler form classloader + return new ApplicationHandlers(lifecycleHandlers, requestHandlers); - + } - + /** * Returns the extensions of the application from their XML serialisation. * * @param stream the serialisation * @return the extensions * @throws RuntimeException if the serialisation is invalid - - public ApplicationExtensions bindExtensions(InputStream stream) { + * + * public ApplicationExtensions + * bindExtensions(InputStream stream) { + * + * //collects handler classes Set> classes = + * scanForExtensions(); + * + * try { + * + * JAXBContext ctx = + * JAXBContext.newInstance(classes.toArray(new + * Class[0])); + * + * return (ApplicationExtensions) + * ctx.createUnmarshaller().unmarshal(stream); + * + * } catch (JAXBException e) { + * + * throw unchecked(e); + * + * } finally { closeSafely(stream); } } + * + * + * + * private Set> scanForExtensions() throws + * RuntimeException { + * + * @SuppressWarnings("all") + * ServiceLoader handlerLoader = + * (ServiceLoader) + * ServiceLoader.load(ApplicationExtension.class); + * + * Set> scanned = new HashSet>(); + * + * for (ApplicationExtension handler : handlerLoader) { + * Class handlerClass = handler.getClass(); if + * (handlerClass.isInterface() || + * handlerClass.getModifiers() == Modifier.ABSTRACT) + * continue; else scanned.add(handlerClass); } + * + * //add top-level configuration + * scanned.add(ApplicationExtensions.class); + * + * return scanned; } + */ - //collects handler classes - Set> classes = scanForExtensions(); - - try { - - JAXBContext ctx = JAXBContext.newInstance(classes.toArray(new Class[0])); - - return (ApplicationExtensions) ctx.createUnmarshaller().unmarshal(stream); - - } catch (JAXBException e) { - - throw unchecked(e); - - } - finally { - closeSafely(stream); - } - } - - - - private Set> scanForExtensions() throws RuntimeException { - - @SuppressWarnings("all") - ServiceLoader handlerLoader = (ServiceLoader) ServiceLoader.load(ApplicationExtension.class); - - Set> scanned = new HashSet>(); - - for (ApplicationExtension handler : handlerLoader) { - Class handlerClass = handler.getClass(); - if (handlerClass.isInterface() || handlerClass.getModifiers() == Modifier.ABSTRACT) - continue; - else - scanned.add(handlerClass); - } - - //add top-level configuration - scanned.add(ApplicationExtensions.class); - - return scanned; - } - */ - public void scanForApplicationHandlers(ClassLoader currentClassLoader) { // TODO Auto-generated method stub } + } diff --git a/src/main/java/org/gcube/smartgears/configuration/container/ContainerConfigurationBinder.java b/src/main/java/org/gcube/smartgears/configuration/container/ContainerConfigurationBinder.java index 686aba5..382a803 100644 --- a/src/main/java/org/gcube/smartgears/configuration/container/ContainerConfigurationBinder.java +++ b/src/main/java/org/gcube/smartgears/configuration/container/ContainerConfigurationBinder.java @@ -14,6 +14,7 @@ import org.gcube.smartgears.configuration.ComponentConfiguration; import org.gcube.smartgears.configuration.ConfiguredWith; import org.gcube.smartgears.configuration.PersistenceConfiguration; import org.gcube.smartgears.configuration.ProxyAddress; +import org.gcube.smartgears.configuration.SmartgearsConfiguration; import org.gcube.smartgears.handlers.container.ContainerHandler; import org.gcube.smartgears.handlers.container.lifecycle.AccountingManager; import org.gcube.smartgears.handlers.container.lifecycle.ContainerProfileManager; @@ -194,4 +195,14 @@ public class ContainerConfigurationBinder { return Collections.emptyList(); } + public SmartgearsConfiguration loadSmartgearsProperty() { + try { + Ini configurator = new Ini(this.getClass().getResourceAsStream("smartgears-config.ini")); + String version = configurator.get("smartgears").get("version"); + return new SmartgearsConfiguration(version); + }catch (Exception e) { + throw new RuntimeException(e); + } + } + } diff --git a/src/main/java/org/gcube/smartgears/configuration/library/SmartGearsConfiguration.java b/src/main/java/org/gcube/smartgears/configuration/library/SmartGearsConfiguration.java deleted file mode 100644 index f628c6a..0000000 --- a/src/main/java/org/gcube/smartgears/configuration/library/SmartGearsConfiguration.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.gcube.smartgears.configuration.library; - -import java.util.ArrayList; -import java.util.List; - -import org.gcube.common.validator.ValidationError; -import org.gcube.common.validator.Validator; -import org.gcube.common.validator.ValidatorFactory; -import org.gcube.common.validator.annotations.NotEmpty; - -public class SmartGearsConfiguration { - - @NotEmpty - private String version; - - public SmartGearsConfiguration(){ - } - - public String version() { - return version; - } - - public SmartGearsConfiguration version(String version) { - this.version=version; - return this; - } - - - /** - * Validates this configuration - * - * @throws IllegalStateException if the configuration is invalid - */ - public void validate() { - - List msgs = new ArrayList(); - - Validator validator = ValidatorFactory.validator(); - - for (ValidationError error : validator.validate(this)) - msgs.add(error.toString()); - - if (!msgs.isEmpty()) - throw new IllegalStateException("invalid configuration: "+msgs); - - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((version == null) ? 0 : version.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - SmartGearsConfiguration other = (SmartGearsConfiguration) obj; - if (version == null) { - if (other.version != null) - return false; - } else if (!version.equals(other.version)) - return false; - return true; - } - - - -} diff --git a/src/main/java/org/gcube/smartgears/extensions/HttpController.java b/src/main/java/org/gcube/smartgears/extensions/HttpController.java index c9f6437..cab2e79 100644 --- a/src/main/java/org/gcube/smartgears/extensions/HttpController.java +++ b/src/main/java/org/gcube/smartgears/extensions/HttpController.java @@ -75,7 +75,6 @@ public class HttpController extends HttpExtension { @Override public void stop(){ - super.stop(); for (ApiResource resource : resources.values()) resource.stop(); diff --git a/src/main/java/org/gcube/smartgears/extensions/HttpExtension.java b/src/main/java/org/gcube/smartgears/extensions/HttpExtension.java index 0b76baf..ef0e3e8 100644 --- a/src/main/java/org/gcube/smartgears/extensions/HttpExtension.java +++ b/src/main/java/org/gcube/smartgears/extensions/HttpExtension.java @@ -6,7 +6,6 @@ import java.util.HashSet; import java.util.Set; import javax.servlet.http.HttpServlet; -import javax.ws.rs.HttpMethod; import org.gcube.common.validator.annotations.NotEmpty; import org.gcube.smartgears.configuration.application.GCubeExclude; @@ -26,12 +25,12 @@ public abstract class HttpExtension extends HttpServlet implements ApplicationEx * */ public static enum Method { - GET(HttpMethod.GET), - PUT(HttpMethod.PUT), - POST(HttpMethod.POST), - HEAD(HttpMethod.HEAD), - DELETE(HttpMethod.DELETE), - OPTIONS(HttpMethod.OPTIONS); + GET("GET"), + PUT("PUT"), + POST("POST"), + HEAD("HEAD"), + DELETE("DELETE"), + OPTIONS("OPTIONS"); private String value; diff --git a/src/main/java/org/gcube/smartgears/extensions/resource/ConfigurationResource.java b/src/main/java/org/gcube/smartgears/extensions/resource/ConfigurationResource.java index 534b46a..ded8c0d 100644 --- a/src/main/java/org/gcube/smartgears/extensions/resource/ConfigurationResource.java +++ b/src/main/java/org/gcube/smartgears/extensions/resource/ConfigurationResource.java @@ -1,6 +1,6 @@ package org.gcube.smartgears.extensions.resource; -import static org.gcube.smartgears.Constants.application_xml; +import static org.gcube.smartgears.Constants.application_json; import static org.gcube.smartgears.extensions.HttpExtension.Method.GET; import java.io.IOException; @@ -9,7 +9,7 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.gcube.common.resources.gcore.Resources; +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; import org.gcube.smartgears.configuration.application.ApplicationConfiguration; import org.gcube.smartgears.extensions.ApiResource; import org.gcube.smartgears.extensions.ApiSignature; @@ -26,7 +26,7 @@ public class ConfigurationResource extends ApiResource { public static final String mapping = "/configuration"; - private static final ApiSignature signature = handles(mapping).with(method(GET).produces(application_xml)); + private static final ApiSignature signature = handles(mapping).with(method(GET).produces(application_json)); ConfigurationResource() { super(signature); @@ -37,7 +37,7 @@ public class ConfigurationResource extends ApiResource { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ApplicationConfiguration config = context().configuration(); - Resources.marshal(config,resp.getWriter()); + new ObjectMapper().writeValue(resp.getWriter(), config); } } diff --git a/src/main/java/org/gcube/smartgears/extensions/resource/FrontPageResource.java b/src/main/java/org/gcube/smartgears/extensions/resource/FrontPageResource.java index e038b33..c008853 100644 --- a/src/main/java/org/gcube/smartgears/extensions/resource/FrontPageResource.java +++ b/src/main/java/org/gcube/smartgears/extensions/resource/FrontPageResource.java @@ -21,6 +21,7 @@ import javax.servlet.http.HttpServletResponse; import org.gcube.smartgears.extensions.ApiResource; import org.gcube.smartgears.extensions.ApiSignature; +import org.gcube.smartgears.provider.ProviderFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -92,7 +93,7 @@ public class FrontPageResource extends ApiResource { values.put("status", context().lifecycle().state().toString()); - //values.put("smartgears-version", provider().smartgearsConfiguration().version()); + values.put("smartgears-version", ProviderFactory.provider().smartgearsConfiguration().getVersion()); return values; } diff --git a/src/main/java/org/gcube/smartgears/extensions/resource/HealthResource.java b/src/main/java/org/gcube/smartgears/extensions/resource/HealthResource.java index 54e774b..a084d12 100644 --- a/src/main/java/org/gcube/smartgears/extensions/resource/HealthResource.java +++ b/src/main/java/org/gcube/smartgears/extensions/resource/HealthResource.java @@ -19,7 +19,6 @@ import org.gcube.common.health.api.ReadinessChecker; import org.gcube.smartgears.context.application.ApplicationContext; import org.gcube.smartgears.extensions.ApiResource; import org.gcube.smartgears.extensions.ApiSignature; -import org.gcube.smartgears.handlers.application.request.RequestError; import org.gcube.smartgears.health.HealthManager; import org.gcube.smartgears.health.HealthResponse; import org.gcube.smartgears.health.HealthTask; @@ -39,8 +38,6 @@ public class HealthResource extends ApiResource { public static final String mapping = "/health"; - public static final String readiness_mapping = "/readiness"; - private static final ApiSignature signature = handles(mapping).with(method(GET).produces(application_json)); private HealthManager manager; @@ -71,14 +68,14 @@ public class HealthResource extends ApiResource { manager.register((HealthCheck) readnessClass.getDeclaredConstructor().newInstance()); log.info("added class {} to health manager", readnessClass.getCanonicalName()); } catch (Throwable e) { - log.error("healthChecher class {} cannot be instantiated", readnessClass.getCanonicalName(), e); + log.error("healthChecker class {} cannot be instantiated", readnessClass.getCanonicalName(), e); } task = new HealthTask(manager); timer = new Timer(true); - timer.scheduleAtFixedRate(task, 0, 10000); + timer.scheduleAtFixedRate(task, 10000, 60000); super.init(context); } @@ -93,14 +90,7 @@ public class HealthResource extends ApiResource { PrintWriter out = resp.getWriter(); resp.setContentType("application/json"); resp.setCharacterEncoding("UTF-8"); - Object response = null; - - String contextpath = req.getContextPath(); - log.info("context path is {}", req.getContextPath()); - if (contextpath.endsWith(readiness_mapping)) - response = readiness(); - else - RequestError.resource_notfound_error.fire(); + HealthResponse response = readiness(); new ObjectMapper().writeValue(out, response); @@ -110,5 +100,6 @@ public class HealthResource extends ApiResource { public HealthResponse readiness() { return task.getResponse(); } - + + } \ No newline at end of file diff --git a/src/main/java/org/gcube/smartgears/handlers/application/request/RequestAccounting.java b/src/main/java/org/gcube/smartgears/handlers/application/request/RequestAccounting.java index c51990e..db65ce8 100644 --- a/src/main/java/org/gcube/smartgears/handlers/application/request/RequestAccounting.java +++ b/src/main/java/org/gcube/smartgears/handlers/application/request/RequestAccounting.java @@ -48,7 +48,7 @@ public class RequestAccounting extends RequestHandler { startCallThreadLocal.set(System.currentTimeMillis()); log.info("REQUEST START ON {}:{}({}) CALLED FROM {}@{} IN SCOPE {} ", appContext.configuration().name(), - appContext.configuration().serviceClass(), InnerMethodName.instance.get(), caller, + appContext.configuration().group(), InnerMethodName.instance.get(), caller, e.request().getRemoteHost(), context); } @@ -90,7 +90,7 @@ public class RequestAccounting extends RequestHandler { */ log.info("REQUEST SERVED ON {}:{}({}) CALLED FROM {}@{} IN SCOPE {} {}(CODE {}) IN {} millis", - appContext.configuration().name(), appContext.configuration().serviceClass(), + appContext.configuration().name(), appContext.configuration().group(), InnerMethodName.instance.get(), caller, callerIp, context, success ? "SUCCEDED" : "FAILED", e.response().getStatus(), durationInMillis); @@ -115,7 +115,7 @@ public class RequestAccounting extends RequestHandler { serviceUsageRecord.setConsumerId(caller); serviceUsageRecord.setCallerQualifier(callerQualifier); serviceUsageRecord.setScope(gcubeContext); - serviceUsageRecord.setServiceClass(appContext.configuration().serviceClass()); + serviceUsageRecord.setServiceClass(appContext.configuration().group()); serviceUsageRecord.setServiceName(appContext.configuration().name()); serviceUsageRecord.setHost(appContext.container().configuration().hostname() + ":" diff --git a/src/main/java/org/gcube/smartgears/handlers/application/request/RequestMetrics.java b/src/main/java/org/gcube/smartgears/handlers/application/request/RequestMetrics.java index 719a173..30793be 100644 --- a/src/main/java/org/gcube/smartgears/handlers/application/request/RequestMetrics.java +++ b/src/main/java/org/gcube/smartgears/handlers/application/request/RequestMetrics.java @@ -38,7 +38,6 @@ public class RequestMetrics extends RequestHandler { public void handleResponse(ResponseEvent e) { String statusCode = Integer.toString(e.response().getStatus()); Metrics.globalRegistry.timer(HTTP_REQUEST_METRICS_NAME, "status", statusCode).record(Duration.ofMillis(System.currentTimeMillis() - startCallThreadLocal.get())); - Metrics.globalRegistry.counter(HTTP_REQUEST_METRICS_NAME, "status", statusCode); startCallThreadLocal.remove(); log.debug("metrics for current call saved"); } diff --git a/src/main/java/org/gcube/smartgears/health/HealthManager.java b/src/main/java/org/gcube/smartgears/health/HealthManager.java index 64dcab0..2fe5e40 100644 --- a/src/main/java/org/gcube/smartgears/health/HealthManager.java +++ b/src/main/java/org/gcube/smartgears/health/HealthManager.java @@ -1,12 +1,13 @@ package org.gcube.smartgears.health; +import java.util.LinkedList; import java.util.List; import org.gcube.common.health.api.HealthCheck; public class HealthManager { - private List checks; + private List checks = new LinkedList<>(); public void register(HealthCheck check){ checks.add(check); diff --git a/src/main/java/org/gcube/smartgears/health/HealthTask.java b/src/main/java/org/gcube/smartgears/health/HealthTask.java index 61aa28b..ef755d6 100644 --- a/src/main/java/org/gcube/smartgears/health/HealthTask.java +++ b/src/main/java/org/gcube/smartgears/health/HealthTask.java @@ -7,9 +7,13 @@ import java.util.stream.Collectors; import org.gcube.common.health.api.HealthCheck; import org.gcube.common.health.api.Status; import org.gcube.common.health.api.response.HealthCheckResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class HealthTask extends TimerTask{ + private static final Logger log = LoggerFactory.getLogger(HealthTask.class); + private HealthResponse response; private HealthManager healthManager; @@ -20,12 +24,14 @@ public class HealthTask extends TimerTask{ @Override public void run() { + List checks = healthManager.getChecks(); List responses = checks.stream().map(c -> this.wrap(c)).collect(Collectors.toList()); Status totalStatus = responses.stream().anyMatch(r -> r.getStatus().equals(Status.DOWN)) ? Status.DOWN : Status.UP; this.response = new HealthResponse(totalStatus, responses); + log.debug("health task executed with total status {}",totalStatus); } public HealthResponse getResponse() { @@ -36,7 +42,7 @@ public class HealthTask extends TimerTask{ try { return check.check(); }catch (Throwable t) { - return HealthCheckResponse.builder(check.getName()).down().withMessage("unexpected error executing check").build(); + return HealthCheckResponse.builder(check.getName()).down().withMessage(t.getMessage()).build(); } } diff --git a/src/main/java/org/gcube/smartgears/provider/DefaultProvider.java b/src/main/java/org/gcube/smartgears/provider/DefaultProvider.java index 8b72b56..1308cc8 100644 --- a/src/main/java/org/gcube/smartgears/provider/DefaultProvider.java +++ b/src/main/java/org/gcube/smartgears/provider/DefaultProvider.java @@ -18,6 +18,7 @@ import javax.servlet.ServletContext; import org.gcube.common.events.Hub; import org.gcube.common.events.impl.DefaultHub; import org.gcube.common.security.credentials.Credentials; +import org.gcube.smartgears.configuration.SmartgearsConfiguration; import org.gcube.smartgears.configuration.application.ApplicationConfiguration; import org.gcube.smartgears.configuration.application.ApplicationConfigurationBinder; import org.gcube.smartgears.configuration.application.ApplicationHandlers; @@ -276,9 +277,17 @@ public class DefaultProvider implements Provider { return this.publishers; } + @Override + public SmartgearsConfiguration smartgearsConfiguration() { + ContainerConfigurationBinder binder = new ContainerConfigurationBinder(); + return binder.loadSmartgearsProperty(); + } + /* * @Override public AuthorizationProvider authorizationProvider() { return * containerContext.authorizationProvider(); } */ + + } diff --git a/src/main/java/org/gcube/smartgears/provider/Provider.java b/src/main/java/org/gcube/smartgears/provider/Provider.java index c0c61b6..80ae602 100644 --- a/src/main/java/org/gcube/smartgears/provider/Provider.java +++ b/src/main/java/org/gcube/smartgears/provider/Provider.java @@ -4,6 +4,7 @@ import java.util.List; import javax.servlet.ServletContext; +import org.gcube.smartgears.configuration.SmartgearsConfiguration; import org.gcube.smartgears.configuration.application.ApplicationHandlers; import org.gcube.smartgears.context.application.ApplicationContext; import org.gcube.smartgears.context.container.ContainerContext; @@ -67,5 +68,6 @@ public interface Provider { List extensionsFor(ApplicationContext application); + SmartgearsConfiguration smartgearsConfiguration(); } diff --git a/src/main/java/org/gcube/smartgears/utils/Utils.java b/src/main/java/org/gcube/smartgears/utils/Utils.java index 43caaa2..42c1a4a 100644 --- a/src/main/java/org/gcube/smartgears/utils/Utils.java +++ b/src/main/java/org/gcube/smartgears/utils/Utils.java @@ -214,7 +214,7 @@ public class Utils { public static ServiceInfo getServiceInfo(ApplicationContext application){ String hostedin = String.format("%s_%d", application.container().configuration().hostname(), application.container().configuration().port()); return - new ServiceInfo(new ServiceIdentifier(application.configuration().serviceClass(), application.configuration().name(), hostedin)); + new ServiceInfo(new ServiceIdentifier(application.configuration().group(), application.configuration().name(), hostedin)); } public static Throwable getCause(Throwable e) { diff --git a/src/main/resources/META-INF/services/org.gcube.smartgears.extensions.ApplicationExtension b/src/main/resources/META-INF/services/org.gcube.smartgears.extensions.ApplicationExtension deleted file mode 100644 index 3a14165..0000000 --- a/src/main/resources/META-INF/services/org.gcube.smartgears.extensions.ApplicationExtension +++ /dev/null @@ -1 +0,0 @@ -org.gcube.smartgears.extensions.resource.RemoteResource \ No newline at end of file diff --git a/src/test/java/utils/ConfigurationTest.java b/src/test/java/utils/ConfigurationTest.java index 1765ab2..9948a84 100644 --- a/src/test/java/utils/ConfigurationTest.java +++ b/src/test/java/utils/ConfigurationTest.java @@ -42,14 +42,14 @@ public class ConfigurationTest { InputStream inputStream = this.getClass() .getClassLoader() .getResourceAsStream("applicationTest.yaml"); - ApplicationConfiguration customer = yaml.load(inputStream); + yaml.load(inputStream); } @Test public void serialize() throws Exception{ ApplicationConfiguration configuration =new ApplicationConfiguration(); - configuration.name("test").serviceClass("group").description("pippo").version("1.0.0").excludes(new GCubeExclude("/pippo/*"), new GCubeExclude(List.of("H1","H2"), "/trip")); + configuration.name("test").group("group").description("pippo").version("1.0.0").excludes(new GCubeExclude("/pippo/*"), new GCubeExclude(List.of("H1","H2"), "/trip")); configuration.persistenceConfiguration(new PersistenceConfiguration(LocalWriter.class, new LocalWriterConfiguration("/tmp"))); /* ObjectMapper mapper = new ObjectMapper();