Skip to content
Snippets Groups Projects
Commit 5e0d3c1b authored by Martin Weise's avatar Martin Weise
Browse files

Merge branch 'dev'

parents 36499c0f 41806b92
Branches
Tags
2 merge requests!81New stable release,!43Merge dev to master
Showing
with 163 additions and 8 deletions
......@@ -230,6 +230,7 @@ services:
container_name: fda-search-service
hostname: fda-search-service
image: elasticsearch:7.13.4
command: ["elasticsearch"]
networks:
- fda-public
environment:
......@@ -239,6 +240,8 @@ services:
ports:
- 9200:9200
- 9600:9600
logging:
driver: json-file
fda-ui:
restart: on-failure
......
ready
*.key
......@@ -114,7 +114,6 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
/* test */
final ResponseEntity<ImageDto> response = imageEndpoint.findById(IMAGE_1_ID);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(IMAGE_1_HASH, Objects.requireNonNull(response.getBody()).getHash());
}
@Test
......
......@@ -50,6 +50,7 @@ public class EndpointUnitTest extends BaseUnitTest {
@BeforeAll
public static void beforeAll() throws InterruptedException {
afterAll();
final DockerConfig dockerConfig = new DockerConfig();
final HostConfig hostConfig = dockerConfig.hostConfig();
final DockerClient dockerClient = dockerConfig.dockerClientConfiguration();
......
......@@ -8,6 +8,7 @@ import at.tuwien.config.ReadyConfig;
import at.tuwien.entities.container.Container;
import at.tuwien.entities.database.Database;
import at.tuwien.exception.*;
import at.tuwien.repository.elastic.DatabaseidxRepository;
import at.tuwien.repository.jpa.ContainerRepository;
import at.tuwien.repository.jpa.DatabaseRepository;
import at.tuwien.repository.jpa.ImageRepository;
......@@ -47,6 +48,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
@MockBean
private Channel channel;
@MockBean
private DatabaseidxRepository databaseidxRepository;
@Autowired
private HostConfig hostConfig;
......@@ -145,6 +149,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
containerRepository.save(CONTAINER_2);
}
@Transactional
@AfterEach
public void afterEach() {
/* stop containers and remove them */
......
spring.profiles.active=test-noelastic
# disable discovery
spring.cloud.discovery.enabled = false
......@@ -13,3 +15,6 @@ spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=false
# disable elasticsearch
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration
\ No newline at end of file
package at.tuwien.config;
import at.tuwien.entities.database.Database;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.stereotype.Component;
@Component
@Log4j2
public class IndexInitializer {
private final Environment environment;
private final ElasticsearchOperations elasticsearchOperations;
public IndexInitializer(Environment environment, ElasticsearchOperations elasticsearchOperations) {
this.environment = environment;
this.elasticsearchOperations = elasticsearchOperations;
}
@EventListener(ApplicationReadyEvent.class)
public void initIndex() {
if (environment.acceptsProfiles(Profiles.of("test-noelastic"))) {
return;
}
log.debug("creating index");
IndexCoordinates indexCoordinates = IndexCoordinates.of("databaseindex");
if (!elasticsearchOperations.indexOps(indexCoordinates).exists()) {
elasticsearchOperations.indexOps(indexCoordinates).create();
elasticsearchOperations.indexOps(indexCoordinates).createMapping(Database.class);
}
}
}
......@@ -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> {
}
......@@ -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;
}
......
......@@ -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)
......
......@@ -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)
......
......@@ -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
......@@ -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
spring.profiles.active=test-noelastic
# disable discovery
spring.cloud.discovery.enabled = false
......@@ -14,6 +16,9 @@ spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=false
# disable elasticsearch
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration
fda.mapping.path: /tmp
fda.table.path: /tmp
......
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
package at.tuwien.config;
import at.tuwien.entities.database.Database;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.stereotype.Component;
@Component
@Log4j2
public class IndexInitializer {
private final Environment environment;
private final ElasticsearchOperations elasticsearchOperations;
@Autowired
public IndexInitializer(Environment environment, ElasticsearchOperations elasticsearchOperations) {
this.environment = environment;
this.elasticsearchOperations = elasticsearchOperations;
}
@EventListener(ApplicationReadyEvent.class)
public void initIndex() {
if (environment.acceptsProfiles(Profiles.of("test-noelastic"))) {
return;
}
log.debug("creating index");
IndexCoordinates indexCoordinates = IndexCoordinates.of("tblindex");
if (!elasticsearchOperations.indexOps(indexCoordinates).exists()) {
elasticsearchOperations.indexOps(indexCoordinates).create();
elasticsearchOperations.indexOps(indexCoordinates).createMapping(Database.class);
}
}
}
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> {
}
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment