#include #include #include #include // Add executors here #include // Add loggers here #include int main(int argc, char **argv) { argparse::ArgumentParser args("Daggy"); args.add_argument("-v", "--verbose") .default_value(false) .implicit_value(true); args.add_argument("-d", "--daemon") .default_value(false) .implicit_value(true); args.add_argument("--ip") .help("IP address to listen to") .default_value("localhost"); args.add_argument("--log-file") .help("File to log to.") .default_value("daggyd.log"); args.add_argument("--port") .help("Port to listen to") .default_value(2503) .action([](const std::string &value) { return std::stoi(value); }); args.add_argument("--dag-threads") .help("Number of DAGs to run concurrently") .default_value(10) .action([](const std::string &value) { return std::stoull(value); }); args.add_argument("--web-threads") .help("Number of web requests to support concurrently") .default_value(30) .action([](const std::string &value) { return std::stoull(value); }); args.add_argument("--executor-threads") .help("Number of tasks to run concurrently") .default_value(30) .action([](const std::string &value) { return std::stoull(value); }); try { args.parse_args(argc, argv); } catch (std::exception &e) { std::cout << "Error: " << e.what() << std::endl; std::cout << args; exit(1); } std::ofstream logFile(args.get("--log-file"), std::ios::app); daggy::loggers::dag_run::OStreamLogger logger(logFile); daggy::executors::task::ForkingTaskExecutor executor(args.get("--executor-threads")); Pistache::Address listenSpec(args.get("--ip"), args.get("--port")); daggy::Server server(listenSpec, logger, executor, args.get("--dag-threads")); server.init(args.get("--web-threads")); server.start(); std::cout << "Server running at http://localhost:2503, Ctrl-C to exit" << std::endl; while (true) { std::this_thread::sleep_for(std::chrono::seconds(30)); } }