1 package de.dlr.shepard; 2 3 import de.dlr.shepard.common.configuration.feature.toggles.MigrationModeToggle; 4 import de.dlr.shepard.common.neo4j.MigrationsRunner; 5 import de.dlr.shepard.common.neo4j.NeoConnector; 6 import de.dlr.shepard.common.util.IConnector; 7 import de.dlr.shepard.common.util.PKIHelper; 8 import de.dlr.shepard.data.timeseries.migration.influxtimeseries.InfluxDBConnector; 9 import de.dlr.shepard.data.timeseries.migration.services.TimeseriesMigrationInitService; 10 import io.quarkus.logging.Log; 11 import io.quarkus.runtime.Quarkus; 12 import io.quarkus.runtime.QuarkusApplication; 13 import io.quarkus.runtime.Shutdown; 14 import io.quarkus.runtime.Startup; 15 import io.quarkus.runtime.annotations.QuarkusMain; 16 import jakarta.enterprise.context.control.ActivateRequestContext; 17 import jakarta.inject.Inject; 18 19 @QuarkusMain 20 public class ShepardMain implements QuarkusApplication { 21 22 @Inject 23 TimeseriesMigrationInitService migrationInitService; 24 25 @Inject 26 InfluxDBConnector influxdb; 27 28 private static IConnector neo4j = NeoConnector.getInstance(); 29 30 @Startup 31 void init() { 32 Log.info("Starting shepard backend"); 33 34 var pkiHelper = new PKIHelper(); 35 var migrationRunner = new MigrationsRunner(); 36 pkiHelper.init(); 37 38 Log.info("Waiting for databases"); 39 migrationRunner.waitForConnection(); 40 41 Log.info("Run database migrations"); 42 migrationRunner.apply(); 43 44 Log.info("Initialize databases"); 45 neo4j.connect(); 46 Log.info("Connection established to neo4j database."); 47 if (MigrationModeToggle.isActive()) { 48 influxdb.connect(); 49 } 50 Log.info(("Connection established to influx database.")); 51 } 52 53 @Override 54 @ActivateRequestContext 55 public int run(String... args) throws Exception { 56 migrationInitService.orchestrateMigrations(); 57 Quarkus.waitForExit(); 58 return 0; 59 } 60 61 @Shutdown 62 void shutdown() { 63 neo4j.disconnect(); 64 influxdb.disconnect(); 65 } 66 }