24 : request_(std::
move(request))
25 , handler_(std::
move(handler))
26 , on_complete_(std::
move(on_complete))
27 , on_error_(std::
move(on_error)) {
34 std::chrono::duration_cast<std::chrono::nanoseconds>(
35 std::chrono::steady_clock::now().time_since_epoch()
56 uint16_t cmd =
static_cast<uint16_t
>(request_.command_type);
60 on_error_(request_.session_id,
"No service handler configured");
64 auto encode_job = std::make_unique<response_encode_job>(std::move(result));
65 encode_job->get_context() = context_;
68 return coordinator.submit_to_stage(
75 auto result = handler_(request_);
77 if (!result.is_ok()) {
79 auto err = result.error();
80 on_error_(request_.session_id, err.message);
85 error_response.
session_id = request_.session_id;
86 error_response.
message_id = request_.message_id;
93 uint16_t cmd =
static_cast<uint16_t
>(request_.command_type);
96 auto encode_job = std::make_unique<response_encode_job>(std::move(error_response));
97 encode_job->get_context() = context_;
100 return coordinator.submit_to_stage(
102 std::move(encode_job)
106 auto service_result_value = result.value();
110 on_complete_(service_result_value);
114 auto encode_job = std::make_unique<response_encode_job>(std::move(service_result_value));
115 encode_job->get_context() = context_;
118 return coordinator.submit_to_stage(
120 std::move(encode_job)
133 return "storage_query_exec_job[session=" +
Coordinates the 6-stage DICOM I/O pipeline.
storage_query_exec_job(dimse_request request, service_handler handler, completion_callback on_complete=nullptr, error_callback on_error=nullptr)
Construct an execution job.
auto get_name() const -> std::string override
Get the job name.
static auto get_category_for_command(dimse_command_type type) -> job_category
Determine job category from command type.
std::function< Result< service_result >(const dimse_request &)> service_handler
Service handler function type.
auto get_request() const noexcept -> const dimse_request &
Get the DIMSE request.
auto get_context() const noexcept -> const job_context &override
Get the job context.
std::function< void(const service_result &result)> completion_callback
Callback type for execution completion.
auto execute(pipeline_coordinator &coordinator) -> VoidResult override
Execute the storage/query operation.
std::function< void(uint64_t session_id, const std::string &error)> error_callback
Callback type for execution errors.
job_category
Categories for pipeline jobs used in metrics and monitoring.
@ move
C-MOVE move request/response.
@ other
Unknown or other category.
@ store
C-STORE storage request/response.
@ get
C-GET retrieve request/response.
@ echo
C-ECHO verification request/response.
@ find
C-FIND query request/response.
@ failure_unable_to_process
@ failure_refused_sop_class_not_supported
dimse_command_type
DICOM DIMSE command types.
@ storage_query_exec
Stage 4: Execute storage/query operations (blocking allowed)
@ response_encode
Stage 5: Encode response into PDU bytes.
kcenon::pacs::VoidResult VoidResult
VoidResult type alias for operations without return value.
Response encoding job for Stage 5 of the pipeline.
Storage and query execution job for Stage 4 of the pipeline.
Parsed DIMSE request for service execution.
uint64_t session_id
Session ID.
dimse_command_type command_type
The DIMSE command type.
uint16_t message_id
Message ID for correlation.
Context information attached to pipeline jobs for tracking.
pipeline_stage stage
Current pipeline stage.
job_category category
Job category for metrics.
uint16_t message_id
Message ID from DIMSE command (if applicable)
uint64_t enqueue_time_ns
Timestamp when job entered the pipeline (nanoseconds since epoch)
uint64_t session_id
Session/association identifier.
Result from service execution.
uint8_t presentation_context_id
Presentation context ID.
uint16_t message_id
Message ID for correlation.
dimse_status status
DIMSE status code.
std::string error_comment
Error comment (if any)
uint64_t session_id
Session ID for routing response.
dimse_command_type response_type
Response command type.
std::string sop_class_uid
SOP Class UID (echoed back)
std::string sop_instance_uid
SOP Instance UID (echoed back)