All checks were successful
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 7m48s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 8m22s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 6m47s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 7m15s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 7m35s
Build Packages / Generate python client (push) Successful in 29s
Build Packages / Build documentation (push) Successful in 47s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (rocky8) (push) Successful in 7m47s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 7m47s
Build Packages / build:rpm (rocky9) (push) Successful in 8m40s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 7m4s
Build Packages / Unit tests (push) Successful in 1h8m20s
This is an UNSTABLE release. * jfjoch_broker: Improve performance of binary plot export Reviewed-on: #27 Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch> Co-committed-by: Filip Leonarski <filip.leonarski@psi.ch>
207 lines
10 KiB
C++
207 lines
10 KiB
C++
// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
// Using OpenAPI licensed with Apache License 2.0
|
|
|
|
#ifndef JUNGFRAUJOCH_JFJOCHBROKERHTTP_H
|
|
#define JUNGFRAUJOCH_JFJOCHBROKERHTTP_H
|
|
|
|
#include <pistache/endpoint.h>
|
|
#include <pistache/router.h>
|
|
#include <pistache/client.h>
|
|
#include <pistache/http.h>
|
|
|
|
#include "../common/Logger.h"
|
|
#include "JFJochStateMachine.h"
|
|
#include "gen/api/DefaultApi.h"
|
|
|
|
|
|
class JFJochBrokerHttp : public org::openapitools::server::api::DefaultApi {
|
|
Logger logger{"JFJochBroker"};
|
|
JFJochServices services {logger};
|
|
|
|
void config_image_format_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_image_format_put(const org::openapitools::server::model::Image_format_settings &imageFormatSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void fpga_status_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
JFJochStateMachine state_machine;
|
|
std::string frontend_directory;
|
|
|
|
void config_detector_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_detector_put(const org::openapitools::server::model::Detector_settings &detectorSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_azim_int_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_azim_int_put(const org::openapitools::server::model::Azim_int_settings &radIntSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_select_detector_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_select_detector_put(const org::openapitools::server::model::Detector_selection &detectorSelection,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void detector_status_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_spot_finding_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_spot_finding_put(const org::openapitools::server::model::Spot_finding_settings &spotFindingSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void statistics_calibration_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void statistics_data_collection_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void cancel_post(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void deactivate_post(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void initialize_post(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void start_post(const org::openapitools::server::model::Dataset_settings &datasetSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void status_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void wait_till_done_post(const std::optional<int32_t> &timeoutMs, Pistache::Http::ResponseWriter &response) override;
|
|
void trigger_post(Pistache::Http::ResponseWriter &response) override;
|
|
void pedestal_post(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void preview_pedestal_tiff_get(const std::optional<int32_t> &gainLevel,
|
|
const std::optional<int32_t> &sc,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_roi_get(Pistache::Http::ResponseWriter &response) override;
|
|
void config_roi_put(const org::openapitools::server::model::Roi_definitions &roiDefinitions,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_internal_generator_image_put(const Pistache::Rest::Request &request,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void xfel_event_code_get(Pistache::Http::ResponseWriter &response) override;
|
|
void xfel_pulse_id_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_mask_tiff_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_user_mask_tiff_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_user_mask_tiff_put(const Pistache::Rest::Request &request,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_internal_generator_image_tiff_put(const Pistache::Rest::Request &request,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_instrument_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_instrument_put(const org::openapitools::server::model::Instrument_metadata &instrumentMetadata,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void GetStaticFile(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
std::pair<Pistache::Http::Code, std::string> handleOperationException(const std::exception &ex) const noexcept override;
|
|
|
|
template <class T>
|
|
void ProcessOutput(const T& output, Pistache::Http::ResponseWriter &response, bool compression = false) {
|
|
std::stringstream s;
|
|
if(!output.validate(s)) {
|
|
logger.Error(s.str());
|
|
response.send(Pistache::Http::Code::Internal_Server_Error, s.str(), MIME(Text, Plain));
|
|
} else {
|
|
nlohmann::json j = output;
|
|
if (compression)
|
|
response.setCompression(Pistache::Http::Header::Encoding::Deflate);
|
|
response.send(Pistache::Http::Code::Ok, j.dump(), MIME(Application, Json));
|
|
}
|
|
}
|
|
|
|
void version_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_image_format_conversion_post(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_image_format_raw_post(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void statistics_get(const std::optional<bool> &compression, Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_zeromq_preview_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void
|
|
config_zeromq_preview_put(const org::openapitools::server::model::Zeromq_preview_settings &zeromqPreviewSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_zeromq_metadata_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_zeromq_metadata_put(
|
|
const org::openapitools::server::model::Zeromq_metadata_settings &zeromqMetadataSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_mask_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_user_mask_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_user_mask_put(const Pistache::Rest::Request &request,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void image_buffer_clear_post(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void image_buffer_image_cbor_get(const std::optional<int64_t> &id,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void image_buffer_image_jpeg_get(const std::optional<int64_t> &id,
|
|
const std::optional<bool> &showUserMask,
|
|
const std::optional<bool> &showRoi,
|
|
const std::optional<bool> &showSpots,
|
|
const std::optional<bool> &showBeamCenter,
|
|
const std::optional<float> &saturation,
|
|
const std::optional<int64_t> &jpegQuality,
|
|
const std::optional<float> &showResRing,
|
|
const std::optional<std::string> &color,
|
|
const std::optional<bool> &showResEst,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void image_buffer_image_tiff_get(const std::optional<int64_t> &id, Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void image_buffer_start_cbor_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void image_buffer_status_get(Pistache::Http::ResponseWriter &response) override;
|
|
void preview_plot_get(const std::optional<std::string> &type, const std::optional<int32_t> &binning,
|
|
const std::optional<bool> &compression, const std::optional<float> &fill,
|
|
const std::optional<bool> &experimentalCoord, const std::optional<std::string> &azintUnit,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void preview_plot_bin_get(const std::optional<std::string> &type, const std::optional<std::string> &roi,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_indexing_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_indexing_put(const org::openapitools::server::model::Indexing_settings &indexingSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void result_scan_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_dark_mask_get(Pistache::Http::ResponseWriter &response) override;
|
|
void config_dark_mask_put(const org::openapitools::server::model::Dark_mask_settings &darkMaskSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
public:
|
|
JFJochBrokerHttp(const DiffractionExperiment& experiment,
|
|
const SpotFindingSettings &spot_finding_settings,
|
|
std::shared_ptr<Pistache::Rest::Router> &rtr);
|
|
|
|
void AddDetectorSetup(const DetectorSetup &setup);
|
|
JFJochServices& Services();
|
|
|
|
JFJochBrokerHttp& FrontendDirectory(const std::string &directory);
|
|
|
|
~JFJochBrokerHttp() override = default;
|
|
|
|
private:
|
|
void config_file_writer_get(Pistache::Http::ResponseWriter &response) override;
|
|
|
|
void config_file_writer_put(const org::openapitools::server::model::File_writer_settings &fileWriterSettings,
|
|
Pistache::Http::ResponseWriter &response) override;
|
|
};
|
|
|
|
|
|
#endif //JUNGFRAUJOCH_JFJOCHBROKERHTTP_H
|