aboutsummaryrefslogtreecommitdiff
path: root/main.cpp
blob: 41e56b66d70c4f6f903756c6b7c4151ba77509ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>

#include "clara.hpp"

#include "shared.h"
#include "logging.h"
#include "config.h"
#include "api/umosapi.h"


std::map<std::string, std::string> config;

int main(int argc, char *argv[]) {

    std::string config_path = "";
    const char *homedir;

    if ((homedir = getenv("XDG_CONFIG_HOME")) == NULL || (homedir = getenv("HOME")) == NULL) {
        homedir = getpwuid(getuid())->pw_dir;
    }

    config_path.append(homedir);
    config_path.append("/.config/umosapi/config.txt");

    bool showHelp = false;
    config["port"] = "9080";
    int thr = 2;
    auto cli = clara::detail::Help(showHelp)
             | clara::detail::Opt( config_path, "config" )["-c"]["--config"]("Config file path. Default `~/.config/umosapi/config.txt`.")
             | clara::detail::Opt( config["port"], "port" )["-p"]["--port"]("Port to listen. Default: `9080`.")
             | clara::detail::Opt( thr, "treads" )["-t"]["--threads"]("Number of threads. Default: `2`.");
    auto result = cli.parse( clara::detail::Args( argc, argv ) );
    if( !result )
    {
        std::cerr << "ERROR: Error in command line: " << result.errorMessage() << std::endl;
        std::cerr << cli << std::endl;
        exit(1);
    }

    if ( showHelp ) {
        std::cerr << cli << std::endl;
        exit(1);
    }

    spdlog::info("Using {} cores - {} threads", std::thread::hardware_concurrency(), thr);
    spdlog::info("Listen on 0.0.0.0:{}", config["port"]);

    spdlog::info("Using config file '{}'", config_path);

    if (!std::filesystem::exists(config_path)) {
        spdlog::error("Error fatal: config file '{}' not found", config_path);
        spdlog::error("config.txt is searched here: ~/.config/umosapi.config.txt");
        exit (EXIT_FAILURE);
    }

    load_config(config_path);

    spdlog::info("Using swaggerui {} path", config["swaggerui"]);
    spdlog::warn("No support for swagger for the moment");
    spdlog::info("Using mongoURI {}", config["mongoURI"]);

    UmosapiService::Api umosapi;
    umosapi.init();
    umosapi.start(std::stoi(config["port"]), thr);

    return EXIT_SUCCESS;

}