diff --git a/docker-compose.yml b/docker-compose.yml index bc416d058235daa06aa3ae9e59033d734af46db7..0e4ec7f057817ec9b056df965c81a1404b9cfd9d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -230,6 +230,7 @@ services: container_name: fda-search-service hostname: fda-search-service image: elasticsearch:7.13.4 + command: ["elasticsearch", "-Elogger.level=WARN"] networks: - fda-public environment: @@ -239,6 +240,8 @@ services: ports: - 9200:9200 - 9600:9600 + logging: + driver: json-file fda-ui: restart: on-failure @@ -269,4 +272,4 @@ services: API_IMAGE: http://fda-container-service:9091 API_DATABASE: http://fda-database-service:9092 API_TABLES: http://fda-table-service:9094 - API_ANALYSE: http://fda-analyse-service:5000 \ No newline at end of file + API_ANALYSE: http://fda-analyse-service:5000 diff --git a/fda-database-service/services/src/main/java/at/tuwien/config/IndexInitializer.java b/fda-database-service/services/src/main/java/at/tuwien/config/IndexInitializer.java new file mode 100644 index 0000000000000000000000000000000000000000..d99849646ac5bac3c01e86683fc14de1de2213a3 --- /dev/null +++ b/fda-database-service/services/src/main/java/at/tuwien/config/IndexInitializer.java @@ -0,0 +1,33 @@ +package at.tuwien.config; + +import at.tuwien.entities.database.Database; +import com.google.common.collect.ImmutableMap; +import lombok.extern.log4j.Log4j2; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.data.elasticsearch.core.ElasticsearchOperations; +import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; +import org.springframework.stereotype.Component; + +import java.util.HashMap; + +@Component +@Log4j2 +public class IndexInitializer { + + private final ElasticsearchOperations elasticsearchOperations; + + public IndexInitializer(ElasticsearchOperations elasticsearchOperations) { + this.elasticsearchOperations = elasticsearchOperations; + } + + @EventListener(ApplicationReadyEvent.class) + public void initIndex() { + log.debug("creating index"); + IndexCoordinates indexCoordinates = IndexCoordinates.of("databaseindex"); + if (!elasticsearchOperations.indexOps(indexCoordinates).exists()) { + elasticsearchOperations.indexOps(indexCoordinates).create(); + elasticsearchOperations.indexOps(indexCoordinates).createMapping(Database.class); + } + } +} diff --git a/fda-database-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseRepository.java b/fda-database-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseidxRepository.java similarity index 75% rename from fda-database-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseRepository.java rename to fda-database-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseidxRepository.java index e02e132395c27e3455846305df1cdb6505722d77..629d38c73ef5fa89b4ed3e1bc9ca9e5ba621980a 100644 --- a/fda-database-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseRepository.java +++ b/fda-database-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseidxRepository.java @@ -5,5 +5,5 @@ import org.springframework.data.elasticsearch.repository.ElasticsearchRepository import org.springframework.stereotype.Repository; @Repository(value = "ElasticDatabaseRepository") -public interface DatabaseRepository extends ElasticsearchRepository<Database, Long> { +public interface DatabaseidxRepository extends ElasticsearchRepository<Database, Long> { } diff --git a/fda-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/fda-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java index cfbaae59fda42025a1d3fbc9dfca63b29d4707e0..042606a77ee331efd4fa3cbd633a8e4a1418d2af 100644 --- a/fda-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ b/fda-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java @@ -11,6 +11,7 @@ import at.tuwien.mapper.DatabaseMapper; import at.tuwien.mapper.ImageMapper; import at.tuwien.repository.jpa.ContainerRepository; import at.tuwien.repository.jpa.DatabaseRepository; +import at.tuwien.repository.elastic.DatabaseidxRepository; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -31,18 +32,21 @@ public class DatabaseService extends JdbcConnector { private final ContainerRepository containerRepository; private final DatabaseRepository databaseRepository; + private final DatabaseidxRepository databaseidxRepository; private final DatabaseMapper databaseMapper; private final AmqpService amqpService; private final AmqpMapper amqpMapper; @Autowired public DatabaseService(ContainerRepository containerRepository, DatabaseRepository databaseRepository, - ImageMapper imageMapper, DatabaseMapper databaseMapper, + DatabaseidxRepository databaseidxRepository, ImageMapper imageMapper, + DatabaseMapper databaseMapper, AmqpService amqpService, AmqpMapper amqpMapper) { super(imageMapper, databaseMapper); this.containerRepository = containerRepository; this.databaseRepository = databaseRepository; this.databaseMapper = databaseMapper; + this.databaseidxRepository = databaseidxRepository; this.amqpService = amqpService; this.amqpMapper = amqpMapper; } @@ -125,6 +129,8 @@ public class DatabaseService extends JdbcConnector { final Database out = databaseRepository.save(database); log.info("Created database {}", out.getId()); log.debug("created database {}", out); + // save in database_index - elastic search + databaseidxRepository.save(database); return out; } @@ -148,6 +154,8 @@ public class DatabaseService extends JdbcConnector { final Database out = databaseRepository.save(database); log.info("Updated database {}", out.getId()); log.debug("updated database {}", out); + // save in database_index - elastic search + databaseidxRepository.save(database); return out; } diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java index 3e677c784446fc72b02cbfd1d561dd540d8ffb66..6c2f22431f5f844de6059ef9dbc0c81be8e0441a 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java @@ -21,8 +21,8 @@ import java.util.List; @Builder @AllArgsConstructor @NoArgsConstructor +@Document(indexName = "databaseindex", createIndex = false) @Where(clause = "deleted is null") -@Document(indexName = "databaseindex") @ToString(onlyExplicitlyIncluded = true) @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java index c8b102b49277746e228d0c707c05f2b358fb9fb6..94b5da4c9d7464383f9d7995bbbe06f353828e7f 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java @@ -6,6 +6,9 @@ import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.elasticsearch.annotations.Document; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; @@ -17,6 +20,7 @@ import java.util.List; @Builder @AllArgsConstructor @NoArgsConstructor +@Document(indexName = "tblindex", createIndex = false) @IdClass(TableKey.class) @ToString(onlyExplicitlyIncluded = true) @EntityListeners(AuditingEntityListener.class) @@ -67,6 +71,7 @@ public class Table { @ToString.Include @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "table") + @Field(type = FieldType.Nested) private List<TableColumn> columns; @Column(nullable = false, updatable = false) diff --git a/fda-table-service/rest-service/src/main/resources/application-docker.yml b/fda-table-service/rest-service/src/main/resources/application-docker.yml index b0cdc68c9a5a311b583922580576767398e4a22d..3af598b5a002fb0ccc62e37e7e5f09abfeae7ef5 100644 --- a/fda-table-service/rest-service/src/main/resources/application-docker.yml +++ b/fda-table-service/rest-service/src/main/resources/application-docker.yml @@ -31,6 +31,7 @@ eureka: fda: mapping.path: /root table.path: /root + elastic.endpoint: fda-search-service:9200 zenodo: endpoint: https://sandbox.zenodo.org/ api_key: "${ZENODO_API_KEY}" \ No newline at end of file diff --git a/fda-table-service/rest-service/src/main/resources/application.yml b/fda-table-service/rest-service/src/main/resources/application.yml index ea38e7c2d131c0861582ac5aa1608ff123cbccab..e6e74dec02d72744c6dbe5064c85ea8227e307b4 100644 --- a/fda-table-service/rest-service/src/main/resources/application.yml +++ b/fda-table-service/rest-service/src/main/resources/application.yml @@ -32,6 +32,7 @@ eureka: fda: mapping.path: rest-service/src/main/resources table.path: rest-service/src/main/java/at/tuwien/userdb + elastic.endpoint: fda-search-service:9200 zenodo: endpoint: https://sandbox.zenodo.org/ api_key: "${ZENODO_API_KEY}" \ No newline at end of file diff --git a/fda-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/fda-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..a510fc7b42add41f43c8d79fe8ca3334660025dc --- /dev/null +++ b/fda-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java @@ -0,0 +1,35 @@ +package at.tuwien.config; + +import org.elasticsearch.client.RestHighLevelClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.elasticsearch.client.ClientConfiguration; +import org.springframework.data.elasticsearch.client.RestClients; +import org.springframework.data.elasticsearch.core.ElasticsearchOperations; +import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; +import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; + +import java.util.Properties; + +@Configuration +public class ElasticsearchConfig { + + @Value("${fda.elastic.endpoint}") + private String elasticEndpoint; + + @Bean + public RestHighLevelClient client() { + ClientConfiguration clientConfiguration = ClientConfiguration.builder() + .connectedTo(elasticEndpoint) + .build(); + + return RestClients.create(clientConfiguration).rest(); + } + + @Bean + public ElasticsearchOperations elasticsearchTemplate() { + return new ElasticsearchRestTemplate(client()); + } +} \ No newline at end of file diff --git a/fda-table-service/services/src/main/java/at/tuwien/config/IndexInitializer.java b/fda-table-service/services/src/main/java/at/tuwien/config/IndexInitializer.java new file mode 100644 index 0000000000000000000000000000000000000000..edbc5df116f2d9a4385d626a0d654f5002f0b0e6 --- /dev/null +++ b/fda-table-service/services/src/main/java/at/tuwien/config/IndexInitializer.java @@ -0,0 +1,33 @@ +package at.tuwien.config; + +import at.tuwien.entities.database.Database; +import com.google.common.collect.ImmutableMap; +import lombok.extern.log4j.Log4j2; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.data.elasticsearch.core.ElasticsearchOperations; +import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; +import org.springframework.stereotype.Component; + +import java.util.HashMap; + +@Component +@Log4j2 +public class IndexInitializer { + + private final ElasticsearchOperations elasticsearchOperations; + + public IndexInitializer(ElasticsearchOperations elasticsearchOperations) { + this.elasticsearchOperations = elasticsearchOperations; + } + + @EventListener(ApplicationReadyEvent.class) + public void initIndex() { + log.debug("creating index"); + IndexCoordinates indexCoordinates = IndexCoordinates.of("tblindex"); + if (!elasticsearchOperations.indexOps(indexCoordinates).exists()) { + elasticsearchOperations.indexOps(indexCoordinates).create(); + elasticsearchOperations.indexOps(indexCoordinates).createMapping(Database.class); + } + } +} diff --git a/fda-table-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseidxRepository.java b/fda-table-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseidxRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..629d38c73ef5fa89b4ed3e1bc9ca9e5ba621980a --- /dev/null +++ b/fda-table-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseidxRepository.java @@ -0,0 +1,9 @@ +package at.tuwien.repository.elastic; + +import at.tuwien.entities.database.Database; +import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; +import org.springframework.stereotype.Repository; + +@Repository(value = "ElasticDatabaseRepository") +public interface DatabaseidxRepository extends ElasticsearchRepository<Database, Long> { +} diff --git a/fda-table-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseRepository.java b/fda-table-service/services/src/main/java/at/tuwien/repository/elastic/TableidxRepository.java similarity index 62% rename from fda-table-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseRepository.java rename to fda-table-service/services/src/main/java/at/tuwien/repository/elastic/TableidxRepository.java index aa60a6dbbcdd124de8a38c4098ee43c7115df16f..fb60eb355aaaf4e050471da84b444d91368aca38 100644 --- a/fda-table-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseRepository.java +++ b/fda-table-service/services/src/main/java/at/tuwien/repository/elastic/TableidxRepository.java @@ -1,9 +1,9 @@ package at.tuwien.repository.elastic; -import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.table.Table; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.stereotype.Repository; @Repository(value = "ElasticDatabaseService") -public interface DatabaseRepository extends ElasticsearchRepository<Database, Long> { +public interface TableidxRepository extends ElasticsearchRepository<Table, Long> { } \ No newline at end of file