From 6c32868ca0d8f7b97b33a8fa70f03a81efb5c2e9 Mon Sep 17 00:00:00 2001 From: LDA Date: Mon, 12 Aug 2024 18:54:35 +0200 Subject: [PATCH] [MOD/WIP] Allow flat-file support, manpage updates --- Makefile | 2 +- src/Main.c | 14 ++++++++------ src/Parsee/Config.c | 2 ++ src/Parsee/Data.c | 12 +++++++++++- src/include/Parsee.h | 1 + tools/config.c | 8 +++++++- 6 files changed, 30 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 1683eca..733bd71 100644 --- a/Makefile +++ b/Makefile @@ -61,7 +61,7 @@ $(AYAS)/%.html: $(INCLUDES)/%.h # Installs everything. install: binary utils ayadoc install_setup install_parsee install_tools install_aya install_man - @echo Installing $(NAME) to $(PREFIX) + @echo Installed $(NAME) to $(PREFIX)! install_setup: install -dm755 "$(PREFIX)/bin" diff --git a/src/Main.c b/src/Main.c index 7f36c06..e8a62a5 100644 --- a/src/Main.c +++ b/src/Main.c @@ -40,7 +40,6 @@ Main(Array *args, HashMap *env) Cron *cron = NULL; start = UtilTsMillis(); - /* TODO: Read args(config file, HTTP/XMPP threads, ...) */ memset(&conf, 0, sizeof(conf)); Log(LOG_INFO, @@ -61,7 +60,7 @@ Main(Array *args, HashMap *env) int http = 8; ArgParseStateInit(&state); - while ((flag = ArgParse(&state, args, "H:J:")) != -1) + while ((flag = ArgParse(&state, args, "gH:J:")) != -1) { switch (flag) { @@ -71,14 +70,17 @@ Main(Array *args, HashMap *env) case 'J': xmpp = strtol(state.optArg, NULL, 10); break; + case 'g': + /* Write out the config file to a YAML document */ + Log(LOG_INFO, "Generating YAML..."); + yaml = StreamOpen("parsee.yaml", "w"); + ParseeExportConfigYAML(yaml); + StreamClose(yaml); + goto end; } } ParseeSetThreads(xmpp, http); } - /* Write out the config file to a YAML document */ - yaml = StreamOpen("parsee.yaml", "w"); - ParseeExportConfigYAML(yaml); - StreamClose(yaml); Log(LOG_NOTICE, "Connecting to XMPP..."); jabber = XMPPInitialiseCompStream( diff --git a/src/Parsee/Config.c b/src/Parsee/Config.c index 413b431..4bad59f 100644 --- a/src/Parsee/Config.c +++ b/src/Parsee/Config.c @@ -135,6 +135,7 @@ ParseeConfigInit(void) config->hs_token = StrRandom(32); config->http_threads = 8; config->xmpp_threads = 8; + config->db_size = 64 MB; /* TODO: This is NOT user friendly, and I know it! */ config->sender_localpart = PromptString( @@ -260,6 +261,7 @@ ParseeConfigLoad(char *conf) CopyToStr(media_base, "media_base"); CopyToStr(db_path, "db"); + CopyToInt(db_size, "db_size"); JsonFree(json); StreamClose(stream); diff --git a/src/Parsee/Data.c b/src/Parsee/Data.c index f5f939f..e92e3e4 100644 --- a/src/Parsee/Data.c +++ b/src/Parsee/Data.c @@ -27,7 +27,17 @@ ParseeInitData(XMPPComponent *comp) data->router = HttpRouterCreate(); data->jabber = comp; data->handler = CommandCreateRouter(); - data->db = DbOpenLMDB(data->config->db_path, 64 MB); + + if (data->config->db_size) + { + data->db = DbOpenLMDB(data->config->db_path, data->config->db_size); + } + if (!data->db) + { + Log(LOG_WARNING, "LMDB doesn't seem to be setup."); + Log(LOG_WARNING, "Falling back to flat-file."); + data->db = DbOpen(data->config->db_path, 0); + } #define X_ROUTE(path, func) do {\ if (!HttpRouterAdd(data->router, path, func))\ diff --git a/src/include/Parsee.h b/src/include/Parsee.h index 1b6cb84..a98913c 100644 --- a/src/include/Parsee.h +++ b/src/include/Parsee.h @@ -41,6 +41,7 @@ typedef struct ParseeConfig { /* ------- DB -------- */ char *db_path; + size_t db_size; /* - COMMAND-LINE FLAGS - */ int xmpp_threads, http_threads; diff --git a/tools/config.c b/tools/config.c index 252434d..ace1a76 100644 --- a/tools/config.c +++ b/tools/config.c @@ -88,11 +88,12 @@ Main(Array *args, HashMap *env) char *data = NULL, *media = NULL, *listen = NULL; int flag, code = EXIT_FAILURE; int port = 5347; + size_t lmdb_size = 0; listen = "localhost"; ArgParseStateInit(&state); - while ((flag = ArgParse(&state, args, "H:J:s:d:p:m:l:")) != -1) + while ((flag = ArgParse(&state, args, "H:J:s:d:p:m:l:S:")) != -1) { switch (flag) { @@ -118,6 +119,9 @@ Main(Array *args, HashMap *env) case 'p': port = strtol(state.optArg, NULL, 10); break; + case 'S': + lmdb_size = strtol(state.optArg, NULL, 10) * 1024 * 1024; + break; } } @@ -133,6 +137,7 @@ Main(Array *args, HashMap *env) "-l [Host/IP to listen as] " "-p [XMPP component port=5347] " "-J [parsee.xmppserver.ex]", + "-S [LMDB size]", ArrayGet(args, 0) ); goto end; @@ -155,6 +160,7 @@ Main(Array *args, HashMap *env) UtilMkdir(data, 0755); JsonSet(json, JsonValueString(data), 1, "db"); + JsonSet(json, JsonValueInteger(lmdb_size), 1, "db_size"); JsonSet(json, JsonValueString(homeserver), 1, "hs_base"); JsonSet(json, JsonValueString(api_base->host), 1, "hs_host");