mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-06-03 14:48:29 +02:00
Move parameters type storage to Manager
This commit is contained in:
@@ -4,8 +4,8 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
WriterManager::WriterManager(uint64_t n_images):
|
||||
n_images(n_images), running_flag(true), n_received_frames(0), n_written_frames(0)
|
||||
WriterManager::WriterManager(map<string, DATA_TYPE>* parameters_type, uint64_t n_images):
|
||||
parameters_type(parameters_type), n_images(n_images), running_flag(true), n_received_frames(0), n_written_frames(0)
|
||||
{
|
||||
#ifdef DEBUG_OUTPUT
|
||||
cout << "[WriterManager::WriterManager] Writer manager for n_images " << n_images << endl;
|
||||
@@ -41,7 +41,7 @@ map<string, uint64_t> WriterManager::get_statistics()
|
||||
return result;
|
||||
}
|
||||
|
||||
std::map<std::string, boost::any>& WriterManager::get_parameters(){
|
||||
map<string, boost::any>& WriterManager::get_parameters(){
|
||||
return parameters;
|
||||
}
|
||||
|
||||
@@ -55,6 +55,10 @@ void WriterManager::set_parameters(map<string, boost::any>& new_parameters)
|
||||
}
|
||||
}
|
||||
|
||||
map<string, DATA_TYPE>* WriterManager::get_parameters_type() {
|
||||
return parameters_type;
|
||||
}
|
||||
|
||||
bool WriterManager::is_running()
|
||||
{
|
||||
// Take into account n_images only if it is <> 0.
|
||||
|
||||
@@ -6,22 +6,26 @@
|
||||
#include <atomic>
|
||||
#include <boost/any.hpp>
|
||||
|
||||
#include "H5Format.hpp"
|
||||
|
||||
class WriterManager
|
||||
{
|
||||
std::map<std::string, boost::any> parameters = {};
|
||||
|
||||
// Initialize in constructor.
|
||||
std::map<std::string, DATA_TYPE>* parameters_type;
|
||||
size_t n_images;
|
||||
std::atomic_bool running_flag;
|
||||
std::atomic<uint64_t> n_received_frames;
|
||||
std::atomic<uint64_t> n_written_frames;
|
||||
|
||||
public:
|
||||
WriterManager(uint64_t n_images=0);
|
||||
WriterManager(std::map<std::string, DATA_TYPE>* parameters_type, uint64_t n_images=0);
|
||||
void stop();
|
||||
bool is_running();
|
||||
std::string get_status();
|
||||
|
||||
std::map<std::string, DATA_TYPE>* get_parameters_type();
|
||||
std::map<std::string, boost::any>& get_parameters();
|
||||
void set_parameters(std::map<std::string, boost::any>& new_parameters);
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ void run_writer(string connect_address, string output_file, uint64_t n_images, u
|
||||
int n_io_threads = config::zmq_n_io_threads;
|
||||
int receive_timeout = config::zmq_receive_timeout;
|
||||
|
||||
WriterManager manager(n_images);
|
||||
WriterManager manager(get_input_value_type(), n_images);
|
||||
RingBuffer ring_buffer(n_slots);
|
||||
|
||||
// TODO: Remove this. This is needed only for testing.
|
||||
@@ -228,7 +228,7 @@ void run_writer(string connect_address, string output_file, uint64_t n_images, u
|
||||
boost::thread receiver_thread(receive_zmq, &manager, &ring_buffer, connect_address, n_io_threads, receive_timeout);
|
||||
boost::thread writer_thread(write_h5, &manager, &ring_buffer, output_file);
|
||||
|
||||
start_rest_api(manager, rest_port, get_input_value_type());
|
||||
start_rest_api(manager, rest_port);
|
||||
|
||||
#ifdef DEBUG_OUTPUT
|
||||
cout << "[h5_zmq_writer::run_writer] Rest API stopped." << endl;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
void start_rest_api(WriterManager& writer_manager, uint16_t port, std::map<std::string, DATA_TYPE>* input_value_type)
|
||||
void start_rest_api(WriterManager& writer_manager, uint16_t port)
|
||||
{
|
||||
|
||||
#ifdef DEBUG_OUTPUT
|
||||
@@ -59,6 +59,7 @@ void start_rest_api(WriterManager& writer_manager, uint16_t port, std::map<std::
|
||||
|
||||
CROW_ROUTE (app, "/parameters").methods("GET"_method, "POST"_method) ([&](const crow::request& req){
|
||||
crow::json::wvalue result;
|
||||
auto parameters_type = writer_manager.get_parameters_type();
|
||||
|
||||
if (req.method == "GET"_method) {
|
||||
|
||||
@@ -67,7 +68,7 @@ void start_rest_api(WriterManager& writer_manager, uint16_t port, std::map<std::
|
||||
auto parameter_value = item.second;
|
||||
|
||||
try {
|
||||
auto parameter_type = input_value_type->at(parameter_name);
|
||||
auto parameter_type = parameters_type->at(parameter_name);
|
||||
|
||||
if (parameter_type == NX_FLOAT) {
|
||||
result[parameter_name] = boost::any_cast<double>(parameter_value);
|
||||
@@ -104,7 +105,7 @@ void start_rest_api(WriterManager& writer_manager, uint16_t port, std::map<std::
|
||||
string parameter_name = item.key();
|
||||
|
||||
try{
|
||||
auto parameter_type = input_value_type->at(parameter_name);
|
||||
auto parameter_type = parameters_type->at(parameter_name);
|
||||
|
||||
if (parameter_type == NX_FLOAT) {
|
||||
new_parameters[parameter_name] = item.d();
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
#define REST_INTERFACE_H
|
||||
|
||||
#include "WriterManager.hpp"
|
||||
#include "H5Format.hpp"
|
||||
|
||||
void start_rest_api(WriterManager& writer_manager, uint16_t port, std::map<std::string, DATA_TYPE>* input_value_type);
|
||||
void start_rest_api(WriterManager& writer_manager, uint16_t port);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user