From 92dbc3509849a8bf6af54121fedfd9483ebfe42b Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Thu, 5 Mar 2026 16:12:31 +0100 Subject: [PATCH] OpenAPI: Export images written and images with write error --- broker/OpenAPIConvert.cpp | 4 ++ broker/gen/model/Image_pusher_status.cpp | 60 ++++++++++++++++++- broker/gen/model/Image_pusher_status.h | 18 ++++++ broker/jfjoch_api.yaml | 14 +++++ broker/redoc-static.html | 6 +- docs/python_client/docs/ImagePusherStatus.md | 2 + .../src/openapi/models/image_pusher_status.ts | 14 +++++ image_pusher/ImagePusher.h | 11 +++- image_pusher/TCPStreamPusher.cpp | 4 ++ image_pusher/TCPStreamPusher.h | 1 + 10 files changed, 129 insertions(+), 5 deletions(-) diff --git a/broker/OpenAPIConvert.cpp b/broker/OpenAPIConvert.cpp index 7b8643d0..108cc5eb 100644 --- a/broker/OpenAPIConvert.cpp +++ b/broker/OpenAPIConvert.cpp @@ -1114,5 +1114,9 @@ org::openapitools::server::model::Image_pusher_status Convert(const ImagePusherS break; } ret.setPusherType(tmp); + if (input.images_written) + ret.setImagesWritten(input.images_written.value()); + if (input.images_write_error) + ret.setImagesWriteError(input.images_write_error.value()); return ret; } \ No newline at end of file diff --git a/broker/gen/model/Image_pusher_status.cpp b/broker/gen/model/Image_pusher_status.cpp index a7a83fd5..5a15cd18 100644 --- a/broker/gen/model/Image_pusher_status.cpp +++ b/broker/gen/model/Image_pusher_status.cpp @@ -22,6 +22,10 @@ namespace org::openapitools::server::model Image_pusher_status::Image_pusher_status() { m_Connected_writers = 0L; + m_Images_written = 0L; + m_Images_writtenIsSet = false; + m_Images_write_error = 0L; + m_Images_write_errorIsSet = false; } @@ -65,7 +69,7 @@ bool Image_pusher_status::validate(std::stringstream& msg, const std::string& pa } } - + return success; } @@ -81,8 +85,14 @@ bool Image_pusher_status::operator==(const Image_pusher_status& rhs) const && (getConnectedWriters() == rhs.getConnectedWriters()) + && + ((!imagesWrittenIsSet() && !rhs.imagesWrittenIsSet()) || (imagesWrittenIsSet() && rhs.imagesWrittenIsSet() && getImagesWritten() == rhs.getImagesWritten())) && + + + ((!imagesWriteErrorIsSet() && !rhs.imagesWriteErrorIsSet()) || (imagesWriteErrorIsSet() && rhs.imagesWriteErrorIsSet() && getImagesWriteError() == rhs.getImagesWriteError())) + ; } @@ -97,6 +107,10 @@ void to_json(nlohmann::json& j, const Image_pusher_status& o) j["pusher_type"] = o.m_Pusher_type; j["addr"] = o.m_Addr; j["connected_writers"] = o.m_Connected_writers; + if(o.imagesWrittenIsSet()) + j["images_written"] = o.m_Images_written; + if(o.imagesWriteErrorIsSet()) + j["images_write_error"] = o.m_Images_write_error; } @@ -105,6 +119,16 @@ void from_json(const nlohmann::json& j, Image_pusher_status& o) j.at("pusher_type").get_to(o.m_Pusher_type); j.at("addr").get_to(o.m_Addr); j.at("connected_writers").get_to(o.m_Connected_writers); + if(j.find("images_written") != j.end()) + { + j.at("images_written").get_to(o.m_Images_written); + o.m_Images_writtenIsSet = true; + } + if(j.find("images_write_error") != j.end()) + { + j.at("images_write_error").get_to(o.m_Images_write_error); + o.m_Images_write_errorIsSet = true; + } } @@ -132,6 +156,40 @@ void Image_pusher_status::setConnectedWriters(int64_t const value) { m_Connected_writers = value; } +int64_t Image_pusher_status::getImagesWritten() const +{ + return m_Images_written; +} +void Image_pusher_status::setImagesWritten(int64_t const value) +{ + m_Images_written = value; + m_Images_writtenIsSet = true; +} +bool Image_pusher_status::imagesWrittenIsSet() const +{ + return m_Images_writtenIsSet; +} +void Image_pusher_status::unsetImages_written() +{ + m_Images_writtenIsSet = false; +} +int64_t Image_pusher_status::getImagesWriteError() const +{ + return m_Images_write_error; +} +void Image_pusher_status::setImagesWriteError(int64_t const value) +{ + m_Images_write_error = value; + m_Images_write_errorIsSet = true; +} +bool Image_pusher_status::imagesWriteErrorIsSet() const +{ + return m_Images_write_errorIsSet; +} +void Image_pusher_status::unsetImages_write_error() +{ + m_Images_write_errorIsSet = false; +} } // namespace org::openapitools::server::model diff --git a/broker/gen/model/Image_pusher_status.h b/broker/gen/model/Image_pusher_status.h index c9347ff6..cf859961 100644 --- a/broker/gen/model/Image_pusher_status.h +++ b/broker/gen/model/Image_pusher_status.h @@ -75,6 +75,20 @@ public: /// int64_t getConnectedWriters() const; void setConnectedWriters(int64_t const value); + /// + /// Number of images written to the image socket. This number is updated live during operation for TCP/IP image socket and direct HDF5 writer. It is updated at the end of experiment for ZeroMQ image socket. + /// + int64_t getImagesWritten() const; + void setImagesWritten(int64_t const value); + bool imagesWrittenIsSet() const; + void unsetImages_written(); + /// + /// Number of images that could not be written to the image socket. This number is updated live during operation for TCP/IP image socket. No other socket use it. + /// + int64_t getImagesWriteError() const; + void setImagesWriteError(int64_t const value); + bool imagesWriteErrorIsSet() const; + void unsetImages_write_error(); friend void to_json(nlohmann::json& j, const Image_pusher_status& o); friend void from_json(const nlohmann::json& j, Image_pusher_status& o); @@ -85,6 +99,10 @@ protected: int64_t m_Connected_writers; + int64_t m_Images_written; + bool m_Images_writtenIsSet; + int64_t m_Images_write_error; + bool m_Images_write_errorIsSet; }; diff --git a/broker/jfjoch_api.yaml b/broker/jfjoch_api.yaml index c8e2149f..f644d37e 100644 --- a/broker/jfjoch_api.yaml +++ b/broker/jfjoch_api.yaml @@ -1372,6 +1372,20 @@ components: Number of connected writers For ZeroMQ image socket: number is constant For TCP/IP image socket: number is updated live during operation + images_written: + type: integer + format: int64 + description: | + Number of images written to the image socket. + This number is updated live during operation for TCP/IP image socket and direct HDF5 writer. + It is updated at the end of experiment for ZeroMQ image socket. + images_write_error: + type: integer + format: int64 + description: | + Number of images that could not be written to the image socket. + This number is updated live during operation for TCP/IP image socket. + No other socket use it. plot: type: object required: diff --git a/broker/redoc-static.html b/broker/redoc-static.html index 239ba0b4..fcd5f82b 100644 --- a/broker/redoc-static.html +++ b/broker/redoc-static.html @@ -776,7 +776,7 @@ This can only be done when detector is Idle, Error or
http://localhost:5232/xfel/event_code

