Skip to content

Commit 67cf3ec

Browse files
eCAL Rec / ecalhdf5: Support one file per topic feature (#755)
Co-authored-by: Florian Reimold <[email protected]>
1 parent 7127b1d commit 67cf3ec

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1648
-501
lines changed

app/app_pb/src/ecal/app/pb/rec/client_service.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ message Configuration
5454
// meas_name [string] The name of the measurement (un-evaluated format)
5555
// description [string] The description that will be saved to the measurement's doc folder (un-evaluated format)
5656
// max_file_size_mib [uint] The maximum HDF5 file size (When exceeding the file size, the measurement will be splitted into multiple files).
57+
// one_file_per_topic [bool] Whether the recorder shall create 1 hdf5 file per channel
5758

5859
// ==== Upload measurement config ====
5960
// protocol [string] The upload type to use (e.g. ftp). More types may be added in the future, if necessary.

app/app_pb/src/ecal/app/pb/rec/server_config.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ message RecServerConfig
5757
string root_dir = 1; // The root directory where to save the measurements to
5858
string meas_name = 2; // The name for new measurements. This name will be used for the name of a sub-directory in the root dir.
5959
int64 max_file_size_mib = 3; // Max file size in MiB for HDF5 files
60+
bool one_file_per_topic = 11; // Whether to create 1 HDF5 file per eCAL Topic
6061
string description = 4; // The description for new measurements. Will be stored in the /doc/direction.txt file.
6162
map<string, RecClientConfig> enabled_clients_config = 5; // All enabled rec clients along with their specific configuration
6263
bool pre_buffer_enabled = 6; // Whether pre-buffering is enabled

app/rec/rec_client_cli/src/ecal_rec_service.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,22 @@ ::eCAL::rec::JobConfig EcalRecService::ToJobConfig(const ::eCAL::pb::rec_client:
620620
}
621621
}
622622

623+
//////////////////////////////////////
624+
// one_file_per_topic //
625+
//////////////////////////////////////
626+
{
627+
auto it = config.items().find("one_file_per_topic");
628+
if (it != config.items().end())
629+
{
630+
std::string one_file_per_topic = it->second;
631+
job_config.SetOneFilePerTopicEnabled(strToBool(one_file_per_topic));
632+
}
633+
else
634+
{
635+
job_config.SetOneFilePerTopicEnabled(false);
636+
}
637+
}
638+
623639
//////////////////////////////////////
624640
// description //
625641
//////////////////////////////////////

app/rec/rec_client_core/include/rec_client_core/ecal_rec_defs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#pragma once
2121

2222
#define ECAL_REC_VERSION_MAJOR 2
23-
#define ECAL_REC_VERSION_MINOR 5
23+
#define ECAL_REC_VERSION_MINOR 6
2424
#define ECAL_REC_VERSION_PATCH 0
2525

2626
#define __ECAL_REC_FUNCTION_TO_STR(x) #x // Stringify any input

app/rec/rec_client_core/include/rec_client_core/job_config.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ namespace eCAL
5252
void SetMaxFileSize(int64_t max_file_size_mb);
5353
int64_t GetMaxFileSize() const;
5454

55+
void SetOneFilePerTopicEnabled(bool enabled);
56+
bool GetOneFilePerTopicEnabled() const;
57+
5558
void SetDescription(const std::string& description);
5659
std::string GetDescription() const;
5760

@@ -72,6 +75,7 @@ namespace eCAL
7275
std::string meas_root_dir_;
7376
std::string meas_name_;
7477
int64_t max_file_size_mb_;
78+
bool one_file_per_topic_;
7579
std::string description_;
7680
};
7781
}

app/rec/rec_client_core/src/job/hdf5_writer_thread.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ namespace eCAL
272272

273273
hdf5_writer_->SetFileBaseName(host_name);
274274
hdf5_writer_->SetMaxSizePerFile(job_config_.GetMaxFileSize());
275+
hdf5_writer_->SetOneFilePerChannelEnabled(job_config_.GetOneFilePerTopicEnabled());
275276
}
276277
else
277278
{

app/rec/rec_client_core/src/job_config.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace eCAL
3333
JobConfig::JobConfig()
3434
: job_id_(0)
3535
, max_file_size_mb_(50)
36+
, one_file_per_topic_(false)
3637
{}
3738

3839
JobConfig::~JobConfig()
@@ -62,17 +63,20 @@ namespace eCAL
6263
job_id_ = (((int64_t)counter) << 32) | (int64_t(0xFFFFF000) & system_clock_nsecs) | (int64_t(0x00000FFF) & steady_clock_nsecs);
6364
}
6465

