mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-05-01 15:52:24 +02:00
Merge buffer and writer utils
This commit is contained in:
@@ -17,17 +17,7 @@ namespace BufferUtils
|
||||
const std::string& latest_filename,
|
||||
const std::string& filename_to_write);
|
||||
|
||||
std::string get_latest_file(const std::string& latest_filename);
|
||||
|
||||
struct path_sufix {
|
||||
uint64_t start_pulse_id;
|
||||
uint64_t stop_pulse_id;
|
||||
std::string path;
|
||||
};
|
||||
|
||||
std::vector<path_sufix> get_path_suffixes(
|
||||
const uint64_t start_pulse_id,
|
||||
const uint64_t stop_pulse_id);
|
||||
void create_destination_folder(const std::string& output_file);
|
||||
}
|
||||
|
||||
#endif //BUFFER_UTILS_HPP
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "BufferUtils.hpp"
|
||||
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <buffer_config.hpp>
|
||||
|
||||
using namespace std;
|
||||
@@ -48,36 +48,16 @@ void BufferUtils::update_latest_file(
|
||||
system(str_latest_command.c_str());
|
||||
}
|
||||
|
||||
string BufferUtils::get_latest_file(const string& latest_filename)
|
||||
void BufferUtils::create_destination_folder(const string& output_file)
|
||||
{
|
||||
std::ifstream latest_input_file;
|
||||
latest_input_file.open(latest_filename);
|
||||
auto file_separator_index = output_file.rfind('/');
|
||||
|
||||
std::stringstream strStream;
|
||||
strStream << latest_input_file.rdbuf();
|
||||
std::string filename = strStream.str();
|
||||
if (file_separator_index != string::npos) {
|
||||
|
||||
return filename.substr(0, filename.size()-1);
|
||||
}
|
||||
string output_folder(output_file.substr(0, file_separator_index));
|
||||
|
||||
vector<BufferUtils::path_sufix> BufferUtils::get_path_suffixes (
|
||||
const uint64_t start_pulse_id,
|
||||
const uint64_t stop_pulse_id)
|
||||
{
|
||||
vector<BufferUtils::path_sufix> result;
|
||||
|
||||
uint64_t start_file_base = start_pulse_id / core_buffer::FILE_MOD;
|
||||
start_file_base *= core_buffer::FILE_MOD;
|
||||
|
||||
for (uint64_t first_pulse_id=start_file_base;
|
||||
first_pulse_id <= stop_pulse_id;
|
||||
first_pulse_id += core_buffer::FILE_MOD) {
|
||||
|
||||
result.emplace_back<BufferUtils::path_sufix>(
|
||||
{first_pulse_id,
|
||||
first_pulse_id + core_buffer::FILE_MOD - 1,
|
||||
get_filename("", "", first_pulse_id)});
|
||||
// TODO: filesystem::create_directories(output_folder)
|
||||
string create_folder_command("mkdir -p " + output_folder);
|
||||
system(create_folder_command.c_str());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
#ifndef WRITERUTILS_H
|
||||
#define WRITERUTILS_H
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace WriterUtils {
|
||||
void set_process_effective_id(int user_id);
|
||||
void create_destination_folder(const std::string& output_file);
|
||||
}
|
||||
|
||||
#endif // WRITERUTILS_H
|
||||
@@ -9,7 +9,6 @@
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "BufferUtils.hpp"
|
||||
#include "WriterUtils.hpp"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -81,7 +80,7 @@ void BufferBinaryWriter::open_file(const std::string& filename)
|
||||
{
|
||||
close_current_file();
|
||||
|
||||
WriterUtils::create_destination_folder(filename);
|
||||
BufferUtils::create_destination_folder(filename);
|
||||
|
||||
output_file_fd_ = ::open(filename.c_str(), O_WRONLY | O_CREAT,
|
||||
S_IRWXU | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
#include <iostream>
|
||||
#include <unistd.h>
|
||||
#include <filesystem>
|
||||
|
||||
#include "WriterUtils.hpp"
|
||||
#include "date.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
void WriterUtils::set_process_effective_id(int user_id)
|
||||
{
|
||||
|
||||
// TODO: use setfsuid and setfsgid
|
||||
|
||||
if (setegid(user_id)) {
|
||||
stringstream err_msg;
|
||||
|
||||
using namespace date;
|
||||
using namespace chrono;
|
||||
err_msg << "[" << system_clock::now() << "]";
|
||||
err_msg << "[WriterUtils::set_process_effective_id]";
|
||||
err_msg << " Cannot set group_id to " << user_id << endl;
|
||||
|
||||
throw runtime_error(err_msg.str());
|
||||
}
|
||||
|
||||
if (seteuid(user_id)) {
|
||||
stringstream err_msg;
|
||||
|
||||
using namespace date;
|
||||
using namespace chrono;
|
||||
err_msg << "[" << system_clock::now() << "]";
|
||||
err_msg << "[WriterUtils::set_process_effective_id]";
|
||||
err_msg << " Cannot set user_id to " << user_id << endl;
|
||||
|
||||
throw runtime_error(err_msg.str());
|
||||
}
|
||||
}
|
||||
|
||||
void WriterUtils::create_destination_folder(const string& output_file)
|
||||
{
|
||||
auto file_separator_index = output_file.rfind('/');
|
||||
|
||||
if (file_separator_index != string::npos) {
|
||||
|
||||
string output_folder(output_file.substr(0, file_separator_index));
|
||||
|
||||
// TODO: filesystem::create_directories(output_folder)
|
||||
string create_folder_command("mkdir -p " + output_folder);
|
||||
system(create_folder_command.c_str());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user