1 package de.dlr.shepard;
2
3 import de.dlr.shepard.common.neo4j.MigrationsRunner;
4 import de.dlr.shepard.common.neo4j.NeoConnector;
5 import de.dlr.shepard.common.util.IConnector;
6 import de.dlr.shepard.common.util.PKIHelper;
7 import io.quarkus.logging.Log;
8 import io.quarkus.runtime.Quarkus;
9 import io.quarkus.runtime.QuarkusApplication;
10 import io.quarkus.runtime.Shutdown;
11 import io.quarkus.runtime.Startup;
12 import io.quarkus.runtime.annotations.QuarkusMain;
13 import jakarta.annotation.Nullable;
14 import jakarta.enterprise.context.control.ActivateRequestContext;
15 import jakarta.inject.Inject;
16 import org.flywaydb.core.Flyway;
17
18 @QuarkusMain
19 public class ShepardMain implements QuarkusApplication {
20
21 private static final IConnector neo4j = NeoConnector.getInstance();
22
23 @Inject
24 Flyway flyway;
25
26 @Startup
27 void init() {
28 Log.info("Starting shepard backend");
29
30 migrateTimescale("1.7.0");
31
32 migrateNeo4j("V13");
33
34 Log.info("Run leftover timescale migrations...");
35 flyway.migrate();
36 Log.info("Finished leftover timescale migrations...");
37
38 Log.info("Run leftover Neo4j migrations...");
39 var neoRunner = new MigrationsRunner();
40 neoRunner.waitForConnection();
41 neoRunner.apply();
42 Log.info("Finished leftover Neo4j migrations...");
43
44 var pkiHelper = new PKIHelper();
45 pkiHelper.init();
46
47 Log.info("Initialize neo4j databases...");
48 neo4j.connect();
49 Log.info("Connection established to neo4j database!");
50 }
51
52 private void migrateTimescale(String version) {
53 Log.info("Run PostGres migrations until V" + version + "...");
54 if (version == null) flyway.migrate();
55 else Flyway.configure().configuration(flyway.getConfiguration()).target(version).load().migrate();
56 Log.info("Finished PostGres migrations V" + version + "!");
57 }
58
59 private void migrateNeo4j(String version) {
60 var migrationRunner = new MigrationsRunner(version);
61 Log.info("Waiting for neo4j database...");
62 migrationRunner.waitForConnection();
63 Log.info("Run neo4j database migrations until " + version + "...");
64 migrationRunner.apply();
65 Log.info("Finished neo4j database migrations!");
66 }
67
68 @Override
69 @ActivateRequestContext
70 public int run(String... args) throws Exception {
71 Quarkus.waitForExit();
72 return 0;
73 }
74
75 @Shutdown
76 void shutdown() {
77 neo4j.disconnect();
78 }
79 }