45 std::optional<std::chrono::system_clock::time_point>
start_at;
76 s.
minute =
"*/" + std::to_string(n);
87 s.
hour =
"*/" + std::to_string(n);
129 [[nodiscard]]
auto to_string() const -> std::
string;
135 [[nodiscard]] auto
is_valid() const noexcept ->
bool;
149using schedule = std::variant<interval_schedule, cron_schedule, one_time_schedule>;
188 default:
return "unknown";
201 default:
return "unknown";
223 std::optional<std::chrono::system_clock::time_point>
ended_at;
239 -> std::optional<std::chrono::milliseconds> {
241 return std::chrono::duration_cast<std::chrono::milliseconds>(
242 *ended_at - started_at);
306 std::chrono::seconds timeout{0};
309 std::size_t max_retries{0};
312 std::chrono::seconds retry_delay{60};
330 std::size_t execution_count{0};
333 std::size_t success_count{0};
336 std::size_t failure_count{0};
348 std::chrono::days default_retention{365};
357 bool verify_not_locked{
true};
363 std::size_t max_deletions_per_cycle{100};
366 bool database_only{
false};
369 schedule cleanup_schedule{cron_schedule::daily_at(2, 0)};
377 -> std::chrono::days {
378 auto it = modality_retention.find(modality);
379 return it != modality_retention.end() ? it->second : default_retention;
403 std::chrono::days archive_after{90};
415 bool verify_after_archive{
true};
418 bool delete_after_archive{
false};
424 int compression_level{6};
427 std::size_t max_archives_per_cycle{50};
430 schedule archive_schedule{cron_schedule::daily_at(3, 0)};
442 std::chrono::hours interval{24};
445 bool check_checksums{
true};
448 bool check_db_consistency{
true};
451 bool check_dicom_structure{
false};
454 bool repair_on_failure{
false};
457 std::size_t max_verifications_per_cycle{1000};
460 std::string hash_algorithm{
"SHA256"};
463 schedule verification_schedule{cron_schedule::daily_at(4, 0)};
478 bool auto_start{
false};
481 std::size_t max_concurrent_tasks{4};
484 std::chrono::seconds check_interval{60};
490 bool restore_on_startup{
true};
503 std::function<void(
const task_id&
id,
509 std::function<void(
const task_id&
id,
510 const std::string& error)>;
515 std::function<void(std::size_t tasks_executed,
516 std::size_t tasks_succeeded,
517 std::size_t tasks_failed)>;
524 [[nodiscard]]
auto is_valid() const noexcept ->
bool {
525 return enabled && max_concurrent_tasks > 0;
538 std::size_t scheduled_tasks{0};
541 std::size_t running_tasks{0};
544 std::size_t total_executions{0};
547 std::size_t successful_executions{0};
550 std::size_t failed_executions{0};
553 std::size_t cancelled_executions{0};
556 std::chrono::milliseconds avg_execution_time{0};
559 std::chrono::milliseconds max_execution_time{0};
562 std::chrono::seconds uptime{0};
task_state
Task execution state.
@ failed
Execution failed.
@ cancelled
Cancelled by user.
@ running
Currently executing.
@ pending
Waiting for scheduled time.
@ completed
Completed successfully.
@ paused
Temporarily paused.
archive_destination_type
Archive destination type.
@ network_share
Network share (SMB/NFS)
@ local_path
Local filesystem path.
@ cloud_s3
AWS S3 or compatible.
@ cloud_azure
Azure Blob Storage.
std::function< std::optional< std::string >()> task_callback_with_result
Task callback with result details.
task_type
Task type enumeration.
@ archive
Study archival task.
@ custom
User-defined task.
@ cleanup
Storage cleanup task.
@ verification
Data integrity verification.
std::string task_id
Unique task identifier.
std::function< bool()> task_callback
Task callback function type.
std::variant< interval_schedule, cron_schedule, one_time_schedule > schedule
Combined schedule type.
Configuration for archive scheduling.
std::string destination
Destination path or URL.
std::optional< std::string > credentials_key
Credentials (if required)
Configuration for cleanup scheduling.
std::set< std::string > exclude_patterns
Study description patterns to exclude from cleanup.
std::map< std::string, std::chrono::days > modality_retention
Modality-specific retention periods.
auto retention_for(const std::string &modality) const -> std::chrono::days
Get retention period for a modality.
Cron-like schedule expression.
static auto every_hours(int n) -> cron_schedule
Create a schedule that runs every N hours.
static auto parse(const std::string &expr) -> cron_schedule
Parse a cron expression string.
std::string minute
Minute (0-59, or "*")
std::string month
Month (1-12, or "*")
std::string day_of_month
Day of month (1-31, or "*")
static auto every_minutes(int n) -> cron_schedule
Create a schedule that runs every N minutes.
auto to_string() const -> std::string
Convert to cron expression string.
std::string hour
Hour (0-23, or "*")
std::string day_of_week
Day of week (0-6, Sunday=0, or "*")
auto is_valid() const noexcept -> bool
Check if the schedule is valid.
static auto daily_at(int hour, int minute=0) -> cron_schedule
Create a daily schedule at specific time.
static auto weekly_on(int day_of_week, int hour=0, int minute=0) -> cron_schedule
Create a weekly schedule.
Simple interval-based schedule.
std::chrono::seconds interval
Interval between executions.
std::optional< std::chrono::system_clock::time_point > start_at
Optional start time for first execution.
One-time execution at specific time.
std::chrono::system_clock::time_point execute_at
Execution time.
Scheduled task definition.
std::string description
Task description.
std::chrono::system_clock::time_point created_at
Creation time.
std::optional< task_execution_record > last_execution
Last execution result.
task_id id
Unique task ID.
std::optional< std::chrono::system_clock::time_point > next_run_at
Next scheduled execution time.
std::set< std::string > tags
Tags for categorization.
std::optional< std::chrono::system_clock::time_point > last_run_at
Last execution time.
std::chrono::system_clock::time_point updated_at
Last modification time.
task_callback_with_result callback
Task callback.
std::string name
Human-readable task name.
schedule task_schedule
Schedule for execution.
Statistics for task scheduler operations.
std::optional< std::chrono::system_clock::time_point > last_cycle_at
Last cycle time.
Record of a single task execution.
std::string task_id
Task ID.
auto duration() const -> std::optional< std::chrono::milliseconds >
Get execution duration.
std::optional< std::string > error_message
Error message (if failed)
std::optional< std::string > result_json
Execution result details (JSON)
std::optional< std::chrono::system_clock::time_point > ended_at
End time (if completed)
std::chrono::system_clock::time_point started_at
Start time.
std::string execution_id
Execution ID (unique per execution)
Configuration for the task scheduler service.
std::function< void(std::size_t tasks_executed, std::size_t tasks_succeeded, std::size_t tasks_failed)> cycle_complete_callback
Callback when scheduler cycle completes.
std::function< void(const task_id &id, const std::string &error)> task_error_callback
Callback when any task fails.
std::optional< verification_config > verification
Verification configuration.
std::function< void(const task_id &id, const task_execution_record &record)> task_complete_callback
Callback when any task completes.
cycle_complete_callback on_cycle_complete
task_complete_callback on_task_complete
std::string persistence_path
Path to persist scheduled tasks (empty = no persistence)
std::optional< cleanup_config > cleanup
Cleanup configuration.
auto is_valid() const noexcept -> bool
Check if configuration is valid.
std::optional< archive_config > archive
Archive configuration.
task_error_callback on_task_error
Configuration for verification scheduling.