MantisBase v0.3.7
Loading...
Searching...
No Matches
mantisbase.h
Go to the documentation of this file.
1
11#ifndef MANTISBASE_APP_H
12#define MANTISBASE_APP_H
13
14#include <memory>
15#include <string>
16#include <filesystem>
17#include <chrono>
18#include <argparse/argparse.hpp>
19// #include <dukglue/dukglue.h>
20
21#include "core/types.h"
22#include "core/kv_store.h"
23
24namespace mb
25{
26 class RealtimeDB;
40 {
41 public:
43
44 // Disable copying and moving
45 MantisBase(const MantisBase&) = delete;
46 MantisBase& operator=(const MantisBase&) = delete;
49
54 static MantisBase& instance();
55
64 static MantisBase& create(int argc, char** argv);
65
114 static MantisBase& create(const json& config = json::object());
115
120 [[nodiscard]] int run();
121
130 void close();
131
138 static int quit(const int& exitCode = 0, const std::string& reason = "Something went wrong!");
139
144 [[nodiscard]] int port() const;
149 void setPort(const int& port);
150
155 [[nodiscard]] int poolSize() const;
156
161 [[nodiscard]] std::string host() const;
166 void setHost(const std::string& host);
167
172 [[nodiscard]] std::string publicDir() const;
177 void setPublicDir(const std::string& dir);
178
183 [[nodiscard]] std::string dataDir() const;
188 void setDataDir(const std::string& dir);
189
196 [[nodiscard]] std::string scriptsDir() const;
201 void setScriptsDir(const std::string& dir);
202
207 [[nodiscard]] std::string migrationsDir() const;
212 void setMigrationsDir(const std::string& dir);
213
217 [[nodiscard]] bool skipAdminSetup() const;
218 void setSkipAdminSetup(bool skip);
219
224 [[nodiscard]] std::string dbType() const;
225
230 void setDbType(const std::string& dbType);
235 static std::string jwtSecretKey();
240 static std::string appVersion();
242 static int appMinorVersion();
244 static int appMajorVersion();
246 static int appPatchVersion();
247
249 [[nodiscard]] Database& db() const;
251 [[nodiscard]] argparse::ArgumentParser& cmd() const;
253 [[nodiscard]] Router& router() const;
255 [[nodiscard]] KeyValStore& settings() const;
257 [[nodiscard]] Logger& logs() const;
259 [[nodiscard]] RealtimeDB& rt() const;
260
268 [[nodiscard]] Entity entity(const std::string& entity_name) const;
269
277 [[nodiscard]] bool hasEntity(const std::string& entity_name) const;
278
280 // [[nodiscard]] duk_context* ctx() const;
281
282
289 void openBrowserOnStart() const;
290
296 [[nodiscard]] std::chrono::time_point<std::chrono::steady_clock> startTime() const;
297
298 [[nodiscard]] bool isDevMode() const;
299
300 private:
301 // Make class creation private to enforce
302 // singleton app pattern.
303 MantisBase();
304
308 void init(int argc = 0, char* argv[] = {});
309
315 static MantisBase& getInstanceImpl();
316
321 void setPoolSize(const int& pool_size);
322
323
324 // Private members
325 void parseArgs();
326 void init_units();
327
328 [[nodiscard]]
329 bool ensureDirsAreCreated() const;
330
331 [[nodiscard]] bool isCreated() const;
332
333#ifdef MB_SCRIPTING_ENABLED
337 void initJSEngine();
338
343 void loadStartScript() const;
344
350 void loadAndExecuteScript(const std::string& filePath) const;
351
357 void loadScript(const std::string& relativePath) const;
358
359 std::string version_JSWrapper() const { return appVersion(); }
360 std::string jwtSecretKey_JSWrapper() const { return jwtSecretKey(); }
361 void quit_JSWrapper(int code, const std::string& msg);
362
369 [[nodiscard]] Database* duk_db() const;
370 [[nodiscard]] Router* duk_router() const;
371#endif
372
373 // Store commandline args passed in, to be used in the init phase.
374 std::vector<std::string> m_cmdArgs;
375
376 // Hold state if the instance has be initialized already!
377 std::atomic<bool> m_isCreated = false;
378
379 std::string m_publicDir;
380 std::string m_dataDir;
381 std::string m_scriptsDir;
382 std::string m_migrationsDir;
383 std::string m_dbType;
384
385 // System uptime checkpoint
386 std::chrono::time_point<std::chrono::steady_clock> m_startTime;
387
388 int m_port = 7070;
389 std::string m_host = "127.0.0.1";
390
391 // For snowflake ID generation
392 uint8_t m_zoneId = 0;
393 uint8_t m_shardNo = 0;
394
395 //
396 int m_poolSize = 2;
397 bool m_toStartServer = false;
398 bool m_launchAdminPanel = false;
399 bool m_isDevMode = false;
400 bool m_skipAdminSetup = false;
401
402 std::unique_ptr<Logger> m_logger;
403 std::unique_ptr<Database> m_database;
404 std::unique_ptr<RealtimeDB> m_realtime;
405 std::unique_ptr<Router> m_router;
406 std::unique_ptr<KeyValStore> m_kvStore;
407 std::unique_ptr<argparse::ArgumentParser> m_opts;
408 // duk_context* m_dukCtx; // For duktape context
409 };
410}
411
412#endif //MANTISBASE_APP_H
Database connection and session management.
Definition database.h:39
Represents a database table/entity with schema and CRUD operations.
Definition entity.h:39
Manages application settings.
Definition kv_store.h:23
Definition logger.h:41
MantisBase entry point.
Definition mantisbase.h:40
~MantisBase()
Definition mantisbase.cpp:18
static int quit(const int &exitCode=0, const std::string &reason="Something went wrong!")
Quit the running application immediately.
Definition mantisbase.cpp:231
Entity entity(const std::string &entity_name) const
Fetch a table schema encapsulated by an Entity object from given the table name. If table does not ex...
Definition mantisbase.cpp:318
static int appMajorVersion()
Fetch the minor version.
Definition mantisbase.cpp:415
static int appMinorVersion()
Fetch the major version.
Definition mantisbase.cpp:411
argparse::ArgumentParser & cmd() const
Get the commandline parser object.
Definition mantisbase.cpp:299
bool hasEntity(const std::string &entity_name) const
Check if table schema encapsulated by an Entity object from given the table name exists....
Definition mantisbase.cpp:328
bool isDevMode() const
Definition mantisbase.cpp:386
std::string migrationsDir() const
Retrieves the migrations directory path.
Definition mantisbase.cpp:495
std::string dbType() const
Retrieves the active database type.
Definition mantisbase.cpp:423
int port() const
Retrieve HTTP Listening port.
Definition mantisbase.cpp:427
MantisBase(const MantisBase &)=delete
void setHost(const std::string &host)
Update HTTP Server host address.
Definition mantisbase.cpp:443
void setDataDir(const std::string &dir)
Update the data directory for MantisApp.
Definition mantisbase.cpp:477
int poolSize() const
Retrieve the database pool size value.
Definition mantisbase.cpp:451
RealtimeDB & rt() const
Get the realtime unit (SQLite/PostgreSQL change detection for SSE /api/v1/realtime).
Definition mantisbase.cpp:314
KeyValStore & settings() const
Get the KeyValue unit object.
Definition mantisbase.cpp:307
static MantisBase & create(int argc, char **argv)
Create class instance given cmd args passed in.
Definition mantisbase.cpp:60
int run()
Start the http server and start listening for requests.
Definition mantisbase.cpp:276
std::string publicDir() const
Retrieve the public static file directory.
Definition mantisbase.cpp:462
void setPublicDir(const std::string &dir)
Update HTTP server static file directory.
Definition mantisbase.cpp:466
std::string host() const
Retrieve HTTP Server host address. For instance, a host of 127.0.0.1, 0.0.0.0, etc.
Definition mantisbase.cpp:439
std::chrono::time_point< std::chrono::steady_clock > startTime() const
Get the server start time in std::chrono::
Definition mantisbase.cpp:382
MantisBase & operator=(const MantisBase &)=delete
void setPort(const int &port)
Set a new port value for HTTP server.
Definition mantisbase.cpp:431
static int appPatchVersion()
Fetch the patch version.
Definition mantisbase.cpp:419
Logger & logs() const
Get the logs unit object.
Definition mantisbase.cpp:311
std::string dataDir() const
Retrieves the data directory where SQLite db and files are stored.
Definition mantisbase.cpp:473
static std::string jwtSecretKey()
Retrieve the JWT secret key.
Definition mantisbase.cpp:399
MantisBase(MantisBase &&)=delete
void setScriptsDir(const std::string &dir)
Update the scripts directory for MantisApp.
Definition mantisbase.cpp:488
Router & router() const
Get the router object instance.
Definition mantisbase.cpp:303
void setMigrationsDir(const std::string &dir)
Update the migrations directory path.
Definition mantisbase.cpp:499
std::string scriptsDir() const
Retrieves the scripts directory where JavaScript files are stored used for extending functionality in...
Definition mantisbase.cpp:484
MantisBase & operator=(MantisBase &&)=delete
void setSkipAdminSetup(bool skip)
Definition mantisbase.cpp:513
static MantisBase & instance()
Retrieve existing application instance.
Definition mantisbase.cpp:52
void setDbType(const std::string &dbType)
Definition mantisbase.cpp:390
void close()
Close the application and reset object instances that are dependent on the class.
Definition mantisbase.cpp:242
Database & db() const
Get the database unit object.
Definition mantisbase.cpp:295
static std::string appVersion()
Definition mantisbase.cpp:407
bool skipAdminSetup() const
Whether first-boot admin setup (browser) should be skipped on serve.
Definition mantisbase.cpp:506
void openBrowserOnStart() const
Get the duktape context.
Definition mantisbase.cpp:336
Definition realtime.h:52
HTTP router for managing routes and request handling.
Definition router.h:38
Key-value store for application settings.
router.h
Definition auth.h:16
nlohmann::json json
Shorten JSON namespace.
Definition context_store.h:18
Type definitions and aliases for MantisBase.