Hotfix for aarch64

Signed-off-by: Tiago Garcia <tiago.rgarcia@ua.pt>
This commit is contained in:
Tiago Garcia 2024-07-19 19:41:33 +01:00
parent d0135da4fd
commit cd769fa8bc
Signed by: TiagoRG
GPG Key ID: DFCD48E3F420DB42
6 changed files with 78 additions and 45 deletions

View File

@ -164,6 +164,8 @@ The configuration file must contain the `run-actions` field, which is an object
}
```
Note: if you don't want to use the `args` field, just leave an empty array such as `"args": []`.
## License
This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details.

View File

@ -5,6 +5,6 @@
#include <crow/http_response.h>
#include <nlohmann/json.hpp>
crow::response run_actions(const nlohmann::json &, const nlohmann::json &,const crow::request &);
crow::response run_actions(const nlohmann::json &, const crow::request &);
#endif

View File

@ -9,7 +9,7 @@ void Config::create_config(std::string config_file_path) {
std::cout << "Creating config file" << std::endl;
nlohmann::json config = {
{"port", 65001},
{"tokens", nlohmann::json::array()},
{"tokens", {}},
};
std::string path_to_config = config_file_path.substr(0, config_file_path.find_last_of('/'));
if (!std::filesystem::exists(path_to_config)) {

View File

@ -2,7 +2,7 @@
#include "logger.hpp"
crow::response run_actions(const nlohmann::json &run_actions, const nlohmann::json &tokens, const crow::request &req) {
crow::response run_actions(const nlohmann::json &run_actions, const crow::request &req) {
nlohmann::json payload;
try {
payload = nlohmann::json::parse(req.body);

View File

@ -117,10 +117,14 @@ void Logger::log(std::string message, std::string level) {
formatted_message += "(" + std::string(time_buffer) + ") ";
if (level == "CODE") {
#if defined(__aarch64__)
formatted_message += "\n" + message + "\n";
#else
struct winsize w;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
int term_width = w.ws_col > 250 ? 250 : w.ws_col - 1;
formatted_message += "\n" + std::string(term_width, '=') + "\n" + message + "\n" + std::string(term_width, '=');
#endif
} else {
formatted_message += "[" + level + "] " + message;
}
@ -129,10 +133,14 @@ void Logger::log(std::string message, std::string level) {
}
std::cout << formatted_message << std::endl;
if (level == "CODE") {
#if defined(__aarch64__)
Logger::log_file << std::endl << message << std::endl;
#else
struct winsize w;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
int term_width = w.ws_col > 250 ? 250 : w.ws_col - 1;
Logger::log_file << std::string(term_width, '=') << std::endl << message << std::endl << std::string(term_width, '=') << std::endl;
#endif
} else {
Logger::log_file << "[" << level << "] " << message << std::endl;
}

View File

@ -6,14 +6,14 @@
#include "logger.hpp"
Routes::Routes(nlohmann::json config) {
Logger::info("Partitioning configuration");
Logger::info("[Routes] Partitioning configuration");
const nlohmann::json config_update_files = config["update-files"];
const nlohmann::json config_run_actions = config["run-actions"];
const nlohmann::json config_tokens = config["tokens"];
Logger::info("Registering route \"/\"");
Logger::info("[Routes] Registering route \"/\"");
CROW_ROUTE(this->app, "/")
.methods("POST"_method)
.methods("POST"_method, "GET"_method)
.name("Ping")
([]() {
nlohmann::json response = {
@ -23,49 +23,72 @@ Routes::Routes(nlohmann::json config) {
return crow::response(200, response.dump());
});
if (!config_update_files.is_null()) {
Logger::info("Registering route \"/update-files\"");
CROW_ROUTE(this->app, "/update-files")
.methods("POST"_method)
.name("Update Files")
([&config_update_files, &config_tokens](const crow::request &req) {
try {
return update_files(config_update_files, config_tokens, req);
} catch (const std::exception &e) {
Logger::error("Unknown error in update_files: " + std::string(e.what()));
nlohmann::json response = {
{"status", 500},
{"error", "Internal server error"}
};
return crow::response(500, response.dump());
}
});
}
Logger::info("[Routes] Registering route \"/update-files\"");
CROW_ROUTE(this->app, "/update-files")
.methods("POST"_method)
.name("Update Files")
([&config_update_files, &config_tokens](const crow::request &req) {
if (config_update_files.is_null()) {
Logger::warn("[Routes] No update-files configuration found");
nlohmann::json response = {
{"status", 404},
{"error", "No update-files configuration found"}
};
return crow::response(404, response.dump());
}
try {
return update_files(config_update_files, config_tokens, req);
} catch (const std::exception &e) {
Logger::error("[Routes] Unknown error in update_files: " + std::string(e.what()));
nlohmann::json response = {
{"status", 500},
{"error", "Internal server error"}
};
return crow::response(500, response.dump());
}
});
if (!config_run_actions.is_null()) {
Logger::info("Registering route \"/run-actions\"");
CROW_ROUTE(this->app, "/run-actions")
.methods("POST"_method)
.name("Run Actions")
([&config_run_actions, &config_tokens](const crow::request &req) {
try {
return run_actions(config_run_actions, config_tokens, req);
} catch (const std::exception &e) {
Logger::error("Unknown error in run_actions: " + std::string(e.what()));
nlohmann::json response = {
{"status", 500},
{"error", "Internal server error"}
};
return crow::response(500, response.dump());
}
});
}
Logger::info("[Routes] Registering route \"/run-actions\"");
CROW_ROUTE(this->app, "/run-actions")
.methods("POST"_method)
.name("Run Actions")
([&config_run_actions](const crow::request &req) {
if (config_run_actions.is_null()) {
Logger::warn("[Routes] No run-actions configuration found");
nlohmann::json response = {
{"status", 404},
{"error", "No run-actions configuration found"}
};
return crow::response(404, response.dump());
}
try {
return run_actions(config_run_actions, req);
} catch (const std::exception &e) {
Logger::error("[Routes] Unknown error in run_actions: " + std::string(e.what()));
nlohmann::json response = {
{"status", 500},
{"error", "Internal server error"}
};
return crow::response(500, response.dump());
}
});
Logger::info("Starting server");
Logger::info("[Routes] Registering catch-all route (404)");
CROW_CATCHALL_ROUTE(this->app)
([](const crow::request &req) {
nlohmann::json response = {
{"status", 404},
{"error", "Not found"}
};
return crow::response(404, response.dump());
});
Logger::info("[Routes] Routes registered");
Logger::info("[Routes] Starting server");
try {
this->app.port(config["port"].get<int>()).multithreaded().run();
} catch (const std::exception &e) {
Logger::fatal("Error starting server: " + std::string(e.what()));
Logger::fatal("[Routes] Error starting server: " + std::string(e.what()));
}
Logger::info("Server stopped");
Logger::info("[Routes] Server stopped");
}