mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-05-04 03:44:13 +02:00
Implement new rest api for process manager
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
#ifndef RESTAPI_H
|
||||
#define RESTAPI_H
|
||||
|
||||
#include "WriterManager.hpp"
|
||||
|
||||
#include <chrono>
|
||||
#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
|
||||
|
||||
+73
-35
@@ -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<int>(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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user