trader/src/main/java/se/koc/trader/TraderServer.java
2021-03-27 00:47:38 +01:00

101 lines
3.5 KiB
Java

package se.koc.trader;
import se.koc.trader.endpoint.AlertEndpoint;
import se.koc.trader.api.TraderApiEndpoint;
import se.koc.trader.daemon.TraderMarketUpdateManager;
import se.koc.trader.struct.PluginConfig;
import se.koc.trader.api.TraderPage;
import zutil.db.DBConnection;
import zutil.io.file.FileUtil;
import zutil.log.LogUtil;
import zutil.net.http.HttpServer;
import zutil.net.http.page.HttpFilePage;
import zutil.net.http.page.HttpRedirectPage;
import zutil.plugin.PluginData;
import zutil.plugin.PluginManager;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.logging.Logger;
public class TraderServer {
private static final Logger logger = LogUtil.getLogger();
private static PluginManager pluginManager;
private static ScheduledExecutorService daemonExecutor;
private static HttpServer http;
public static void main(String[] args) throws SQLException {
// init logging
LogUtil.readConfiguration("logging.properties");
// Init DB and other things
TraderContext.initialize();
logger.info("Working directory: " + FileUtil.find(".").getAbsolutePath());
// init variables
pluginManager = new PluginManager();
daemonExecutor = Executors.newScheduledThreadPool(1); // We set only one thread for easier troubleshooting
http = new HttpServer(TraderContext.getIntegerProperty(TraderContext.PROPERTY_HTTP_PORT));
DBConnection db = TraderContext.getDB();
// ------------------------------------
// Initialize Plugins
// ------------------------------------
logger.info("Looking for plugins.");
// Disable plugins based on settings
for (PluginData plugin : getAllPlugins()) {
PluginConfig pluginConfig = PluginConfig.getPluginConfig(db, plugin.getName());
if (pluginConfig != null && !pluginConfig.isEnabled() && !plugin.getName().equals("Trader-Core")) {
logger.info("Disabling plugin '" + plugin.getName() + "'.");
plugin.setEnabled(false);
}
}
// ------------------------------------
// Initialize Daemons
// ------------------------------------
TraderMarketUpdateManager marketUpdateManager = new TraderMarketUpdateManager();
marketUpdateManager.initialize(daemonExecutor);
// ------------------------------------
// Init http server
// ------------------------------------
logger.info("Initializing HTTP Server.");
http.setDefaultPage(new HttpFilePage(FileUtil.find(TraderContext.RESOURCE_WEB_ROOT)));
http.setPage("/", new HttpRedirectPage("/symbol_overview"));
http.setPage(AlertEndpoint.getInstance().getPath(), AlertEndpoint.getInstance());
for (Iterator<TraderPage> it = pluginManager.getSingletonIterator(TraderApiEndpoint.class); it.hasNext(); )
registerPage(it.next());
for (Iterator<TraderPage> it = pluginManager.getSingletonIterator(TraderPage.class); it.hasNext(); )
registerPage(it.next());
http.start();
}
public static List<PluginData> getEnabledPlugins() {
return pluginManager.toArray();
}
public static List<PluginData> getAllPlugins() {
return pluginManager.toArrayAll();
}
public static void registerPage(TraderPage page){
http.setPage(page.getId(), page);
}
}