Upgrade to SLF4D 4.2.0, simplify config.

This commit is contained in:
andrewlalis 2025-11-18 20:40:22 -05:00
parent 85c5cee598
commit 185cf706a7
4 changed files with 67 additions and 51 deletions

View File

@ -7,6 +7,7 @@
"d2sqlite3": "~>1.0", "d2sqlite3": "~>1.0",
"handy-http-starter": "~>1.6", "handy-http-starter": "~>1.6",
"jwt4d": "~>0.0.2", "jwt4d": "~>0.0.2",
"scheduled": "~>1.4.0",
"secured": "~>3.0" "secured": "~>3.0"
}, },
"description": "Backend API for Finnow.", "description": "Backend API for Finnow.",

View File

@ -1,26 +1,26 @@
{ {
"fileVersion": 1, "fileVersion": 1,
"versions": { "versions": {
"asdf": { "asdf": "0.7.17+commit.5.g7f77a30",
"repository": "git+https://github.com/libmir/asdf.git",
"version": "7f77a3031975816b604a513ddeefbc9e514f236c"
},
"d2sqlite3": "1.0.0", "d2sqlite3": "1.0.0",
"dxml": "0.4.4", "dxml": "0.4.5",
"handy-http-data": "1.3.0", "handy-http-data": "1.3.0",
"handy-http-handlers": "1.1.0", "handy-http-handlers": "1.1.0",
"handy-http-primitives": "1.8.1", "handy-http-primitives": "1.8.1",
"handy-http-starter": "1.6.0", "handy-http-starter": "1.6.0",
"handy-http-transport": "1.8.0", "handy-http-transport": "1.10.0",
"handy-http-websockets": "1.2.0", "handy-http-websockets": "1.2.0",
"jwt4d": "0.0.2", "jwt4d": "0.0.2",
"mir-algorithm": "3.22.4", "mir-algorithm": "3.22.4",
"mir-core": "1.7.3", "mir-core": "1.7.3",
"openssl": "3.3.4", "openssl": "3.3.4",
"path-matcher": "1.2.0", "path-matcher": "1.2.0",
"photon": "0.18.11",
"scheduled": "1.4.0",
"secured": "3.0.0", "secured": "3.0.0",
"sharded-map": "2.7.0",
"silly": "1.1.1", "silly": "1.1.1",
"slf4d": "4.1.1", "slf4d": "4.2.0",
"streams": "3.6.0" "streams": "3.6.0"
} }
} }

View File

@ -3,25 +3,11 @@ import slf4d;
import slf4d.default_provider; import slf4d.default_provider;
import api_mapping; import api_mapping;
import util.config;
struct AppConfig {
ushort port;
string webOrigin;
string logLevel;
}
void main() { void main() {
const AppConfig config = readConfig(); const config = readConfig();
Level logLevel = Levels.INFO; Level logLevel = getConfiguredLoggingLevel(config);
if (config.logLevel == "TRACE") {
logLevel = Levels.TRACE;
} else if (config.logLevel == "DEBUG") {
logLevel = Levels.DEBUG;
} else if (config.logLevel == "WARN") {
logLevel = Levels.WARN;
} else if (config.logLevel == "ERROR") {
logLevel = Levels.ERROR;
}
auto provider = new DefaultProvider(logLevel); auto provider = new DefaultProvider(logLevel);
configureLoggingProvider(provider); configureLoggingProvider(provider);
infoF!"Loaded app config: port = %d, webOrigin = %s"(config.port, config.webOrigin); infoF!"Loaded app config: port = %d, webOrigin = %s"(config.port, config.webOrigin);
@ -31,30 +17,3 @@ void main() {
HttpTransport transport = new TaskPoolHttp1Transport(mapApiHandlers(config.webOrigin), transportConfig); HttpTransport transport = new TaskPoolHttp1Transport(mapApiHandlers(config.webOrigin), transportConfig);
transport.start(); transport.start();
} }
AppConfig readConfig() {
import std.file : exists, readText;
import std.json;
import std.conv : to;
AppConfig defaultConfig = AppConfig(
8080,
"http://localhost:5173",
"INFO"
);
// Local dev environment if no config is given.
if (!exists("finnow-api-config.json")) {
return defaultConfig;
}
JSONValue obj = parseJSON(readText("finnow-api-config.json"));
if ("port" in obj.object) {
defaultConfig.port = obj.object["port"].integer.to!ushort;
}
if ("webOrigin" in obj.object) {
defaultConfig.webOrigin = obj.object["webOrigin"].str;
}
if ("logLevel" in obj.object) {
defaultConfig.logLevel = obj.object["logLevel"].str;
}
return defaultConfig;
}

View File

@ -0,0 +1,56 @@
module util.config;
import std.stdio;
import slf4d;
private const CONFIG_FILE = "finnow-api-config.json";
struct AppConfig {
ushort port;
string webOrigin;
string logLevel;
}
Level getConfiguredLoggingLevel(in AppConfig cfg) {
try {
return parseLoggingLevel(cfg.logLevel);
} catch (LoggingException e) {
return Levels.INFO;
}
}
AppConfig readConfig() {
import std.file : exists, readText;
import std.json;
import std.conv : to;
AppConfig defaultConfig = AppConfig(
8080,
"http://localhost:5173",
"INFO"
);
// Local dev environment if no config is given.
if (!exists(CONFIG_FILE)) {
return defaultConfig;
}
JSONValue obj;
try {
obj = parseJSON(readText(CONFIG_FILE));
} catch (Exception e) {
stderr.writefln!"Failed to read config from file %s, using default config as a fallback: %s"(
CONFIG_FILE,
e.msg
);
return defaultConfig;
}
if ("port" in obj.object) {
defaultConfig.port = obj.object["port"].integer.to!ushort;
}
if ("webOrigin" in obj.object) {
defaultConfig.webOrigin = obj.object["webOrigin"].str;
}
if ("logLevel" in obj.object) {
defaultConfig.logLevel = obj.object["logLevel"].str;
}
return defaultConfig;
}