diff --git a/backend/Readme.md b/backend/Readme.md new file mode 100644 index 0000000..bd489b4 --- /dev/null +++ b/backend/Readme.md @@ -0,0 +1,8 @@ +# Backend + +This module manages all backend services, i.e.: + +* it loads the configuration +* starts a webserver +* binds all other api modules to the webserver +* binds the web module to the webserver \ No newline at end of file diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index d70515a..433a029 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -16,9 +16,11 @@ dependencies{ implementation(project(":translations")) implementation(project(":user")) implementation(project(":web")) - + implementation("de.srsoftware:configuration.api:1.0.2") + implementation("de.srsoftware:configuration.json:1.0.3") implementation("de.srsoftware:tools.optionals:1.0.0") implementation("de.srsoftware:tools.util:2.0.3") + implementation("org.json:json:20240303") } tasks.jar { diff --git a/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java b/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java index e18d66a..c53cfd7 100644 --- a/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java +++ b/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java @@ -1,39 +1,58 @@ /* © SRSoftware 2025 */ package de.srsoftware.umbrella.backend; +import static de.srsoftware.umbrella.core.Constants.UMBRELLA; +import static de.srsoftware.umbrella.core.Util.mapLogLevel; import static java.lang.System.Logger.Level.DEBUG; import static java.lang.System.Logger.Level.INFO; import com.sun.net.httpserver.HttpServer; +import de.srsoftware.configuration.JsonConfig; import de.srsoftware.tools.ColorLogger; import de.srsoftware.umbrella.core.ConnectionProvider; import de.srsoftware.umbrella.translations.Translations; import de.srsoftware.umbrella.user.UserModule; import de.srsoftware.umbrella.user.sqlite.SqliteDB; import de.srsoftware.umbrella.web.WebHandler; +import org.json.JSONObject; + import java.io.IOException; import java.net.InetSocketAddress; import java.util.concurrent.Executors; public class Application { private static final System.Logger LOG = System.getLogger("Umbrella"); - private static final String USER_DB = "/home/srichter/workspace/umbrella/data/umbrella.db"; - private static final String LOGIN_SERVICE_DB = "/home/srichter/workspace/umbrella/data/umbrella.db"; + + private static void configureLogging(JsonConfig jsonConfig) { + var rootLevel = jsonConfig.get("umbrella.logging.rootLevel", "INFO"); + ColorLogger.setRootLogLevel(mapLogLevel(rootLevel)); + + var loggers = jsonConfig.get("umbrella.logging.loggers").orElse(null); + if (loggers instanceof JSONObject json){ + json.keySet().forEach(key -> { + var lvl = mapLogLevel(json.getString(key)); + ColorLogger.setLogLevel(key,lvl); + }); + } + } public static void main(String[] args) throws IOException { - ColorLogger.setRootLogLevel(DEBUG); LOG.log(INFO, "Starting Umbrella:"); - var port = 8080; - var threads = 16; + var jsonConfig = new JsonConfig(UMBRELLA); + configureLogging(jsonConfig); + var port = jsonConfig.get("umbrella.http.port", 8080); + var threads = jsonConfig.get("umbrella.threads", 16); + var userDB = jsonConfig.get("umbrella.database.user", jsonConfig.file().getParent()+"/umbrella.db"); + var loginDB = jsonConfig.get("umbrella.database.login_services",jsonConfig.file().getParent()+"/umbrella.db"); var connectionProvider = new ConnectionProvider(); - var userDb = new SqliteDB(connectionProvider.get(USER_DB)); - var loginServicedb = new SqliteDB(connectionProvider.get(LOGIN_SERVICE_DB)); - HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); + var userDb = new SqliteDB(connectionProvider.get(userDB)); + var loginServicedb = new SqliteDB(connectionProvider.get(loginDB)); + var server = HttpServer.create(new InetSocketAddress(port), 0); server.setExecutor(Executors.newFixedThreadPool(threads)); new WebHandler().bindPath("/").on(server); new UserModule(userDb,loginServicedb).bindPath("/api/user").on(server); new Translations().bindPath("/api/translations").on(server); - LOG.log(INFO,"Started web server at {0}",port); server.start(); + LOG.log(INFO,"Started web server at {0}",port); } } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/Util.java b/core/src/main/java/de/srsoftware/umbrella/core/Util.java index 3733503..385a5ed 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/Util.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/Util.java @@ -21,6 +21,16 @@ public class Util { public static final System.Logger LOG = System.getLogger("Util"); private Util(){} + public static System.Logger.Level mapLogLevel(String lbl) { + return switch (lbl){ + case "ERROR" -> ERROR; + case "WARN" -> WARNING; + case "DEBUG" -> DEBUG; + case "TRACE" -> TRACE; + default -> INFO; + }; + } + public static HttpURLConnection open(URL url) throws IOException { var conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("Accept","*/*");