From 8ee7ca77c88a4c395867c16c1b731a556db8b9e7 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Wed, 10 Jan 2018 11:37:22 +0100 Subject: [PATCH] Add rest interface --- src/rest_interface.cpp | 81 ++++++++++++++++++++++++++++++++++++++++++ src/rest_interface.hpp | 8 +++++ 2 files changed, 89 insertions(+) create mode 100644 src/rest_interface.cpp create mode 100644 src/rest_interface.hpp diff --git a/src/rest_interface.cpp b/src/rest_interface.cpp new file mode 100644 index 0000000..713d075 --- /dev/null +++ b/src/rest_interface.cpp @@ -0,0 +1,81 @@ +#include +#include + +#include "rest_interface.hpp" +#include "crow_all.h" + +void start_rest_api(WriterManager& writer_manager, uint16_t port) +{ + crow::SimpleApp app; + + CROW_ROUTE(app, "/kill")([&](){ + writer_manager.stop(); + + crow::json::wvalue result; + + result["status"] = "Writer killed."; + + app.stop(); + + return result; + }); + + CROW_ROUTE(app, "/stop")([&](){ + writer_manager.stop(); + + crow::json::wvalue result; + + result["status"] = writer_manager.get_status(); + + return result; + }); + + CROW_ROUTE (app, "/status") ([&](){ + crow::json::wvalue result; + + result["status"] = writer_manager.get_status(); + + return result; + }); + + CROW_ROUTE (app, "/statistics") ([&](){ + crow::json::wvalue result; + + for (const auto& item : writer_manager.get_statistics()) { + result[item.first] = item.second; + } + + return result; + }); + + CROW_ROUTE (app, "/parameters").methods("GET"_method, "POST"_method) ([&](const crow::request& req){ + crow::json::wvalue result; + + if (req.method == "GET"_method) { + + for (const auto& item : writer_manager.get_paramters()) { + result[item.first] = item.second; + } + + return result; + } else { + auto request_parameters = crow::json::load(req.body); + + // TODO: Fix this. + + // const std::map parameters_to_set; + + // for (const auto& item : request_parameters) { + // parameters_to_set[item.first] = item.second; + // } + + // writer_manager.set_parameters(parameters_to_set); + + result["message"] = "Parameters set."; + return result; + } + }); + + app.loglevel(crow::LogLevel::INFO); + app.port(port).run(); +} \ No newline at end of file diff --git a/src/rest_interface.hpp b/src/rest_interface.hpp new file mode 100644 index 0000000..add9af5 --- /dev/null +++ b/src/rest_interface.hpp @@ -0,0 +1,8 @@ +#ifndef REST_INTERFACE_H +#define REST_INTERFACE_H + +#include "WriterManager.hpp" + +void start_rest_api(WriterManager& writer_manager, uint16_t port); + +#endif \ No newline at end of file