v1.0.0_rc.11

This commit is contained in:
2024-06-30 17:48:35 +02:00
parent 53b5a304d3
commit 3035d9e144
93 changed files with 586 additions and 213 deletions

View File

@@ -12,7 +12,9 @@ StreamWriter::StreamWriter(Logger &in_logger,
const std::string &in_file_done_address)
: image_puller(repub_address),
logger(in_logger),
file_done_address(in_file_done_address) {
file_done_address(in_file_done_address),
socket_number(0),
run_number(0) {
image_puller.Connect(zmq_addr);
logger.Info("Connected via ZMQ to {}", zmq_addr);
}
@@ -53,6 +55,12 @@ void StreamWriter::CollectImages(std::vector<HDF5DataFileStatistics> &v) {
if (!image_puller_output.cbor->start_message->write_master_file || image_puller_output.cbor->start_message->write_master_file.value())
master_file = std::make_unique<NXmx>(*image_puller_output.cbor->start_message);
socket_number = 0;
if (image_puller_output.cbor->start_message->socket_number)
socket_number = image_puller_output.cbor->start_message->socket_number.value();
std::string detector_update_zmq_addr = image_puller_output.cbor->start_message->writer_notification_zmq_addr;
bool first_image = true;
run = WaitForImage();
while (run && image_puller_output.cbor->calibration) {
@@ -77,6 +85,8 @@ void StreamWriter::CollectImages(std::vector<HDF5DataFileStatistics> &v) {
run = WaitForImage();
}
bool clean_end = false;
if (run && image_puller_output.cbor->end_message) {
end_time = std::chrono::system_clock::now();
@@ -85,11 +95,35 @@ void StreamWriter::CollectImages(std::vector<HDF5DataFileStatistics> &v) {
if (master_file)
master_file->Finalize(*image_puller_output.cbor->end_message);
master_file.reset();
state = StreamWriterState::Idle;
clean_end = true;
}
master_file.reset();
v = writer.Finalize();
state = clean_end ? StreamWriterState::Idle : StreamWriterState::Error;
if (!detector_update_zmq_addr.empty()) {
nlohmann::json j;
auto stats = GetStatistics();
j["socket_number"] = socket_number;
j["ok"] = clean_end ? true : false;
j["processed_images"] = processed_images.load();
j["socket_number"] = stats.socket_number;
j["run_number"] = stats.run_number;
j["run_name"] = stats.run_name;
j["performance_MBs"] = stats.performance_MBs;
try {
ZMQSocket s(ZMQSocketType::Push);
s.SendTimeout(std::chrono::seconds(1));
s.Connect(detector_update_zmq_addr);
s.Send(j.dump());
} catch (const JFJochException &e) {
logger.ErrorException(e);
}
}
}
void StreamWriter::Cancel() {
@@ -126,7 +160,6 @@ bool StreamWriter::WaitForImage() {
StreamWriterStatistics StreamWriter::GetStatistics() const {
float perf_MBs = 0.0f, perf_Hz = 0.0f;
if ((state != StreamWriterState::Started) && (processed_images > 0)) {
int64_t time_us;
if (state == StreamWriterState::Idle)
@@ -146,6 +179,7 @@ StreamWriterStatistics StreamWriter::GetStatistics() const {
.file_prefix = file_prefix,
.run_name = run_name,
.run_number = run_number,
.socket_number = socket_number,
.state = state
};
}