Response samples

Content type
application/json
[
  • 0
]

Get status of image pusher

Responses

Response samples

Content type
application/json
{
  • "pusher_type": "ZeroMQ",
  • "addr": [
    ],
  • "connected_writers": 0
}

Get detector status

Status of the JUNGFRAU detector

+
http://localhost:5232/image_pusher/status

Response samples

Content type
application/json
{
  • "pusher_type": "ZeroMQ",
  • "addr": [
    ],
  • "connected_writers": 0,
  • "images_written": 0,
  • "images_write_error": 0
}

Get detector status

Status of the JUNGFRAU detector

Responses

Request samples

Content type
application/json
{
  • "box": {
    },
  • "circle": {
    },
  • "azim": {
    }
}

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get general statistics

query Parameters
compression
boolean
Default: false

Enable DEFLATE compression of output data.

Responses

Response samples

Content type
application/json
{
  • "detector": {
    },
  • "detector_list": {
    },
  • "detector_settings": {
    },
  • "image_format_settings": {
    },
  • "instrument_metadata": {
    },
  • "file_writer_settings": {
    },
  • "data_processing_settings": {
    },
  • "measurement": {
    },
  • "broker": {
    },
  • "fpga": [
    ],
  • "calibration": [
    ],
  • "zeromq_preview": {
    },
  • "zeromq_metadata": {
    },
  • "dark_mask": {
    },
  • "pixel_mask": {
    },
  • "roi": {
    },
  • "az_int": {
    },
  • "buffer": {
    },
  • "indexing": {
    },
  • "image_pusher": {
    }
}

Get data collection statistics

Results of the last data collection

+
http://localhost:5232/statistics

Response samples

Content type
application/json
{
  • "detector": {
    },
  • "detector_list": {
    },
  • "detector_settings": {
    },
  • "image_format_settings": {
    },
  • "instrument_metadata": {
    },
  • "file_writer_settings": {
    },
  • "data_processing_settings": {
    },
  • "measurement": {
    },
  • "broker": {
    },
  • "fpga": [
    ],
  • "calibration": [
    ],
  • "zeromq_preview": {
    },
  • "zeromq_metadata": {
    },
  • "dark_mask": {
    },
  • "pixel_mask": {
    },
  • "roi": {
    },
  • "az_int": {
    },
  • "buffer": {
    },
  • "indexing": {
    },
  • "image_pusher": {
    }
}

Get data collection statistics

Results of the last data collection

Responses