v1.0.0_rc.11
This commit is contained in:
@@ -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
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user