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