View Javadoc
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  }