65-
void JobConfig::SetMeasRootDir (const std::string& meas_root_dir) { meas_root_dir_ = meas_root_dir; }
66-
std::string JobConfig::GetMeasRootDir () const { return meas_root_dir_; }
66+
void JobConfig::SetMeasRootDir (const std::string& meas_root_dir) { meas_root_dir_ = meas_root_dir; }
67+
std::string JobConfig::GetMeasRootDir () const { return meas_root_dir_; }
6768

68-
void JobConfig::SetMeasName (const std::string& meas_name) { meas_name_ = meas_name; }
69-
std::string JobConfig::GetMeasName () const { return meas_name_; }
69+
void JobConfig::SetMeasName (const std::string& meas_name) { meas_name_ = meas_name; }
70+
std::string JobConfig::GetMeasName () const { return meas_name_; }
7071

71-
void JobConfig::SetMaxFileSize (int64_t max_file_size_mb) { max_file_size_mb_ = max_file_size_mb; }
72-
int64_t JobConfig::GetMaxFileSize () const { return max_file_size_mb_; }
72+
void JobConfig::SetMaxFileSize (int64_t max_file_size_mb) { max_file_size_mb_ = max_file_size_mb; }
73+
int64_t JobConfig::GetMaxFileSize () const { return max_file_size_mb_; }
7374

74-
void JobConfig::SetDescription (const std::string& description) { description_ = description; }
75-
std::string JobConfig::GetDescription () const { return description_; }
75+
void JobConfig::SetOneFilePerTopicEnabled(bool enabled) { one_file_per_topic_ = enabled; }
76+
bool JobConfig::GetOneFilePerTopicEnabled() const { return one_file_per_topic_; }
77+
78+
void JobConfig::SetDescription (const std::string& description) { description_ = description; }
79+
std::string JobConfig::GetDescription () const { return description_; }
7680

7781
//////////////////////////////
7882
// Evaluation

app/rec/rec_gui/src/qecalrec.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,13 @@ void QEcalRec::setMaxFileSizeMib(unsigned int max_file_size_mib)
560560
emit maxFileSizeMibChangedSignal(max_file_size_mib);
561561
}
562562

