PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
job_tracker Class Reference

Tracks active inference jobs. More...

Collaboration diagram for job_tracker:
Collaboration graph

Public Member Functions

void add_job (const std::string &job_id, const inference_request &request)
 
void update_status (const std::string &job_id, const inference_status &status)
 
void remove_job (const std::string &job_id)
 
std::optional< inference_status > get_status (const std::string &job_id) const
 
std::vector< inference_status > get_active_jobs () const
 

Private Attributes

std::shared_mutex mutex_
 
std::unordered_map< std::string, inference_status > jobs_
 
std::unordered_map< std::string, inference_request > request_map_
 

Detailed Description

Tracks active inference jobs.

Definition at line 809 of file ai_service_connector.cpp.

Member Function Documentation

◆ add_job()

void job_tracker::add_job ( const std::string & job_id,
const inference_request & request )
inline

Definition at line 811 of file ai_service_connector.cpp.

811 {
812 std::lock_guard lock(mutex_);
813
814 inference_status status;
815 status.job_id = job_id;
816 status.status = inference_status_code::pending;
817 status.progress = 0;
818 status.message = "Job submitted";
819 status.created_at = std::chrono::system_clock::now();
820
821 jobs_[job_id] = status;
822 request_map_[job_id] = request;
823
825 metrics::active_jobs, static_cast<double>(jobs_.size()));
826 }
std::shared_mutex mutex_
std::unordered_map< std::string, inference_request > request_map_
std::unordered_map< std::string, inference_status > jobs_
static void set_gauge(std::string_view name, double value)
Set a gauge metric value.
constexpr dicom_tag status
Status.

References kcenon::pacs::integration::monitoring_adapter::set_gauge().

Here is the call graph for this function:

◆ get_active_jobs()

std::vector< inference_status > job_tracker::get_active_jobs ( ) const
inlinenodiscard

Definition at line 877 of file ai_service_connector.cpp.

877 {
878 std::shared_lock lock(mutex_);
879 std::vector<inference_status> result;
880 for (const auto& [id, status] : jobs_) {
881 if (status.status == inference_status_code::pending ||
882 status.status == inference_status_code::running) {
883 result.push_back(status);
884 }
885 }
886 return result;
887 }

◆ get_status()

std::optional< inference_status > job_tracker::get_status ( const std::string & job_id) const
inlinenodiscard

Definition at line 868 of file ai_service_connector.cpp.

868 {
869 std::shared_lock lock(mutex_);
870 auto it = jobs_.find(job_id);
871 if (it != jobs_.end()) {
872 return it->second;
873 }
874 return std::nullopt;
875 }

◆ remove_job()

void job_tracker::remove_job ( const std::string & job_id)
inline

Definition at line 859 of file ai_service_connector.cpp.

859 {
860 std::lock_guard lock(mutex_);
861 jobs_.erase(job_id);
862 request_map_.erase(job_id);
863
865 metrics::active_jobs, static_cast<double>(jobs_.size()));
866 }

References kcenon::pacs::integration::monitoring_adapter::set_gauge().

Here is the call graph for this function:

◆ update_status()

void job_tracker::update_status ( const std::string & job_id,
const inference_status & status )
inline

Definition at line 828 of file ai_service_connector.cpp.

828 {
829 std::lock_guard lock(mutex_);
830
831 auto it = jobs_.find(job_id);
832 if (it != jobs_.end()) {
833 it->second = status;
834
835 // If job completed or failed, record metrics
836 if (status.status == inference_status_code::completed ||
837 status.status == inference_status_code::failed) {
838
839 // Note: request_map_ entry may be used for future logging
840 (void)request_map_[job_id];
841 auto duration = status.completed_at.value_or(std::chrono::system_clock::now())
842 - status.created_at;
843
845 metrics::inference_duration,
846 std::chrono::duration_cast<std::chrono::nanoseconds>(duration));
847
848 if (status.status == inference_status_code::completed) {
850 metrics::inference_requests_success);
851 } else {
853 metrics::inference_requests_failed);
854 }
855 }
856 }
857 }
static void record_timing(std::string_view name, std::chrono::nanoseconds duration)
Record a timing measurement.
static void increment_counter(std::string_view name, std::int64_t value=1)
Increment a counter metric.

References kcenon::pacs::integration::monitoring_adapter::increment_counter(), and kcenon::pacs::integration::monitoring_adapter::record_timing().

Here is the call graph for this function:

Member Data Documentation

◆ jobs_

std::unordered_map<std::string, inference_status> job_tracker::jobs_
private

Definition at line 891 of file ai_service_connector.cpp.

◆ mutex_

std::shared_mutex job_tracker::mutex_
mutableprivate

Definition at line 890 of file ai_service_connector.cpp.

◆ request_map_

std::unordered_map<std::string, inference_request> job_tracker::request_map_
private

Definition at line 892 of file ai_service_connector.cpp.


The documentation for this class was generated from the following file: