diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/flyway/V20240419000001__LueJatkuvatSijoittelutSeurannasta.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/flyway/V20240419000001__LueJatkuvatSijoittelutSeurannasta.java new file mode 100644 index 000000000..1aeaa9f81 --- /dev/null +++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/flyway/V20240419000001__LueJatkuvatSijoittelutSeurannasta.java @@ -0,0 +1,63 @@ +package fi.vm.sade.sijoittelu.flyway; + +import com.google.gson.reflect.TypeToken; +import fi.vm.sade.sijoittelu.kooste.external.resource.viestintapalvelu.RestCasClient; +import fi.vm.sade.sijoittelu.laskenta.util.UrlProperties; +import fi.vm.sade.valinta.seuranta.sijoittelu.dto.SijoitteluDto; +import org.flywaydb.core.api.migration.jdbc.JdbcMigration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.SingleConnectionDataSource; + +import java.sql.Connection; +import java.util.Collection; +import java.util.Collections; +import java.util.regex.Pattern; + +public class V20240419000001__LueJatkuvatSijoittelutSeurannasta implements JdbcMigration { + + private static RestCasClient seurantaCasClient; + private static UrlProperties urlProperties; + + // ainakin hahtuvalla seurantapalvelu antaa ulos osittain täyttä roskaa, joten suodatetaan sijoittelut + // joilla validi oid + private static final Pattern OID_PATTERN = Pattern.compile("^[0-9]+(\\.[0-9]+)*$"); + + public static void setDependencies(UrlProperties properties, RestCasClient client) { + urlProperties = properties; + seurantaCasClient = client; + } + + public Collection hae() { + try { + return seurantaCasClient + .get( + urlProperties.url("valintalaskentakoostepalvelu.seuranta.rest.url") + + "/sijoittelunseuranta/hae", + new TypeToken>() {}, + Collections.emptyMap(), + 10 * 60 * 1000) + .get(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void migrate(Connection connection) { + JdbcTemplate template = new JdbcTemplate(); + template.setDataSource(new SingleConnectionDataSource(connection, true)); + for(SijoitteluDto sijoitteluDto : this.hae()) { + if(OID_PATTERN.matcher(sijoitteluDto.getHakuOid()).matches()) { + template.update( + "INSERT INTO jatkuvat " + + "(haku_oid, jatkuva_paalla, viimeksi_ajettu, aloitus, ajotiheys) " + + "VALUES (?, ?, ?::timestamptz, ?::timestamptz, ?)", + sijoitteluDto.getHakuOid(), + sijoitteluDto.isAjossa(), + sijoitteluDto.getViimeksiAjettu(), + sijoitteluDto.getAloitusajankohta(), + sijoitteluDto.getAjotiheys()); + } + } + } +} diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/kooste/sijoittelu/route/impl/SijoitteluRouteConfig.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/kooste/sijoittelu/route/impl/SijoitteluRouteConfig.java index 85f8e2469..6321ea35b 100644 --- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/kooste/sijoittelu/route/impl/SijoitteluRouteConfig.java +++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/kooste/sijoittelu/route/impl/SijoitteluRouteConfig.java @@ -1,18 +1,23 @@ package fi.vm.sade.sijoittelu.kooste.sijoittelu.route.impl; import fi.vm.sade.sijoittelu.kooste.external.resource.seuranta.SijoitteluSeurantaResource; +import fi.vm.sade.sijoittelu.laskenta.configuration.FlywayConfiguration; +import fi.vm.sade.sijoittelu.laskenta.configuration.SijoitteluServiceConfiguration; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.scheduling.quartz.SchedulerFactoryBean; -@Profile("default") +@Profile({"default", "dev"}) @Configuration public class SijoitteluRouteConfig { @Bean public JatkuvaSijoitteluRouteImpl getJatkuvaSijoitteluRouteImpl( + // riippuvuus Flyway-migraatioihin jotta tätä beania ei luoda ennen kuin jatkuvien sijoitteluiden migraatio + // seurantapalvelusta ajettu. Tämän voin refaktoroida pois kun migraatio onnistuneesti suoritettu. + FlywayConfiguration.FlywayMigrationDone flywayMigrationDone, @Value("${jatkuvasijoittelu.autostart:true}") boolean autoStartup, @Value("${valintalaskentakoostepalvelu.jatkuvasijoittelu.intervalMinutes:5}") long jatkuvaSijoitteluPollIntervalInMinutes, diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/FlywayConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/FlywayConfiguration.java new file mode 100644 index 000000000..3004c3162 --- /dev/null +++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/FlywayConfiguration.java @@ -0,0 +1,41 @@ +package fi.vm.sade.sijoittelu.laskenta.configuration; + +import fi.vm.sade.sijoittelu.flyway.V20240419000001__LueJatkuvatSijoittelutSeurannasta; +import fi.vm.sade.sijoittelu.kooste.external.resource.viestintapalvelu.RestCasClient; +import fi.vm.sade.sijoittelu.laskenta.util.UrlProperties; +import org.flywaydb.core.Flyway; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; + +@Configuration +public class FlywayConfiguration { + + @Autowired + JdbcTemplate jdbcTemplate; + + @Autowired + @Qualifier("SeurantaCasClient") + RestCasClient seurantaCasClient; + + @Autowired + UrlProperties urlProperties; + + public static class FlywayMigrationDone {} + + @Bean + public FlywayMigrationDone doFlywayMigration() { + V20240419000001__LueJatkuvatSijoittelutSeurannasta.setDependencies(this.urlProperties, this.seurantaCasClient); + + Flyway flyway = new Flyway(); + flyway.setSchemas("public"); + flyway.setDataSource(jdbcTemplate.getDataSource()); + flyway.setLocations("/db/migration", "fi.vm.sade.sijoittelu.flyway"); + flyway.setTable("sijoittelu_schema_version"); + flyway.migrate(); + + return new FlywayMigrationDone(); + } +} diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SijoitteluServiceConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SijoitteluServiceConfiguration.java index 3358197d5..a108eb3fa 100644 --- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SijoitteluServiceConfiguration.java +++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SijoitteluServiceConfiguration.java @@ -8,14 +8,10 @@ import fi.vm.sade.valinta.sharedutils.AuditLogger; import fi.vm.sade.valintalaskenta.tulos.logging.LaskentaAuditLogImpl; import fi.vm.sade.valintalaskenta.tulos.mapping.ValintalaskentaModelMapper; -import org.flywaydb.core.Flyway; import org.mongodb.morphia.Datastore; import org.mongodb.morphia.Morphia; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.*; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.scheduling.annotation.EnableAsync; @@ -27,13 +23,10 @@ "fi.vm.sade.valintalaskenta.tulos.service.impl", "fi.vm.sade.valintalaskenta.tulos.service.impl.converters", }) -public class SijoitteluServiceConfiguration implements InitializingBean { +public class SijoitteluServiceConfiguration { public static final String CALLER_ID = "1.2.246.562.10.00000000001.sijoittelu.sijoittelu-service"; - @Autowired - JdbcTemplate jdbcTemplate; - @Bean public Audit audit() { return new Audit(new AuditLogger(), "sijoittelu", ApplicationType.VIRKAILIJA); } @@ -66,14 +59,4 @@ public void addCorsMappings(CorsRegistry registry) { } }; } - - @Override - public void afterPropertiesSet() throws Exception { - Flyway flyway = new Flyway(); - flyway.setSchemas("public"); - flyway.setDataSource(jdbcTemplate.getDataSource()); - flyway.setLocations("/db/migration"); - flyway.setTable("sijoittelu_schema_version"); - flyway.migrate(); - } }