diff --git a/acquisition_device/AcquisitionDevice.cpp b/acquisition_device/AcquisitionDevice.cpp index 55fb656d3..186ef82d5 100644 --- a/acquisition_device/AcquisitionDevice.cpp +++ b/acquisition_device/AcquisitionDevice.cpp @@ -233,4 +233,12 @@ void AcquisitionDevice::SetIPv4Address(uint32_t ipv4_addr_network_order) { void AcquisitionDevice::SetMACAddress(uint64_t mac_addr_network_order) { mac_addr = mac_addr_network_order; +} + +AcquisitionDeviceNetConfig AcquisitionDevice::GetNetConfig() const { + return { + .mac_addr = GetMACAddress(), + .ipv4_addr = GetIPv4Address(), + .udp_port = GetUDPPort() + }; } \ No newline at end of file diff --git a/acquisition_device/AcquisitionDevice.h b/acquisition_device/AcquisitionDevice.h index a6f8aca1a..14e6bc546 100644 --- a/acquisition_device/AcquisitionDevice.h +++ b/acquisition_device/AcquisitionDevice.h @@ -55,6 +55,12 @@ struct AcquisitionDeviceStatistics { std::vector packets_received_per_module; }; +struct AcquisitionDeviceNetConfig { + std::string mac_addr; + std::string ipv4_addr; + uint64_t udp_port; +}; + class AcquisitionDevice { std::vector buffer_err; @@ -133,8 +139,7 @@ public: virtual std::vector GetInternalGeneratorFrame() const { return {}; } - - + AcquisitionDeviceNetConfig GetNetConfig() const; }; diff --git a/acquisition_device/AcquisitionDeviceGroup.cpp b/acquisition_device/AcquisitionDeviceGroup.cpp index db27cb4d3..c9b1f0561 100644 --- a/acquisition_device/AcquisitionDeviceGroup.cpp +++ b/acquisition_device/AcquisitionDeviceGroup.cpp @@ -32,3 +32,10 @@ void AcquisitionDeviceGroup::AddHLSDevice(int64_t buffer_size_modules) { void AcquisitionDeviceGroup::AddMockDevice(int64_t buffer_size_modules) { aq_devices.emplace_back(std::make_unique(aq_devices.size(), buffer_size_modules)); } + +std::vector AcquisitionDeviceGroup::GetNetworkConfig() { + std::vector ret; + for (const auto &i: aq_devices) + ret.push_back(i->GetNetConfig()); + return ret; +} \ No newline at end of file diff --git a/acquisition_device/AcquisitionDeviceGroup.h b/acquisition_device/AcquisitionDeviceGroup.h index e93ca2516..5040c0c77 100644 --- a/acquisition_device/AcquisitionDeviceGroup.h +++ b/acquisition_device/AcquisitionDeviceGroup.h @@ -16,6 +16,7 @@ public: void AddPCIeDevice(const std::string &device_name); void AddHLSDevice(int64_t buffer_size_modules); void AddMockDevice(int64_t buffer_size_modules); + std::vector GetNetworkConfig(); }; #endif //JUNGFRAUJOCH_ACQUISITIONDEVICEGROUP_H diff --git a/receiver/JFJochReceiver.cpp b/receiver/JFJochReceiver.cpp index 044c35eb1..677e51ad0 100644 --- a/receiver/JFJochReceiver.cpp +++ b/receiver/JFJochReceiver.cpp @@ -721,3 +721,11 @@ void JFJochReceiver::UpdateMaxDelay(int64_t delay) { float JFJochReceiver::GetAvailableSendBuffers() const { return static_cast(send_buffer_avail.Size()) / static_cast(send_buffer_count); } + +JFJochReceiverStatus JFJochReceiver::GetStatus() const { + return { + .progress = GetProgress(), + .indexing_rate = GetIndexingRate(), + .send_buffers_avail = GetAvailableSendBuffers() + }; +} diff --git a/receiver/JFJochReceiver.h b/receiver/JFJochReceiver.h index 455adebc8..3d8e24066 100644 --- a/receiver/JFJochReceiver.h +++ b/receiver/JFJochReceiver.h @@ -31,6 +31,12 @@ #include "../common/ADUHistogram.h" #include "../common/Plot.h" +struct JFJochReceiverStatus { + float progress; + float indexing_rate; + float send_buffers_avail; +}; + struct JFJochReceiverOutput { std::vector pedestal_result; std::vector received_packets; @@ -149,6 +155,9 @@ public: void Cancel(); float GetProgress() const; float GetIndexingRate() const; + + JFJochReceiverStatus GetStatus() const; + void SetDataProcessingSettings(const DataProcessingSettings &data_processing_settings); float GetAvailableSendBuffers() const; diff --git a/receiver/JFJochReceiverService.cpp b/receiver/JFJochReceiverService.cpp index 3c2ca07a2..29f01ac2c 100644 --- a/receiver/JFJochReceiverService.cpp +++ b/receiver/JFJochReceiverService.cpp @@ -171,25 +171,26 @@ grpc::Status JFJochReceiverService::Abort(grpc::ServerContext *context, const JF } } - -grpc::Status JFJochReceiverService::GetStatus(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, - JFJochProtoBuf::ReceiverStatus *response) { +JFJochReceiverStatus JFJochReceiverService::GetStatus() { // Need to hold mutex, as receiver might not exist here, if state is idle std::unique_lock ul(state_mutex); - response->set_progress(-1); - response->set_send_buffers_avail(-1); - response->set_indexing_rate(-1); - if (state == ReceiverState::Running) { - response->set_progress(receiver->GetProgress()); - response->set_send_buffers_avail(receiver->GetAvailableSendBuffers()); - } - if (receiver) { - double indexing_rate = receiver->GetIndexingRate(); - if (!std::isnan(indexing_rate)) - response->set_indexing_rate(indexing_rate); - } + if (state == ReceiverState::Running) + return receiver->GetStatus(); + else + return { + .progress = -1, + .indexing_rate = -1, + .send_buffers_avail = -1 + }; +} +grpc::Status JFJochReceiverService::GetStatus(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, + JFJochProtoBuf::ReceiverStatus *response) { + auto tmp = GetStatus(); + response->set_send_buffers_avail(tmp.send_buffers_avail); + response->set_indexing_rate(tmp.indexing_rate); + response->set_progress(tmp.progress); return grpc::Status::OK; } @@ -230,11 +231,13 @@ grpc::Status JFJochReceiverService::SetDataProcessingSettings(grpc::ServerContex grpc::Status JFJochReceiverService::GetNetworkConfig(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::ReceiverNetworkConfig *response) { - for (int i = 0; i < aq_devices.size(); i++) { + auto v = GetNetworkConfig(); + + for (const auto &i: v) { auto dev_net_cfg = response->add_device(); - dev_net_cfg->set_mac_addr(aq_devices[i].GetMACAddress()); - dev_net_cfg->set_ipv4_addr(aq_devices[i].GetIPv4Address()); - dev_net_cfg->set_udp_port(aq_devices[i].GetUDPPort()); + dev_net_cfg->set_mac_addr(i.mac_addr); + dev_net_cfg->set_ipv4_addr(i.ipv4_addr); + dev_net_cfg->set_udp_port(i.udp_port); } return grpc::Status::OK; } @@ -336,3 +339,6 @@ RadialIntegrationProfiles JFJochReceiverService::GetRadialIntegrationProfiles() return {}; } +std::vector JFJochReceiverService::GetNetworkConfig() { + return aq_devices.GetNetworkConfig(); +} diff --git a/receiver/JFJochReceiverService.h b/receiver/JFJochReceiverService.h index 23b1063c0..df2d43bcc 100644 --- a/receiver/JFJochReceiverService.h +++ b/receiver/JFJochReceiverService.h @@ -47,6 +47,8 @@ public: void SetDataProcessingSettings(const DataProcessingSettings& settings); Plot GetDataProcessingPlot(const PlotRequest& request); RadialIntegrationProfiles GetRadialIntegrationProfiles(); + JFJochReceiverStatus GetStatus(); + std::vector GetNetworkConfig(); grpc::Status Start(grpc::ServerContext* context, const JFJochProtoBuf::ReceiverInput* request, JFJochProtoBuf::Empty* response) override;