better initial rendering and setup procedure

master
Thomas Rudin 2018-12-19 16:32:56 +01:00
parent c15b292197
commit d66fe625f8
3 changed files with 37 additions and 9 deletions

View File

@ -31,10 +31,14 @@ import static spark.Spark.*;
public class TileServer {
private static final Logger logger = LoggerFactory.getLogger(TileServer.class);
private static TileServerConfig cfg;
private static Injector injector;
public static void main(String[] args) throws Exception {
TileServerConfig cfg = ConfigFactory.create(TileServerConfig.class);
cfg = ConfigFactory.create(TileServerConfig.class);
if (cfg.enableDebug()){
TileServer.logger.warn("Enabling debug/logging mode");
@ -45,7 +49,7 @@ public class TileServer {
loggerImpl.setLevel(Level.DEBUG);
}
Injector injector = Guice.createInjector(
injector = Guice.createInjector(
new ConfigModule(cfg),
new DBModule(cfg),
new ServiceModule(cfg)
@ -90,8 +94,6 @@ public class TileServer {
get("/protector/:layerId/:x/:z", injector.getInstance(ProtectorRoute.class), json);
get("/trainline", injector.getInstance(TrainlineRoute.class), json);
//Initialize web server
init();
//Initialize ws updater
injector.getInstance(WebSocketUpdater.class).init();
@ -126,16 +128,17 @@ public class TileServer {
ScheduledExecutorService executor = injector.getInstance(ScheduledExecutorService.class);
executor.scheduleAtFixedRate(injector.getInstance(UpdateChangedTilesJob.class), 0, cfg.tilerendererUpdateInterval(), TimeUnit.SECONDS);
executor.scheduleAtFixedRate(injector.getInstance(UpdatePlayerJob.class), 0, cfg.playerUpdateInterval(), TimeUnit.SECONDS);
if (cfg.tilerendererEnableInitialRendering()){
//Start initial rendering
executor.submit(injector.getInstance(InitialTileRendererJob.class));
} else {
startUpdateJobs();
startWebserver();
}
//TODO: do this properly, join or something
AtomicBoolean running = new AtomicBoolean(true);
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
stop();
running.set(false);
@ -148,5 +151,20 @@ public class TileServer {
if (cfg.prometheusEnable())
promServer.stop();
}
public static void startWebserver(){
//Initialize web server
logger.info("Starting webserver");
init();
}
public static void startUpdateJobs(){
logger.info("Starting update jobs");
ScheduledExecutorService executor = injector.getInstance(ScheduledExecutorService.class);
//Start normal tasks
executor.scheduleAtFixedRate(injector.getInstance(UpdateChangedTilesJob.class), 0, cfg.tilerendererUpdateInterval(), TimeUnit.SECONDS);
executor.scheduleAtFixedRate(injector.getInstance(UpdatePlayerJob.class), 0, cfg.playerUpdateInterval(), TimeUnit.SECONDS);
}
}

View File

@ -1,6 +1,7 @@
package io.rudin.minetest.tileserver.job;
import io.rudin.minetest.tileserver.TileRenderer;
import io.rudin.minetest.tileserver.TileServer;
import io.rudin.minetest.tileserver.config.Layer;
import io.rudin.minetest.tileserver.config.LayerConfig;
import io.rudin.minetest.tileserver.config.TileServerConfig;
@ -19,6 +20,8 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.concurrent.ScheduledExecutorService;
import static io.rudin.minetest.tileserver.blockdb.tables.Blocks.BLOCKS;
@Singleton
@ -27,13 +30,18 @@ public class InitialTileRendererJob implements Runnable {
private static final Logger logger = LoggerFactory.getLogger(InitialTileRendererJob.class);
@Inject
public InitialTileRendererJob(@MapDB DSLContext ctx, TileServerConfig cfg, TileRenderer renderer, YQueryBuilder yQueryBuilder, LayerConfig layerCfg){
public InitialTileRendererJob(@MapDB DSLContext ctx, TileServerConfig cfg, TileRenderer renderer,
YQueryBuilder yQueryBuilder, LayerConfig layerCfg,
ScheduledExecutorService executor){
this.ctx = ctx;
this.renderer = renderer;
this.yQueryBuilder = yQueryBuilder;
this.layerCfg = layerCfg;
this.executor = executor;
}
private final ScheduledExecutorService executor;
private final YQueryBuilder yQueryBuilder;
private final LayerConfig layerCfg;
@ -150,5 +158,7 @@ public class InitialTileRendererJob implements Runnable {
logger.error("run", e);
}
TileServer.startUpdateJobs();
TileServer.startWebserver();
}
}

View File

@ -1,4 +1,4 @@
#tilerenderer.initialrendering.enable=true
tilerenderer.initialrendering.enable=true
#log.tile.updatetimings=true
tilerenderer.updateinterval=10