MantisBase v0.3.4
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
109 static MantisBase& create(const json& config = json::object());
110
115 [[nodiscard]] int run();
116
125 void close();
126
133 static int quit(const int& exitCode = 0, const std::string& reason = "Something went wrong!");
134
139 [[nodiscard]] int port() const;
144 void setPort(const int& port);
145
150 [[nodiscard]] int poolSize() const;
151
156 [[nodiscard]] std::string host() const;
161 void setHost(const std::string& host);
162
167 [[nodiscard]] std::string publicDir() const;
172 void setPublicDir(const std::string& dir);
173
178 [[nodiscard]] std::string dataDir() const;
183 void setDataDir(const std::string& dir);
184
191 [[nodiscard]] std::string scriptsDir() const;
196 void setScriptsDir(const std::string& dir);
197
202 [[nodiscard]] std::string dbType() const;
203
208 void setDbType(const std::string& dbType);
213 static std::string jwtSecretKey();
218 static std::string appVersion();
220 static int appMinorVersion();
222 static int appMajorVersion();
224 static int appPatchVersion();
225
227 [[nodiscard]] Database& db() const;
229 [[nodiscard]] argparse::ArgumentParser& cmd() const;
231 [[nodiscard]] Router& router() const;
233 [[nodiscard]] KeyValStore& settings() const;
235 [[nodiscard]] Logger& logs() const;
237 [[nodiscard]] RealtimeDB& rt() const;
238
246 [[nodiscard]] Entity entity(const std::string& entity_name) const;
247
255 [[nodiscard]] bool hasEntity(const std::string& entity_name) const;
256
258 [[nodiscard]] duk_context* ctx() const;
259
260
267 void openBrowserOnStart() const;
268
274 [[nodiscard]] std::chrono::time_point<std::chrono::steady_clock> startTime() const;
275
276 [[nodiscard]] bool isDevMode() const;
277
278 private:
279 // Make class creation private to enforce
280 // singleton app pattern.
281 MantisBase();
282
286 void init(int argc = 0, char* argv[] = {});
287
293 static MantisBase& getInstanceImpl();
294
299 void setPoolSize(const int& pool_size);
300
301
302 // Private members
303 void parseArgs();
304 void init_units();
305
306 [[nodiscard]]
307 bool ensureDirsAreCreated() const;
308
309#ifdef MANTIS_ENABLE_SCRIPTING
313 void initJSEngine();
314
319 void loadStartScript() const;
320
326 void loadAndExecuteScript(const std::string& filePath) const;
327
333 void loadScript(const std::string& relativePath) const;
334
335 std::string version_JSWrapper() const { return appVersion(); }
336 std::string jwtSecretKey_JSWrapper() const { return jwtSecretKey(); }
337 void quit_JSWrapper(int code, const std::string& msg);
338
345 [[nodiscard]] Database* duk_db() const;
346 [[nodiscard]] Router* duk_router() const;
347#endif
348
349 // Store commandline args passed in, to be used in the init phase.
350 std::vector<std::string> m_cmdArgs;
351
352 // Hold state if the instance has be initialized already!
353 std::atomic<bool> m_isCreated = false;
354
355 std::string m_publicDir;
356 std::string m_dataDir;
357 std::string m_scriptsDir;
358 std::string m_dbType;
359
360 // System uptime checkpoint
361 std::chrono::time_point<std::chrono::steady_clock> m_startTime;
362
363 int m_port = 7070;
364 std::string m_host = "127.0.0.1";
365
366 int m_poolSize = 2;
367 bool m_toStartServer = false;
368 bool m_launchAdminPanel = false;
369 bool m_isDevMode = false;
370
371 std::unique_ptr<Logger> m_logger;
372 std::unique_ptr<Database> m_database;
373 std::unique_ptr<RealtimeDB> m_realtime;
374 std::unique_ptr<Router> m_router;
375 std::unique_ptr<KeyValStore> m_kvStore;
376 std::unique_ptr<argparse::ArgumentParser> m_opts;
377 duk_context* m_dukCtx; // For duktape context
378 };
379}
380
381#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:40
MantisBase entry point.
Definition mantisbase.h:40
~MantisBase()
Definition mantisbase.cpp:19
duk_context * ctx() const
Get the duktape context.
Definition mantisbase.cpp:281
static int quit(const int &exitCode=0, const std::string &reason="Something went wrong!")
Quit the running application immediately.
Definition mantisbase.cpp:184
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:267
static int appMajorVersion()
Fetch the minor version.
Definition mantisbase.cpp:364
static int appMinorVersion()
Fetch the major version.
Definition mantisbase.cpp:360
argparse::ArgumentParser & cmd() const
Get the commandline parser object.
Definition mantisbase.cpp:248
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:277
bool isDevMode() const
Definition mantisbase.cpp:335
std::string dbType() const
Retrieves the active database type.
Definition mantisbase.cpp:372
int port() const
Retrieve HTTP Listening port.
Definition mantisbase.cpp:376
MantisBase(const MantisBase &)=delete
void setHost(const std::string &host)
Update HTTP Server host address.
Definition mantisbase.cpp:392
void setDataDir(const std::string &dir)
Update the data directory for MantisApp.
Definition mantisbase.cpp:426
int poolSize() const
Retrieve the database pool size value.
Definition mantisbase.cpp:400
RealtimeDB & rt() const
Get the realtime unit (SQLite/PostgreSQL change detection for SSE /api/v1/realtime).
Definition mantisbase.cpp:263
KeyValStore & settings() const
Get the KeyValue unit object.
Definition mantisbase.cpp:256
static MantisBase & create(int argc, char **argv)
Create class instance given cmd args passed in.
Definition mantisbase.cpp:56
int run()
Start the http server and start listening for requests.
Definition mantisbase.cpp:225
std::string publicDir() const
Retrieve the public static file directory.
Definition mantisbase.cpp:411
void setPublicDir(const std::string &dir)
Update HTTP server static file directory.
Definition mantisbase.cpp:415
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:388
std::chrono::time_point< std::chrono::steady_clock > startTime() const
Get the server start time in std::chrono::
Definition mantisbase.cpp:331
MantisBase & operator=(const MantisBase &)=delete
void setPort(const int &port)
Set a new port value for HTTP server.
Definition mantisbase.cpp:380
static int appPatchVersion()
Fetch the patch version.
Definition mantisbase.cpp:368
Logger & logs() const
Get the logs unit object.
Definition mantisbase.cpp:260
std::string dataDir() const
Retrieves the data directory where SQLite db and files are stored.
Definition mantisbase.cpp:422
static std::string jwtSecretKey()
Retrieve the JWT secret key.
Definition mantisbase.cpp:348
MantisBase(MantisBase &&)=delete
void setScriptsDir(const std::string &dir)
Update the scripts directory for MantisApp.
Definition mantisbase.cpp:437
Router & router() const
Get the router object instance.
Definition mantisbase.cpp:252
std::string scriptsDir() const
Retrieves the scripts directory where JavaScript files are stored used for extending functionality in...
Definition mantisbase.cpp:433
MantisBase & operator=(MantisBase &&)=delete
static MantisBase & instance()
Retrieve existing application instance.
Definition mantisbase.cpp:48
void setDbType(const std::string &dbType)
Definition mantisbase.cpp:339
void close()
Close the application and reset object instances that are dependent on the class.
Definition mantisbase.cpp:195
Database & db() const
Get the database unit object.
Definition mantisbase.cpp:244
static std::string appVersion()
Definition mantisbase.cpp:356
void openBrowserOnStart() const
Launch browser with the admin dashboard page. If all goes well, the default OS browser should open (i...
Definition mantisbase.cpp:285
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:15
nlohmann::json json
Shorten JSON namespace.
Definition context_store.h:18
Type definitions and aliases for MantisBase.