From 0448c7a264d008f41979cf284d09701644f270a4 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Tue, 7 Apr 2020 12:20:23 +0200 Subject: [PATCH] Implement new rest api for process manager --- core-writer/include/RestApi.hpp | 5 +- core-writer/src/RestApi.cpp | 108 +++++++++++++++++++++----------- 2 files changed, 76 insertions(+), 37 deletions(-) diff --git a/core-writer/include/RestApi.hpp b/core-writer/include/RestApi.hpp index 961f68b..17a8168 100644 --- a/core-writer/include/RestApi.hpp +++ b/core-writer/include/RestApi.hpp @@ -1,13 +1,14 @@ #ifndef RESTAPI_H #define RESTAPI_H -#include "WriterManager.hpp" + #include #include "date.h" +#include "ProcessManager.hpp" namespace RestApi { - void start_rest_api(WriterManager& writer_manager, uint16_t port); + void start_rest_api(ProcessManager& manager, uint16_t port); } #endif diff --git a/core-writer/src/RestApi.cpp b/core-writer/src/RestApi.cpp index 6dc92c6..d647ae6 100644 --- a/core-writer/src/RestApi.cpp +++ b/core-writer/src/RestApi.cpp @@ -6,63 +6,101 @@ using namespace std; -void RestApi::start_rest_api(WriterManager& writer_manager, uint16_t port) +void RestApi::start_rest_api(ProcessManager& manager, uint16_t port) { #ifdef DEBUG_OUTPUT - cout << "[rest_interface::start_rest_api] Starting rest interface on port "; - cout << port << endl; + cout << "[RestApi::start_rest_api]"; + cout << " Starting rest interface on port "; + cout << static_cast(port) << endl; #endif crow::SimpleApp app; - CROW_ROUTE(app, "/stop")([&](){ - writer_manager.stop(); + CROW_ROUTE (app, "/writing").methods("POST"_method) + ([&](const crow::request& req) + { + auto request_parameters = crow::json::load(req.body); - crow::json::wvalue result; - result["state"] = "ok"; - result["status"] = writer_manager.get_status(); + string output_file = request_parameters["output_file"].s(); + int n_frames = request_parameters["n_frames"].i(); + int user_id = request_parameters["user_id"].i(); - return result; - }); + manager.start_writing(output_file, n_frames, user_id); - CROW_ROUTE (app, "/status") ([&](){ - crow::json::wvalue result; - result["state"] = "ok"; - result["status"] = writer_manager.get_status(); + crow::json::wvalue result; + result["state"] = "ok"; + result["status"] = manager.get_status(); + result["message"] = "Writing started."; - return result; - }); + return result; + }); - CROW_ROUTE (app, "/statistics") ([&](){ + CROW_ROUTE(app, "/writing").methods("DELETE"_method) + ([&](const crow::request& req){ + manager.stop_writing(); + + crow::json::wvalue result; + result["state"] = "ok"; + result["status"] = manager.get_status(); + result["message"] = "Writing stopped."; + + return result; + }); + + CROW_ROUTE (app, "/receiving").methods("POST"_method) + ([&](const crow::request& req) + { + auto request_parameters = crow::json::load(req.body); + + string url = request_parameters["connect_address"].s(); + int n_threads = request_parameters["n_receiving_threads"].i(); + + manager.start_receiving(url, n_threads); + + crow::json::wvalue result; + result["state"] = "ok"; + result["status"] = manager.get_status(); + result["message"] = "Receiving started."; + + return result; + }); + + CROW_ROUTE(app, "/receiving").methods("DELETE"_method) + ([&](const crow::request& req){ + manager.stop_receiving(); + + crow::json::wvalue result; + result["state"] = "ok"; + result["status"] = manager.get_status(); + result["message"] = "Receiving stopped."; + + return result; + }); + + CROW_ROUTE (app, "/status") + ([&](){ + crow::json::wvalue result; + result["state"] = "ok"; + result["status"] = manager.get_status(); + + return result; + }); + + CROW_ROUTE (app, "/statistics") + ([&](){ crow::json::wvalue result; - for (const auto& item : writer_manager.get_statistics()) { + for (const auto& item : manager.get_statistics()) { result[item.first] = item.second; } result["state"] = "ok"; - result["status"] = writer_manager.get_status(); + result["status"] = manager.get_status(); return result; }); - CROW_ROUTE (app, "/start").methods("POST"_method) ([&](const crow::request& req) - { - auto request_parameters = crow::json::load(req.body); - - int n_frames = request_parameters["n_frames"].i(); - string output_file = request_parameters["output_file"].s(); - int user_id = request_parameters["user_id"].i(); - - writer_manager.start(output_file, n_frames, user_id); - - crow::json::wvalue result; - result["message"] = "Writer started."; - result["status"] = writer_manager.get_status(); - return result; - }); - app.loglevel(crow::LogLevel::ERROR); app.port(port).run(); }