From 7eef98e8709a0b571ca546ab010e0b9cb865c9c5 Mon Sep 17 00:00:00 2001 From: Jose Date: Fri, 14 Mar 2025 01:07:32 +0100 Subject: [PATCH] changes (still bugs :c) --- .../net/miarma/contaminus/ContaminUS.java | 62 ------------- .../contaminus/common/ConfigManager.java | 74 ++++++++++++---- .../miarma/contaminus/common/Constants.java | 10 +-- .../contaminus/database/DatabaseManager.java | 86 ++++++++++--------- .../server/DataLayerAPIVerticle.java | 37 +++----- .../contaminus/server/HttpServerVerticle.java | 39 --------- .../server/LogicLayerAPIVerticle.java | 28 ++---- .../contaminus/server/MainVerticle.java | 75 +++++++++++++++- .../contaminus/server/WebServerVerticle.java | 35 ++++++++ .../miarma/contaminus/util/SystemUtil.java | 49 ----------- 10 files changed, 229 insertions(+), 266 deletions(-) delete mode 100644 backend/src/main/java/net/miarma/contaminus/ContaminUS.java delete mode 100644 backend/src/main/java/net/miarma/contaminus/server/HttpServerVerticle.java create mode 100644 backend/src/main/java/net/miarma/contaminus/server/WebServerVerticle.java delete mode 100644 backend/src/main/java/net/miarma/contaminus/util/SystemUtil.java diff --git a/backend/src/main/java/net/miarma/contaminus/ContaminUS.java b/backend/src/main/java/net/miarma/contaminus/ContaminUS.java deleted file mode 100644 index a3d599c..0000000 --- a/backend/src/main/java/net/miarma/contaminus/ContaminUS.java +++ /dev/null @@ -1,62 +0,0 @@ -package net.miarma.contaminus; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; - -import io.vertx.core.Launcher; -import io.vertx.core.impl.logging.LoggerFactory; -import net.miarma.contaminus.common.Constants; -import net.miarma.contaminus.common.OSType; -import net.miarma.contaminus.server.MainVerticle; -import net.miarma.contaminus.util.SystemUtil; - -public class ContaminUS { - public static void main(String[] args) { - initializeConstants(); - initializeDirectories(); - copyDefaultConfig(); - - Launcher.executeCommand("run", MainVerticle.class.getName()); - } - - private static void initializeConstants() { - Constants.HOME_DIR = SystemUtil.getOS() == OSType.WINDOWS ? - "C:/Users/" + System.getProperty("user.name") + "/" : - System.getProperty("user.home").contains("root") ? "/root/" : - "/home/" + System.getProperty("user.name") + "/"; - - Constants.BASE_DIR = Constants.HOME_DIR + - (SystemUtil.getOS() == OSType.WINDOWS ? ".contaminus" : - SystemUtil.getOS() == OSType.LINUX ? ".config/contaminus" : - ".contaminus"); - - Constants.CONFIG_FILE = Constants.BASE_DIR + "/config.properties"; - System.setProperty("java.util.logging.manager", "org.jboss.logmanager.LogManager"); - Constants.LOGGER = LoggerFactory.getLogger(Constants.APP_NAME); - } - - private static void initializeDirectories() { - File baseDir = new File(Constants.BASE_DIR); - if (!baseDir.exists()) { - baseDir.mkdirs(); - } - } - - private static void copyDefaultConfig() { - File configFile = new File(Constants.CONFIG_FILE); - if (!configFile.exists()) { - try (InputStream in = MainVerticle.class.getClassLoader().getResourceAsStream("default.properties")) { - if (in != null) { - Files.copy(in, configFile.toPath(), StandardCopyOption.REPLACE_EXISTING); - } else { - Constants.LOGGER.error("Default config file not found in resources"); - } - } catch (IOException e) { - Constants.LOGGER.error("Failed to copy default config file", e); - } - } - } -} diff --git a/backend/src/main/java/net/miarma/contaminus/common/ConfigManager.java b/backend/src/main/java/net/miarma/contaminus/common/ConfigManager.java index 212930d..1ee3aae 100644 --- a/backend/src/main/java/net/miarma/contaminus/common/ConfigManager.java +++ b/backend/src/main/java/net/miarma/contaminus/common/ConfigManager.java @@ -4,21 +4,20 @@ import java.io.*; import java.util.Properties; public class ConfigManager { - private static ConfigManager instance; + private static final ConfigManager INSTANCE = new ConfigManager(); private final File configFile; private final Properties config; + private static final String CONFIG_FILE_NAME = "config.properties"; private ConfigManager() { - this.configFile = new File(Constants.CONFIG_FILE); + String path = getBaseDir() + CONFIG_FILE_NAME; + this.configFile = new File(path); this.config = new Properties(); loadConfig(); } - public static synchronized ConfigManager getInstance() { - if (instance == null) { - instance = new ConfigManager(); - } - return instance; + public static ConfigManager getInstance() { + return INSTANCE; } private void loadConfig() { @@ -28,25 +27,70 @@ public class ConfigManager { Constants.LOGGER.error("Error loading configuration file: ", e); } } + + public File getConfigFile() { + return configFile; + } public String getJdbcUrl() { - return String.format("%s://%s:%s/%s", - config.getProperty("db.protocol"), - config.getProperty("db.host"), - config.getProperty("db.port"), - config.getProperty("db.name")); + return String.format("%s://%s:%s/%s", + config.getProperty("db.protocol"), + config.getProperty("db.host"), + config.getProperty("db.port"), + config.getProperty("db.name")); + } + + public String getHost() { + return this.getStringProperty("inet.host"); + } + + public int getDataApiPort() { + return this.getIntProperty("data-api.port"); + } + + public int getLogicApiPort() { + return this.getIntProperty("logic-api.port"); + } + + public int getWebserverPort() { + return this.getIntProperty("web.port"); + } + + public String getHomeDir() { + return getOS() == OSType.WINDOWS ? + "C:/Users/" + System.getProperty("user.name") + "/" : + System.getProperty("user.home").contains("root") ? "/root/" : + "/home/" + System.getProperty("user.name") + "/"; + } + + public String getBaseDir() { + return getHomeDir() + + (getOS() == OSType.WINDOWS ? ".contaminus" : + getOS() == OSType.LINUX ? ".config/contaminus" : + ".contaminus"); } + + public static OSType getOS() { + String os = System.getProperty("os.name").toLowerCase(); + if (os.contains("win")) { + return OSType.WINDOWS; + } else if (os.contains("nix") || os.contains("nux")) { + return OSType.LINUX; + } else { + return OSType.INVALID_OS; + } + } public String getStringProperty(String key) { return config.getProperty(key); } public int getIntProperty(String key) { - return Integer.parseInt(config.getProperty(key)); - } + return Integer.parseInt(config.getProperty(key)); + } public boolean getBooleanProperty(String key) { - return Boolean.parseBoolean(config.getProperty(key)); + return Boolean.parseBoolean(config.getProperty(key)); } public void setProperty(String key, String value) { diff --git a/backend/src/main/java/net/miarma/contaminus/common/Constants.java b/backend/src/main/java/net/miarma/contaminus/common/Constants.java index e016784..63f1824 100644 --- a/backend/src/main/java/net/miarma/contaminus/common/Constants.java +++ b/backend/src/main/java/net/miarma/contaminus/common/Constants.java @@ -1,18 +1,14 @@ package net.miarma.contaminus.common; import io.vertx.core.impl.logging.Logger; -import net.miarma.contaminus.database.DatabaseManager; +import io.vertx.core.impl.logging.LoggerFactory; public class Constants { public static final String APP_NAME = "ContaminUS"; public static final int API_VERSION = 1; public static final String API_PREFIX = "/api/v" + Constants.API_VERSION; - public static String HOME_DIR; - public static String BASE_DIR; - public static String CONFIG_FILE; - public static ConfigManager CONFIG; - public static DatabaseManager DB; - public static Logger LOGGER; + public static Logger LOGGER = LoggerFactory.getLogger(Constants.APP_NAME); + /* API Endpoints */ public static final String GET_GROUPS = API_PREFIX + "/groups"; diff --git a/backend/src/main/java/net/miarma/contaminus/database/DatabaseManager.java b/backend/src/main/java/net/miarma/contaminus/database/DatabaseManager.java index f126c3c..852487d 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/DatabaseManager.java +++ b/backend/src/main/java/net/miarma/contaminus/database/DatabaseManager.java @@ -1,10 +1,5 @@ package net.miarma.contaminus.database; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; - import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; @@ -15,52 +10,61 @@ import io.vertx.sqlclient.RowSet; import net.miarma.contaminus.common.ConfigManager; import net.miarma.contaminus.common.Constants; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; + public class DatabaseManager { - private final JDBCPool pool; + private static DatabaseManager instance; + private final JDBCPool pool; @SuppressWarnings("deprecation") - public DatabaseManager(Vertx vertx) { + private DatabaseManager(Vertx vertx) { ConfigManager config = ConfigManager.getInstance(); JsonObject dbConfig = new JsonObject() - .put("url", config.getStringProperty("db.protocol") + "//" + - config.getStringProperty("db.host") + ":" + - config.getStringProperty("db.port") + "/" + - config.getStringProperty("db.name")) - .put("user", config.getStringProperty("db.user")) - .put("password", config.getStringProperty("db.pwd")) - .put("max_pool_size", config.getStringProperty("db.poolSize")); + .put("jdbcUrl", config.getJdbcUrl()) + .put("username", config.getStringProperty("db.user")) + .put("password", config.getStringProperty("db.pwd")) + .put("max_pool_size", config.getIntProperty("db.poolSize")); pool = JDBCPool.pool(vertx, dbConfig); } - public Future> testConnection() { - return pool.query("SELECT 1").execute(); - } + public static synchronized DatabaseManager getInstance(Vertx vertx) { + if (instance == null) { + instance = new DatabaseManager(vertx); + } + return instance; + } - public Future> execute(String query, Class clazz, - Handler> onSuccess, Handler onFailure) { + public Future> testConnection() { + return pool.query("SELECT 1").execute(); + } - return pool.query(query).execute() - .map(rows -> { - List results = new ArrayList<>(); - for (Row row : rows) { - try { - Constructor constructor = clazz.getConstructor(Row.class); - results.add(constructor.newInstance(row)); - } catch (NoSuchMethodException | InstantiationException | - IllegalAccessException | InvocationTargetException e) { - Constants.LOGGER.error("Error instantiating class: " + e.getMessage()); - } - } - return results; - }) - .onComplete(ar -> { - if (ar.succeeded()) { - onSuccess.handle(ar.result()); - } else { - onFailure.handle(ar.cause()); - } - }); - } + public Future> execute(String query, Class clazz, + Handler> onSuccess, Handler onFailure) { + return pool.query(query).execute() + .map(rows -> { + List results = new ArrayList<>(); + for (Row row : rows) { + try { + Constructor constructor = clazz.getConstructor(Row.class); + results.add(constructor.newInstance(row)); + } catch (NoSuchMethodException | InstantiationException | + IllegalAccessException | InvocationTargetException e) { + Constants.LOGGER.error("Error instantiating class: " + e.getMessage()); + } + } + return results; + }) + .onComplete(ar -> { + if (ar.succeeded()) { + onSuccess.handle(ar.result()); + } else { + onFailure.handle(ar.cause()); + } + }); + } } diff --git a/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java index b68ac76..9f2f4e4 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java @@ -17,22 +17,17 @@ import io.vertx.ext.web.handler.CorsHandler; import net.miarma.contaminus.common.ConfigManager; import net.miarma.contaminus.common.Constants; import net.miarma.contaminus.database.DatabaseManager; -import net.miarma.contaminus.util.SystemUtil; @SuppressWarnings("unused") public class DataLayerAPIVerticle extends AbstractVerticle { - private DatabaseManager dbManager; - private Gson gson; - private ConfigManager configManager; + private DatabaseManager dbManager = DatabaseManager.getInstance(vertx); + private Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); + private ConfigManager configManager = ConfigManager.getInstance(); @Override public void start(Promise startPromise) { Constants.LOGGER.info("📡 Iniciando DataLayerAPIVerticle..."); - - configManager = ConfigManager.getInstance(); - gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); - dbManager = new DatabaseManager(vertx); - + Router router = Router.router(vertx); Set allowedMethods = new HashSet<>( Arrays.asList(HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.OPTIONS)); // Por ejemplo @@ -71,30 +66,18 @@ public class DataLayerAPIVerticle extends AbstractVerticle { dbManager.testConnection() .onSuccess(rows -> { Constants.LOGGER.info("✅ Database connection ok"); - Constants.LOGGER.info("🟢 DataAccessVerticle desplegado"); + vertx.createHttpServer() + .requestHandler(router) + .listen(configManager.getDataApiPort(), configManager.getHost()); startPromise.complete(); }) .onFailure(onFailure -> { Constants.LOGGER.error("❌ Database connection failed"); - Constants.LOGGER.error("🔴 Error al desplegar DataAccessVerticle", onFailure); + Throwable t = onFailure.getCause(); + t.printStackTrace(); startPromise.fail(onFailure); }); - - vertx.createHttpServer() - .requestHandler(router) - .listen(SystemUtil.getDataApiPort(), result -> { - if (result.succeeded()) { - Constants.LOGGER.info(String.format( - "🟢 DataLayerAPIVerticle desplegado. (http://%s:%d)", - SystemUtil.getHost(), SystemUtil.getDataApiPort() - )); - startPromise.complete(); - } else { - Constants.LOGGER.error("🔴 Error al desplegar DataLayerAPIVerticle", result.cause()); - startPromise.fail(result.cause()); - } - }); - + } private void getAllGroups(RoutingContext context) { diff --git a/backend/src/main/java/net/miarma/contaminus/server/HttpServerVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/HttpServerVerticle.java deleted file mode 100644 index c2477ae..0000000 --- a/backend/src/main/java/net/miarma/contaminus/server/HttpServerVerticle.java +++ /dev/null @@ -1,39 +0,0 @@ -package net.miarma.contaminus.server; - -import io.vertx.core.AbstractVerticle; -import io.vertx.ext.web.Router; -import io.vertx.ext.web.handler.StaticHandler; -import net.miarma.contaminus.common.Constants; -import net.miarma.contaminus.util.SystemUtil; - -public class HttpServerVerticle extends AbstractVerticle { - - @Override - public void start() { - Constants.LOGGER.info("📡 Iniciando HttpServerVerticle..."); - - Router router = Router.router(vertx); - - router.route("/*") - .handler( - StaticHandler.create("webroot") - .setDefaultContentEncoding("UTF-8") - ); - - router.route("/dashboard/*").handler(ctx -> { - ctx.reroute("/index.html"); - }); - - vertx.createHttpServer().requestHandler(router).listen( - SystemUtil.getWebserverPort(), SystemUtil.getHost(), result -> { - if (result.succeeded()) { - Constants.LOGGER.info(String.format("🟢 HttpServerVerticle desplegado. (http://%s:%d)", - SystemUtil.getHost(), SystemUtil.getWebserverPort()) - ); - } else { - Constants.LOGGER.error("🔴 Error al desplegar HttpServerVerticle", result.cause()); - } - } - ); - } -} diff --git a/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java index 41efc38..24e029a 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java @@ -18,21 +18,16 @@ import io.vertx.ext.web.handler.CorsHandler; import net.miarma.contaminus.common.ConfigManager; import net.miarma.contaminus.common.Constants; import net.miarma.contaminus.database.DatabaseManager; -import net.miarma.contaminus.util.SystemUtil; @SuppressWarnings("unused") public class LogicLayerAPIVerticle extends AbstractVerticle { - private DatabaseManager dbManager; - private Gson gson; - private ConfigManager configManager; + private DatabaseManager dbManager = DatabaseManager.getInstance(vertx); + private Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); + private ConfigManager configManager = ConfigManager.getInstance(); @Override public void start(Promise startPromise) { Constants.LOGGER.info("📡 Iniciando LogicApiVerticle..."); - - configManager = ConfigManager.getInstance(); - gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); - dbManager = new DatabaseManager(vertx); Router router = Router.router(vertx); Set allowedMethods = new HashSet<>( @@ -60,20 +55,9 @@ public class LogicLayerAPIVerticle extends AbstractVerticle { vertx.createHttpServer() .requestHandler(router) - .listen( - SystemUtil.getLogicApiPort(), - SystemUtil.getHost(), - result -> { - if (result.succeeded()) { - Constants.LOGGER.info(String.format( - "🟢 ApiVerticle desplegado. (http://%s:%d)", SystemUtil.getHost(), SystemUtil.getLogicApiPort() - )); - startPromise.complete(); - } else { - Constants.LOGGER.error("🔴 Error al desplegar LogicApiVerticle", result.cause()); - startPromise.fail(result.cause()); - } - }); + .listen(configManager.getLogicApiPort(), configManager.getHost()); + + startPromise.complete(); } diff --git a/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java index 8d0a233..403d0b9 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java @@ -1,20 +1,87 @@ package net.miarma.contaminus.server; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; + import io.vertx.core.AbstractVerticle; import io.vertx.core.DeploymentOptions; import io.vertx.core.Promise; import io.vertx.core.ThreadingModel; +import net.miarma.contaminus.common.ConfigManager; +import net.miarma.contaminus.common.Constants; public class MainVerticle extends AbstractVerticle { + static ConfigManager configManager = ConfigManager.getInstance(); + + private void init() { + initializeDirectories(); + copyDefaultConfig(); + } + + private static void initializeDirectories() { + File baseDir = new File(configManager.getBaseDir()); + if (!baseDir.exists()) { + baseDir.mkdirs(); + } + } + + private static void copyDefaultConfig() { + File configFile = new File(configManager.getConfigFile().getAbsolutePath()); + if (!configFile.exists()) { + try (InputStream in = MainVerticle.class.getClassLoader().getResourceAsStream("default.properties")) { + if (in != null) { + Files.copy(in, configFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + } else { + Constants.LOGGER.error("Default config file not found in resources"); + } + } catch (IOException e) { + Constants.LOGGER.error("Failed to copy default config file", e); + } + } + } @Override - public void start(Promise startPromise) { + public void start(Promise startPromise) { + System.setProperty("java.util.logging.manager", "org.jboss.logmanager.LogManager"); + init(); + final DeploymentOptions options = new DeploymentOptions(); options.setThreadingModel(ThreadingModel.WORKER); + + vertx.deployVerticle(new DataLayerAPIVerticle(), options, result -> { + if(result.succeeded()) { + Constants.LOGGER.info(String.format( + "🟢 DataLayerAPIVerticle desplegado. (http://%s:%d)", + configManager.getHost(), configManager.getDataApiPort() + )); + } else { + Constants.LOGGER.error("🔴 Error al desplegar DataLayerAPIVerticle", result.cause()); + } + }); - getVertx().deployVerticle(new DataLayerAPIVerticle(), options); - getVertx().deployVerticle(new LogicLayerAPIVerticle(), options); - getVertx().deployVerticle(new HttpServerVerticle()); + vertx.deployVerticle(new LogicLayerAPIVerticle(), options, result -> { + if(result.succeeded()) { + Constants.LOGGER.info(String.format( + "🟢 ApiVerticle desplegado. (http://%s:%d)", + configManager.getHost(), configManager.getLogicApiPort() + )); + } else { + Constants.LOGGER.error("🔴 Error al desplegar LogicApiVerticle", result.cause()); + } + }); + + vertx.deployVerticle(new WebServerVerticle(), result -> { + if(result.succeeded()) { + Constants.LOGGER.info(String.format( + "🟢 WebServerVerticle desplegado. (http://%s:%d)", + configManager.getHost(), configManager.getWebserverPort())); + } else { + Constants.LOGGER.error("🔴 Error al desplegar WebServerVerticle", result.cause()); + } + }); } @Override diff --git a/backend/src/main/java/net/miarma/contaminus/server/WebServerVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/WebServerVerticle.java new file mode 100644 index 0000000..04f51ff --- /dev/null +++ b/backend/src/main/java/net/miarma/contaminus/server/WebServerVerticle.java @@ -0,0 +1,35 @@ +package net.miarma.contaminus.server; + +import io.vertx.core.AbstractVerticle; +import io.vertx.core.Promise; +import io.vertx.ext.web.Router; +import io.vertx.ext.web.handler.StaticHandler; +import net.miarma.contaminus.common.ConfigManager; +import net.miarma.contaminus.common.Constants; + +public class WebServerVerticle extends AbstractVerticle { + private final ConfigManager configManager = ConfigManager.getInstance(); + + @Override + public void start(Promise startPromise) { + Constants.LOGGER.info("📡 Iniciando WebServerVerticle..."); + + Router router = Router.router(vertx); + + router.route("/*") + .handler( + StaticHandler.create("webroot") + .setDefaultContentEncoding("UTF-8") + ); + + router.route("/dashboard/*").handler(ctx -> { + ctx.reroute("/index.html"); + }); + + vertx.createHttpServer() + .requestHandler(router) + .listen(configManager.getWebserverPort(), configManager.getHost()); + + startPromise.complete(); + } +} diff --git a/backend/src/main/java/net/miarma/contaminus/util/SystemUtil.java b/backend/src/main/java/net/miarma/contaminus/util/SystemUtil.java deleted file mode 100644 index 62bb496..0000000 --- a/backend/src/main/java/net/miarma/contaminus/util/SystemUtil.java +++ /dev/null @@ -1,49 +0,0 @@ -package net.miarma.contaminus.util; - -import net.miarma.contaminus.common.ConfigManager; -import net.miarma.contaminus.common.OSType; - -public class SystemUtil { - private static ConfigManager configManager; - - private static String host; - private static int dataApiPort; - private static int logicApiPort; - private static int webserverPort; - - public static void init() { - configManager = ConfigManager.getInstance(); - - host = configManager.getStringProperty("inet.host"); - dataApiPort = configManager.getIntProperty("data-api.port"); - logicApiPort = configManager.getIntProperty("logic-api.port"); - webserverPort = configManager.getIntProperty("web.port"); - } - - public static String getHost() { - return host; - } - - public static int getDataApiPort() { - return dataApiPort; - } - - public static int getLogicApiPort() { - return logicApiPort; - } - - public static int getWebserverPort() { - return webserverPort; - } - - public static OSType getOS() { - String os = System.getProperty("os.name").toLowerCase(); - if (os.contains("win")) { - return OSType.WINDOWS; - } else if (os.contains("nix") || os.contains("nux")) { - return OSType.LINUX; - } else { - return OSType.INVALID_OS; - } - } -}