563+
void QEcalRec::setOneFilePerTopicEnabled(bool enabled)
564+
{
565+
updateConfigModified(true);
566+
rec_server_->SetOneFilePerTopicEnabled(enabled);
567+
emit oneFilePerTopicEnabledChangedSignal(enabled);
568+
}
569+
563570
void QEcalRec::setDescription(const std::string& description)
564571
{
565572
updateConfigModified(true);
@@ -922,7 +929,7 @@ bool QEcalRec::loadConfigFromFile(const std::string& path, bool omit_dialogs)
922929
emit measNameChangedSignal (rec_server_->GetMeasName());
923930
emit maxFileSizeMibChangedSignal(rec_server_->GetMaxFileSizeMib());
924931
emit descriptionChangedSignal (rec_server_->GetDescription());
925-
932+
emit oneFilePerTopicEnabledChangedSignal(rec_server_->GetOneFilePerTopicEnabled());
926933

927934
emit usingBuiltInRecorderEnabledChangedSignal(rec_server_->IsUsingBuiltInRecorderEnabled());
928935

app/rec/rec_gui/src/qecalrec.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,21 +155,23 @@ public slots:
155155
// Job Settings
156156
////////////////////////////////////
157157
public slots:
158-
void setMeasRootDir (const std::string& meas_root_dir);
159-
void setMeasName (const std::string& meas_name);
160-
void setMaxFileSizeMib (unsigned int max_file_size_mib);
161-
void setDescription (const std::string& description);
158+
void setMeasRootDir (const std::string& meas_root_dir);
159+
void setMeasName (const std::string& meas_name);
160+
void setMaxFileSizeMib (unsigned int max_file_size_mib);
161+
void setOneFilePerTopicEnabled(bool enabled);
162+
void setDescription (const std::string& description);
162163

163164
std::string measRootDir() const;
164165
std::string measName() const;
165166
unsigned int maxFileSizeMib() const;
166167
std::string description() const;
167168

168169
signals:
169-
void measRootDirChangedSignal (std::string meas_root_dir);
170-
void measNameChangedSignal (std::string meas_name);
171-
void maxFileSizeMibChangedSignal(unsigned int max_file_size_mib);
172-
void descriptionChangedSignal (std::string description);
170+
void measRootDirChangedSignal (std::string meas_root_dir);
171+
void measNameChangedSignal (std::string meas_name);
172+
void maxFileSizeMibChangedSignal (unsigned int max_file_size_mib);
173+
void oneFilePerTopicEnabledChangedSignal(bool enabled);
174+
void descriptionChangedSignal (std::string description);
173175

174176
////////////////////////////////////
175177
// Server Settings

app/rec/rec_gui/src/widgets/config_widget/config_widget.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,19 @@ ConfigWidget::ConfigWidget(QWidget *parent)
3030
{
3131
ui_.setupUi(this);
3232

33-
connect(ui_.measurement_directory_lineedit, &QLineEdit::textChanged, QEcalRec::instance(), [this]() {QEcalRec::instance()->setMeasRootDir(ui_.measurement_directory_lineedit->text().toStdString()); });
34-
connect(ui_.measurement_name_lineedit, &QLineEdit::textChanged, QEcalRec::instance(), [this]() {QEcalRec::instance()->setMeasName (ui_.measurement_name_lineedit->text().toStdString()); });
35-
connect(ui_.description_textedit, &QTextEdit::textChanged, QEcalRec::instance(), [this]() {QEcalRec::instance()->setDescription(ui_.description_textedit->toPlainText().toStdString()); });
33+
connect(ui_.measurement_directory_lineedit, &QLineEdit::textChanged, QEcalRec::instance(), [this]() {QEcalRec::instance()->setMeasRootDir(ui_.measurement_directory_lineedit->text().toStdString()); });
34+
connect(ui_.measurement_name_lineedit, &QLineEdit::textChanged, QEcalRec::instance(), [this]() {QEcalRec::instance()->setMeasName (ui_.measurement_name_lineedit->text().toStdString()); });
35+
connect(ui_.description_textedit, &QTextEdit::textChanged, QEcalRec::instance(), [this]() {QEcalRec::instance()->setDescription(ui_.description_textedit->toPlainText().toStdString()); });
3636
connect(ui_.max_file_size_spinbox, static_cast<void (QSpinBox:: *)(int)>(&QSpinBox::valueChanged), QEcalRec::instance(), [](int megabytes) {QEcalRec::instance()->setMaxFileSizeMib(megabytes); });
37+
connect(ui_.one_file_per_topic_checkbox, &QCheckBox::stateChanged, QEcalRec::instance(), [this]() {QEcalRec::instance()->setOneFilePerTopicEnabled(ui_.one_file_per_topic_checkbox->isChecked()); });
3738

3839
connect(ui_.refresh_path_preview_button, &QAbstractButton::clicked, QEcalRec::instance(), [this]() { updatePathPreviewAndWarningLabel(); });
3940

4041
connect(QEcalRec::instance(), &QEcalRec::measRootDirChangedSignal, this, &ConfigWidget::measurementRootDirectoryChanged);
4142
connect(QEcalRec::instance(), &QEcalRec::measNameChangedSignal, this, &ConfigWidget::measurementNameChanged);
4243
connect(QEcalRec::instance(), &QEcalRec::maxFileSizeMibChangedSignal, this, &ConfigWidget::maxFileSizeChanged);
4344
connect(QEcalRec::instance(), &QEcalRec::descriptionChangedSignal, this, &ConfigWidget::descriptionChanged);
45+
connect(QEcalRec::instance(), &QEcalRec::oneFilePerTopicEnabledChangedSignal, this, &ConfigWidget::oneFilePerTopicEnabledChanged);
4446

4547
measurementRootDirectoryChanged (QEcalRec::instance()->measRootDir());
4648
measurementNameChanged (QEcalRec::instance()->measName());
@@ -63,6 +65,15 @@ void ConfigWidget::maxFileSizeChanged(unsigned int megabytes)
6365
}
6466
}
6567

68+
void ConfigWidget::oneFilePerTopicEnabledChanged(bool enabled)
69+
{
70+
if (enabled != ui_.one_file_per_topic_checkbox->isChecked())
71+
{
72+
ui_.one_file_per_topic_checkbox->blockSignals(true);
73+
ui_.one_file_per_topic_checkbox->setChecked(enabled);
74+
ui_.one_file_per_topic_checkbox->blockSignals(false);
75+
}
76+
}
6677
void ConfigWidget::measurementRootDirectoryChanged(const std::string& root_dir)
6778
{
6879
if (root_dir.c_str() != ui_.measurement_directory_lineedit->text())

0 commit comments

Comments
 (0)