diff --git a/reader/JFJochHttpReader.cpp b/reader/JFJochHttpReader.cpp index 6a8117fb..5ae5c9b6 100644 --- a/reader/JFJochHttpReader.cpp +++ b/reader/JFJochHttpReader.cpp @@ -8,6 +8,7 @@ #include "../frame_serialize/CBORStream2Deserializer.h" #include "../broker/gen/model/Image_buffer_status.h" #include "../broker/gen/model/Plots.h" +#include "../broker/gen/model/Broker_status.h" #include "../image_analysis/bragg_integration/CalcISigma.h" void JFJochHttpReader::Close() { @@ -43,6 +44,53 @@ ImageBufferStatus JFJochHttpReader::GetImageBufferStatus() const { } } +BrokerStatus JFJochHttpReader::GetBrokerStatus() const { + httplib::Client cli_cmd(addr); + + auto res = cli_cmd.Get("/status"); + if (!res || res->status != httplib::StatusCode::OK_200) + throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, + "Could not get image buffer status"); + + try { + org::openapitools::server::model::Broker_status input = nlohmann::json::parse(res->body); + BrokerStatus ret{}; + ret.broker_version = input.getBrokerVersion(); + ret.gpu_count = input.getGpuCount(); + if (input.progressIsSet()) + ret.progress = input.getProgress(); + + if (input.getState() == "Inactive") + ret.state = JFJochState::Inactive; + else if (input.getState() == "Idle") + ret.state = JFJochState::Idle; + else if (input.getState() == "Measuring") + ret.state = JFJochState::Measuring; + else if (input.getState() == "Error") + ret.state = JFJochState::Error; + else if (input.getState() == "Busy") + ret.state = JFJochState::Busy; + else if (input.getState() == "Pedestal") + ret.state = JFJochState::Calibration; + + if (input.getMessageSeverity() == "info") + ret.message_severity = BrokerStatus::MessageSeverity::Info; + else if (input.getMessageSeverity() == "success") + ret.message_severity = BrokerStatus::MessageSeverity::Success; + else if (input.getMessageSeverity() == "warning") + ret.message_severity = BrokerStatus::MessageSeverity::Warning; + else if (input.getMessageSeverity() == "error") + ret.message_severity = BrokerStatus::MessageSeverity::Error; + if (input.brokerVersionIsSet()) + ret.broker_version = input.getBrokerVersion(); + + return ret; + } catch (std::exception &e) { + throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, + "Could not parse image buffer status"); + } +} + uint64_t JFJochHttpReader::GetNumberOfImages() const { std::unique_lock ul(http_mutex); diff --git a/reader/JFJochHttpReader.h b/reader/JFJochHttpReader.h index fc33c3be..8a322cd2 100644 --- a/reader/JFJochHttpReader.h +++ b/reader/JFJochHttpReader.h @@ -5,6 +5,7 @@ #define JFJOCH_JFJOCHHTTPREADER_H #include "JFJochReader.h" +#include "../common/BrokerStatus.h" #include "../common/ImageBuffer.h" class JFJochHttpReader : public JFJochReader { @@ -31,6 +32,8 @@ public: void Close() override; void UploadUserMask(const std::vector& mask); + + BrokerStatus GetBrokerStatus() const; };