diff --git a/pom.xml b/pom.xml
index c32ccb71..a3cdebc8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -192,7 +192,7 @@
au.org.aodn
stacmodel
- 0.0.60
+ 0.0.63
diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/ActuatorConfig.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/ActuatorConfig.java
index f933a837..aa8d9516 100644
--- a/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/ActuatorConfig.java
+++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/ActuatorConfig.java
@@ -1,18 +1,57 @@
package au.org.aodn.ogcapi.server.core.configuration;
import au.org.aodn.ogcapi.server.core.model.enumeration.ErrorCode;
+import au.org.aodn.ogcapi.server.core.service.das.DasService;
+import au.org.aodn.ogcapi.server.core.service.dda.DdaService;
+import au.org.aodn.ogcapi.server.core.service.geonetwork.Geonetwork;
+import au.org.aodn.ogcapi.server.core.service.indexer.EsIndexer;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.HealthStatus;
import co.elastic.clients.elasticsearch.indices.ExistsRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import java.util.HashMap;
+import java.util.Map;
@Configuration
public class ActuatorConfig {
+ private static final String DEP_SERVICE = "depService";
+
+ // Define the InfoContributor bean to fill in the missing info in /manage/info endpoint
+ @Bean
+ public InfoContributor externalApiInfoContributor(
+ DasService das,
+ DdaService dda,
+ EsIndexer esIndexer,
+ Geonetwork geonetwork
+ ) {
+ return builder -> {
+ try {
+ Map> versions = new HashMap<>();
+ versions.put(das.getName(),
+ Map.of("version", das.getVersion(), "description", das.getDescription()));
+ versions.put(dda.getName(),
+ Map.of("version", dda.getVersion(), "description", dda.getDescription()));
+ versions.put(esIndexer.getName(),
+ Map.of("version", esIndexer.getVersion(), "description", esIndexer.getDescription()));
+ versions.put(geonetwork.getName(),
+ Map.of("version", geonetwork.getVersion(), "description", geonetwork.getDescription()));
+
+ builder.withDetail(DEP_SERVICE, versions);
+ } catch (Exception e) {
+ builder.withDetail(DEP_SERVICE, Map.of(
+ "status", "ERROR Query",
+ "error", e.getMessage()
+ ));
+ }
+ };
+ }
+
@Bean
public HealthIndicator ogcApiHealth(
@Value("${elasticsearch.vocabs_index.name}") String vocabIndexName,
diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/Config.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/Config.java
index 84a8ea8d..758a8089 100644
--- a/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/Config.java
+++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/Config.java
@@ -1,5 +1,9 @@
package au.org.aodn.ogcapi.server.core.configuration;
+import au.org.aodn.ogcapi.server.core.service.das.DasProperties;
+import au.org.aodn.ogcapi.server.core.service.dda.DdaProperties;
+import au.org.aodn.ogcapi.server.core.service.geonetwork.GNProperties;
+import au.org.aodn.ogcapi.server.core.service.indexer.IndexerProperties;
import au.org.aodn.ogcapi.server.core.util.ConstructUtils;
import au.org.aodn.ogcapi.server.core.util.GeometryUtils;
import au.org.aodn.ogcapi.server.core.util.RestTemplateUtils;
@@ -18,7 +22,12 @@
@Configuration
@EnableScheduling
-@EnableConfigurationProperties(DasProperties.class)
+@EnableConfigurationProperties({
+ DdaProperties.class,
+ IndexerProperties.class,
+ GNProperties.class,
+ DasProperties.class
+})
public class Config {
public static final String DAS_REST_TEMPLATE = "dasRestTemplate";
diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/DdaConfig.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/DdaConfig.java
new file mode 100644
index 00000000..3e9d6fbc
--- /dev/null
+++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/DdaConfig.java
@@ -0,0 +1,16 @@
+package au.org.aodn.ogcapi.server.core.configuration;
+
+import au.org.aodn.ogcapi.server.core.service.dda.DdaProperties;
+import au.org.aodn.ogcapi.server.core.service.dda.DdaService;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class DdaConfig {
+
+ @Bean
+ public DdaService createDdaServer(DdaProperties properties, RestTemplate template) {
+ return new DdaService(properties,template);
+ }
+}
diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/GeoNetworkConfig.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/GeoNetworkConfig.java
new file mode 100644
index 00000000..050ad728
--- /dev/null
+++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/GeoNetworkConfig.java
@@ -0,0 +1,16 @@
+package au.org.aodn.ogcapi.server.core.configuration;
+
+import au.org.aodn.ogcapi.server.core.service.geonetwork.GNProperties;
+import au.org.aodn.ogcapi.server.core.service.geonetwork.Geonetwork;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class GeoNetworkConfig {
+
+ @Bean
+ public Geonetwork createGeonetwork(GNProperties properties, RestTemplate template) {
+ return new Geonetwork(properties, template);
+ }
+}
diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/IndexerConfig.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/IndexerConfig.java
new file mode 100644
index 00000000..eaa930e2
--- /dev/null
+++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/configuration/IndexerConfig.java
@@ -0,0 +1,16 @@
+package au.org.aodn.ogcapi.server.core.configuration;
+
+import au.org.aodn.ogcapi.server.core.service.indexer.EsIndexer;
+import au.org.aodn.ogcapi.server.core.service.indexer.IndexerProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class IndexerConfig {
+
+ @Bean
+ public EsIndexer createEsIndexer(IndexerProperties properties, RestTemplate template) {
+ return new EsIndexer(properties, template);
+ }
+}
diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/service/ApplicationInfo.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/service/ApplicationInfo.java
new file mode 100644
index 00000000..e2bc3305
--- /dev/null
+++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/service/ApplicationInfo.java
@@ -0,0 +1,45 @@
+package au.org.aodn.ogcapi.server.core.service;
+
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Collections;
+import java.util.Map;
+
+public interface ApplicationInfo {
+ /**
+ * Query this is repeat code to query the info path
+ * @param restTemplate - The template of the service
+ * @param host - Host
+ * @param path - query path
+ * @return - Map of value
+ */
+ default Map> queryInfo(RestTemplate restTemplate, String host, String path) {
+ if(path != null) {
+ try {
+ String das = String.format("%s/%s", host, path);
+ ResponseEntity