diff --git a/.bumpversion.cfg b/.bumpversion.cfg index a0c10f8e63abfd3df157ed44d700aa9cceea78b6..1c6836a274bbebd34431846d566a5fc2c66ee298 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.8.1 +current_version = 2.8.4 commit = True tag = True tag_name = {new_version} diff --git a/hbp.yml b/hbp.yml index 02066a86c0d140fed69d9ea6531cec471db509b7..5151973f18ab9302f37721a915118fb66869ebd5 100644 --- a/hbp.yml +++ b/hbp.yml @@ -58,9 +58,9 @@ testing: command: ./test.sh release_management: - current_version: 2.8.1 - current_code_release: https://github.com/HBPMedical/portal-backend/archive/2.8.1.zip - current_binary_release: https://pypi.python.org/pypi/portal-backend/2.8.1 + current_version: 2.8.4 + current_code_release: https://github.com/HBPMedical/portal-backend/archive/2.8.4.zip + current_binary_release: https://pypi.python.org/pypi/portal-backend/2.8.4 release_script: 'publish.sh' continuous_integration: @@ -75,10 +75,10 @@ continuous_integration: distribution: docker_hub: name: hbpmip/portal-backend - current_tag: 2.8.1 + current_tag: 2.8.4 url: https://hub.docker.com/r/hbpmip/portal-backend/ badge: https://img.shields.io/badge/docker-hbpmip%2Fportal--backend-008bb8.svg - command: docker pull hbpmip/portal-backend:2.8.1 + command: docker pull hbpmip/portal-backend:2.8.4 planning: github: diff --git a/pom.xml b/pom.xml index 965b0c07a7ef5332bd378e9268413dbc7f4d9027..76a85838526cc5c1aaa9bae903ff6b8acb192250 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ <groupId>eu.hbp.mip</groupId> <artifactId>portal-backend</artifactId> - <version>2.8.1</version><!-- BUMP_VERSION --> + <version>2.8.4</version><!-- BUMP_VERSION --> <packaging>jar</packaging> <name>portal-backend</name> @@ -47,7 +47,7 @@ <spring-data-jpa.version>1.10.11.RELEASE</spring-data-jpa.version> <spring-boot-starter-actuator.version>1.4.7.RELEASE</spring-boot-starter-actuator.version> <aspectjweaver.version>1.8.9</aspectjweaver.version> - <woken-messages.version>2.7.5</woken-messages.version> + <woken-messages.version>2.8.1</woken-messages.version> <javax-inject.version>1</javax-inject.version> <akka.version>2.5.12</akka.version> <spring-context.version>4.3.4.RELEASE</spring-context.version> @@ -249,6 +249,12 @@ <version>${scala.release.version}</version> <scope>compile</scope> </dependency> + + <dependency> + <groupId>com.bugsnag</groupId> + <version>[3.0,4.0)</version> + <artifactId>bugsnag</artifactId> + </dependency> </dependencies> <build> diff --git a/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java b/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java index 4f4ae846fc8b0e89d3a87c334f03a32948026846..59375f7ab4916753bf108ead11e9a37d9ebd59cd 100644 --- a/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java +++ b/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java @@ -4,9 +4,11 @@ import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.actor.ExtendedActorSystem; import akka.cluster.Cluster; +import akka.cluster.Member; import akka.cluster.pubsub.DistributedPubSub; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,6 +17,7 @@ import org.springframework.context.annotation.*; import java.util.List; import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; import static eu.hbp.mip.akka.SpringExtension.SPRING_EXTENSION_PROVIDER; @@ -73,11 +76,18 @@ class AkkaConfiguration { semaphore.release(); }); - try { - semaphore.acquire(); - Thread.sleep(5000); - } catch (InterruptedException e) { - LOGGER.warn("Cannot wait for Akka cluster start", e); + for (Member member: cluster.state().getMembers()) { + LOGGER.info("Member " + StringUtils.join(member.getRoles(), ",") + " at " + member.address().toString() + " is in the cluster"); + } + + if (cluster.state().members().size() < 2) { + LOGGER.info("Waiting for Woken cluster connection..."); + try { + semaphore.tryAcquire(5, TimeUnit.MINUTES); + Thread.sleep(5000); + } catch (InterruptedException e) { + LOGGER.warn("Cannot wait for Akka cluster start", e); + } } Runtime.getRuntime().addShutdownHook(new Thread(() -> { diff --git a/src/main/java/eu/hbp/mip/configuration/BugsnagConfig.java b/src/main/java/eu/hbp/mip/configuration/BugsnagConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..c399706049a7cb4b1a7129c2174c13bc4f8721c0 --- /dev/null +++ b/src/main/java/eu/hbp/mip/configuration/BugsnagConfig.java @@ -0,0 +1,13 @@ +package eu.hbp.mip.configuration; + +import com.bugsnag.Bugsnag; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class BugsnagConfig { + @Bean + public Bugsnag bugsnag() { + return new Bugsnag("dff301aa15eb795a6d8b22b600586f77"); + } +} \ No newline at end of file diff --git a/src/main/java/eu/hbp/mip/controllers/ModelsApi.java b/src/main/java/eu/hbp/mip/controllers/ModelsApi.java index 9000271a9dfa9f0624ea3e26cc310c84a34279c0..c3d1de874308576c07f27304e167f56a85bc6605 100644 --- a/src/main/java/eu/hbp/mip/controllers/ModelsApi.java +++ b/src/main/java/eu/hbp/mip/controllers/ModelsApi.java @@ -135,7 +135,9 @@ public class ModelsApi { configRepository.save(model.getConfig()); queryRepository.save(model.getQuery()); - datasetRepository.save(model.getDataset()); + if (model.getDataset() != null) { + datasetRepository.save(model.getDataset()); + } modelRepository.save(model); LOGGER.info("Model saved (also saved model.config and model.query)"); diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java index c3a306017259dcdf71443909de06e7ba195cc3ea..00a3d11f5f408e249ef05805963f6978db6f5fd5 100644 --- a/src/main/java/eu/hbp/mip/model/Experiment.java +++ b/src/main/java/eu/hbp/mip/model/Experiment.java @@ -103,7 +103,7 @@ public class Experiment { Type algoList = new TypeToken<LinkedList<eu.hbp.mip.model.Algorithm>>(){}.getType(); List<eu.hbp.mip.model.Algorithm> algos = new Gson().fromJson(this.algorithms, algoList); for (eu.hbp.mip.model.Algorithm a: algos) { - algorithms.add(new AlgorithmSpec(a.getCode(), TypesConvert.algoParamsToScala(a.getParameters()))); + algorithms.add(new AlgorithmSpec(a.getCode(), TypesConvert.algoParamsToScala(a.getParameters()), Option.empty())); } List<ValidationSpec> validations = new LinkedList<>(); diff --git a/src/main/java/eu/hbp/mip/model/MiningQuery.java b/src/main/java/eu/hbp/mip/model/MiningQuery.java index 51cb91c3a7dc033c247be43617e0ed168ed1d39b..908ef52193221feec68520c88662d9e3ac7b5b56 100644 --- a/src/main/java/eu/hbp/mip/model/MiningQuery.java +++ b/src/main/java/eu/hbp/mip/model/MiningQuery.java @@ -90,7 +90,7 @@ public class MiningQuery { public ch.chuv.lren.woken.messages.query.MiningQuery prepareQuery(String user) { ch.chuv.lren.woken.messages.query.AlgorithmSpec scalaAlgorithm = new ch.chuv.lren.woken.messages.query.AlgorithmSpec( - algorithm.getCode(), TypesConvert.algoParamsToScala(algorithm.getParameters())); + algorithm.getCode(), TypesConvert.algoParamsToScala(algorithm.getParameters()), Option.empty()); scala.collection.immutable.List<FeatureIdentifier> variablesSeq = TypesConvert.variablesToIdentifiers(getVariables());