conductor_ruby 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +142 -0
  3. data/LICENSE +190 -0
  4. data/README.md +517 -0
  5. data/examples/agentic_workflows/llm_chat.rb +106 -0
  6. data/examples/dynamic_workflow.rb +177 -0
  7. data/examples/event_handler.rb +94 -0
  8. data/examples/event_listener_examples.rb +430 -0
  9. data/examples/helloworld/greetings_worker.rb +24 -0
  10. data/examples/helloworld/helloworld.rb +99 -0
  11. data/examples/kitchensink.rb +213 -0
  12. data/examples/metadata_journey.rb +189 -0
  13. data/examples/metrics_example.rb +284 -0
  14. data/examples/new_dsl_demo.rb +141 -0
  15. data/examples/orkes/http_poll.rb +83 -0
  16. data/examples/orkes/secrets_example.rb +69 -0
  17. data/examples/orkes/wait_for_webhook.rb +90 -0
  18. data/examples/prompt_journey.rb +245 -0
  19. data/examples/rag_workflow.rb +167 -0
  20. data/examples/schedule_journey.rb +244 -0
  21. data/examples/simple_worker.rb +125 -0
  22. data/examples/simple_workflow.rb +89 -0
  23. data/examples/task_context_example.rb +257 -0
  24. data/examples/task_listener_example.rb +192 -0
  25. data/examples/worker_configuration_example.rb +282 -0
  26. data/examples/workflow_dsl.rb +316 -0
  27. data/examples/workflow_ops.rb +305 -0
  28. data/lib/conductor/client/authorization_client.rb +238 -0
  29. data/lib/conductor/client/integration_client.rb +108 -0
  30. data/lib/conductor/client/metadata_client.rb +139 -0
  31. data/lib/conductor/client/prompt_client.rb +58 -0
  32. data/lib/conductor/client/scheduler_client.rb +132 -0
  33. data/lib/conductor/client/schema_client.rb +32 -0
  34. data/lib/conductor/client/secret_client.rb +48 -0
  35. data/lib/conductor/client/task_client.rb +168 -0
  36. data/lib/conductor/client/workflow_client.rb +242 -0
  37. data/lib/conductor/configuration/authentication_settings.rb +17 -0
  38. data/lib/conductor/configuration.rb +103 -0
  39. data/lib/conductor/exceptions.rb +86 -0
  40. data/lib/conductor/http/api/application_resource_api.rb +107 -0
  41. data/lib/conductor/http/api/authorization_resource_api.rb +56 -0
  42. data/lib/conductor/http/api/event_resource_api.rb +133 -0
  43. data/lib/conductor/http/api/gateway_auth_resource_api.rb +48 -0
  44. data/lib/conductor/http/api/group_resource_api.rb +76 -0
  45. data/lib/conductor/http/api/integration_resource_api.rb +145 -0
  46. data/lib/conductor/http/api/metadata_resource_api.rb +231 -0
  47. data/lib/conductor/http/api/prompt_resource_api.rb +81 -0
  48. data/lib/conductor/http/api/role_resource_api.rb +60 -0
  49. data/lib/conductor/http/api/scheduler_resource_api.rb +211 -0
  50. data/lib/conductor/http/api/schema_resource_api.rb +82 -0
  51. data/lib/conductor/http/api/secret_resource_api.rb +134 -0
  52. data/lib/conductor/http/api/task_resource_api.rb +321 -0
  53. data/lib/conductor/http/api/token_resource_api.rb +42 -0
  54. data/lib/conductor/http/api/user_resource_api.rb +59 -0
  55. data/lib/conductor/http/api/workflow_bulk_resource_api.rb +91 -0
  56. data/lib/conductor/http/api/workflow_resource_api.rb +451 -0
  57. data/lib/conductor/http/api_client.rb +437 -0
  58. data/lib/conductor/http/models/authentication_config.rb +67 -0
  59. data/lib/conductor/http/models/authorization_request.rb +39 -0
  60. data/lib/conductor/http/models/base_model.rb +162 -0
  61. data/lib/conductor/http/models/bulk_response.rb +39 -0
  62. data/lib/conductor/http/models/conductor_application.rb +39 -0
  63. data/lib/conductor/http/models/conductor_user.rb +53 -0
  64. data/lib/conductor/http/models/create_or_update_application_request.rb +24 -0
  65. data/lib/conductor/http/models/create_or_update_role_request.rb +27 -0
  66. data/lib/conductor/http/models/event_handler.rb +130 -0
  67. data/lib/conductor/http/models/generate_token_request.rb +27 -0
  68. data/lib/conductor/http/models/group.rb +36 -0
  69. data/lib/conductor/http/models/integration.rb +70 -0
  70. data/lib/conductor/http/models/integration_api.rb +53 -0
  71. data/lib/conductor/http/models/integration_api_update.rb +43 -0
  72. data/lib/conductor/http/models/integration_update.rb +36 -0
  73. data/lib/conductor/http/models/permission.rb +24 -0
  74. data/lib/conductor/http/models/poll_data.rb +33 -0
  75. data/lib/conductor/http/models/prompt_template.rb +59 -0
  76. data/lib/conductor/http/models/prompt_template_test_request.rb +43 -0
  77. data/lib/conductor/http/models/rerun_workflow_request.rb +37 -0
  78. data/lib/conductor/http/models/role.rb +27 -0
  79. data/lib/conductor/http/models/schema_def.rb +59 -0
  80. data/lib/conductor/http/models/search_result.rb +187 -0
  81. data/lib/conductor/http/models/skip_task_request.rb +27 -0
  82. data/lib/conductor/http/models/start_workflow_request.rb +68 -0
  83. data/lib/conductor/http/models/subject_ref.rb +35 -0
  84. data/lib/conductor/http/models/tag_object.rb +36 -0
  85. data/lib/conductor/http/models/target_ref.rb +39 -0
  86. data/lib/conductor/http/models/task.rb +156 -0
  87. data/lib/conductor/http/models/task_def.rb +95 -0
  88. data/lib/conductor/http/models/task_exec_log.rb +30 -0
  89. data/lib/conductor/http/models/task_result.rb +115 -0
  90. data/lib/conductor/http/models/task_result_status.rb +24 -0
  91. data/lib/conductor/http/models/token.rb +33 -0
  92. data/lib/conductor/http/models/upsert_group_request.rb +30 -0
  93. data/lib/conductor/http/models/upsert_user_request.rb +39 -0
  94. data/lib/conductor/http/models/workflow.rb +202 -0
  95. data/lib/conductor/http/models/workflow_def.rb +73 -0
  96. data/lib/conductor/http/models/workflow_schedule.rb +100 -0
  97. data/lib/conductor/http/models/workflow_state_update.rb +30 -0
  98. data/lib/conductor/http/models/workflow_status_constants.rb +57 -0
  99. data/lib/conductor/http/models/workflow_task.rb +169 -0
  100. data/lib/conductor/http/models/workflow_test_request.rb +67 -0
  101. data/lib/conductor/http/rest_client.rb +211 -0
  102. data/lib/conductor/orkes/models/access_key.rb +56 -0
  103. data/lib/conductor/orkes/models/granted_permission.rb +27 -0
  104. data/lib/conductor/orkes/models/metadata_tag.rb +15 -0
  105. data/lib/conductor/orkes/models/rate_limit_tag.rb +15 -0
  106. data/lib/conductor/orkes/orkes_clients.rb +69 -0
  107. data/lib/conductor/version.rb +5 -0
  108. data/lib/conductor/worker/events/conductor_event.rb +40 -0
  109. data/lib/conductor/worker/events/global_dispatcher.rb +37 -0
  110. data/lib/conductor/worker/events/http_events.rb +25 -0
  111. data/lib/conductor/worker/events/listener_registry.rb +40 -0
  112. data/lib/conductor/worker/events/listeners.rb +34 -0
  113. data/lib/conductor/worker/events/sync_event_dispatcher.rb +78 -0
  114. data/lib/conductor/worker/events/task_runner_events.rb +271 -0
  115. data/lib/conductor/worker/events/workflow_events.rb +49 -0
  116. data/lib/conductor/worker/fiber_executor.rb +532 -0
  117. data/lib/conductor/worker/ractor_task_runner.rb +501 -0
  118. data/lib/conductor/worker/task_context.rb +114 -0
  119. data/lib/conductor/worker/task_definition_registrar.rb +322 -0
  120. data/lib/conductor/worker/task_handler.rb +360 -0
  121. data/lib/conductor/worker/task_in_progress.rb +60 -0
  122. data/lib/conductor/worker/task_runner.rb +538 -0
  123. data/lib/conductor/worker/telemetry/metrics_collector.rb +196 -0
  124. data/lib/conductor/worker/telemetry/prometheus_backend.rb +224 -0
  125. data/lib/conductor/worker/worker.rb +355 -0
  126. data/lib/conductor/worker/worker_config.rb +154 -0
  127. data/lib/conductor/worker/worker_registry.rb +71 -0
  128. data/lib/conductor/workflow/dsl/input_ref.rb +37 -0
  129. data/lib/conductor/workflow/dsl/output_ref.rb +44 -0
  130. data/lib/conductor/workflow/dsl/parallel_builder.rb +49 -0
  131. data/lib/conductor/workflow/dsl/switch_builder.rb +74 -0
  132. data/lib/conductor/workflow/dsl/task_ref.rb +178 -0
  133. data/lib/conductor/workflow/dsl/workflow_builder.rb +1016 -0
  134. data/lib/conductor/workflow/dsl/workflow_definition.rb +150 -0
  135. data/lib/conductor/workflow/llm/chat_message.rb +47 -0
  136. data/lib/conductor/workflow/llm/embedding_model.rb +19 -0
  137. data/lib/conductor/workflow/llm/tool_call.rb +43 -0
  138. data/lib/conductor/workflow/llm/tool_spec.rb +46 -0
  139. data/lib/conductor/workflow/task_type.rb +68 -0
  140. data/lib/conductor/workflow/timeout_policy.rb +31 -0
  141. data/lib/conductor/workflow/workflow_executor.rb +373 -0
  142. data/lib/conductor.rb +192 -0
  143. metadata +359 -0
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../configuration'
4
+ require_relative '../http/api_client'
5
+ require_relative '../http/api/metadata_resource_api'
6
+
7
+ module Conductor
8
+ module Client
9
+ # MetadataClient - High-level client for workflow and task metadata operations
10
+ # Provides a clean interface for registering and managing workflow/task definitions
11
+ class MetadataClient
12
+ attr_reader :metadata_api
13
+
14
+ # Initialize MetadataClient
15
+ # @param [Configuration] configuration Optional configuration
16
+ def initialize(configuration = nil)
17
+ @configuration = configuration || Configuration.new
18
+ api_client = Http::ApiClient.new(configuration: @configuration)
19
+ @metadata_api = Http::Api::MetadataResourceApi.new(api_client)
20
+ end
21
+
22
+ # ==========================================
23
+ # Workflow Definition Operations
24
+ # ==========================================
25
+
26
+ # Register a workflow definition
27
+ # @param [WorkflowDef] workflow_def Workflow definition to register
28
+ # @param [Boolean] overwrite Overwrite existing definition (default: true)
29
+ # @return [void]
30
+ def register_workflow_def(workflow_def, overwrite: true)
31
+ @metadata_api.create_workflow(workflow_def, overwrite: overwrite)
32
+ end
33
+
34
+ # Update a workflow definition
35
+ # @param [WorkflowDef] workflow_def Workflow definition to update
36
+ # @param [Boolean] overwrite Overwrite existing definition (default: true)
37
+ # @return [void]
38
+ def update_workflow_def(workflow_def, overwrite: true)
39
+ @metadata_api.update_workflows([workflow_def], overwrite: overwrite)
40
+ end
41
+
42
+ # Unregister (delete) a workflow definition
43
+ # @param [String] name Workflow name
44
+ # @param [Integer] version Workflow version
45
+ # @return [void]
46
+ def unregister_workflow_def(name, version:)
47
+ @metadata_api.unregister_workflow_def(name, version: version)
48
+ end
49
+
50
+ # Get a workflow definition by name
51
+ # @param [String] name Workflow name
52
+ # @param [Integer] version Workflow version (optional, returns latest if not specified)
53
+ # @return [WorkflowDef] Workflow definition
54
+ def get_workflow_def(name, version: nil)
55
+ @metadata_api.get_workflow_def(name, version: version)
56
+ end
57
+
58
+ # Get all workflow definitions
59
+ # @return [Array<WorkflowDef>] List of workflow definitions
60
+ def get_all_workflow_defs
61
+ @metadata_api.get_all_workflows
62
+ end
63
+
64
+ # ==========================================
65
+ # Task Definition Operations
66
+ # ==========================================
67
+
68
+ # Register a task definition
69
+ # @param [TaskDef] task_def Task definition to register
70
+ # @return [void]
71
+ def register_task_def(task_def)
72
+ @metadata_api.register_task_def([task_def])
73
+ end
74
+
75
+ # Register multiple task definitions
76
+ # @param [Array<TaskDef>] task_defs List of task definitions to register
77
+ # @return [void]
78
+ def register_task_defs(task_defs)
79
+ @metadata_api.register_task_def(task_defs)
80
+ end
81
+
82
+ # Update a task definition
83
+ # @param [TaskDef] task_def Task definition to update
84
+ # @return [void]
85
+ def update_task_def(task_def)
86
+ @metadata_api.update_task_def(task_def)
87
+ end
88
+
89
+ # Unregister (delete) a task definition
90
+ # @param [String] task_type Task type name
91
+ # @return [void]
92
+ def unregister_task_def(task_type)
93
+ @metadata_api.unregister_task_def(task_type)
94
+ end
95
+
96
+ # Get a task definition by name
97
+ # @param [String] task_type Task type name
98
+ # @return [TaskDef] Task definition
99
+ def get_task_def(task_type)
100
+ @metadata_api.get_task_def(task_type)
101
+ end
102
+
103
+ # Get all task definitions
104
+ # @return [Array<TaskDef>] List of task definitions
105
+ def get_all_task_defs
106
+ @metadata_api.get_all_task_defs
107
+ end
108
+
109
+ # ==========================================
110
+ # Workflow Metadata (Tags) Operations
111
+ # ==========================================
112
+
113
+ # Add metadata (tags) to a workflow
114
+ # @param [String] workflow_name Workflow name
115
+ # @param [Object] tag Tag/metadata to add
116
+ # @param [Integer] version Workflow version (optional)
117
+ # @return [void]
118
+ def add_workflow_tag(workflow_name, tag, version: nil)
119
+ @metadata_api.create_workflow_metadata(workflow_name, tag, version: version)
120
+ end
121
+
122
+ # Get metadata (tags) for a workflow
123
+ # @param [String] workflow_name Workflow name
124
+ # @param [Integer] version Workflow version (optional)
125
+ # @return [Object] Workflow metadata/tags
126
+ def get_workflow_tags(workflow_name, version: nil)
127
+ @metadata_api.get_workflow_metadata(workflow_name, version: version)
128
+ end
129
+
130
+ # Delete metadata (tags) from a workflow
131
+ # @param [String] workflow_name Workflow name
132
+ # @param [Integer] version Workflow version
133
+ # @return [void]
134
+ def delete_workflow_tag(workflow_name, version:)
135
+ @metadata_api.delete_workflow_metadata(workflow_name, version: version)
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Conductor
4
+ module Client
5
+ # PromptClient - High-level client for prompt template management operations (Orkes)
6
+ class PromptClient
7
+ def initialize(api_client)
8
+ @prompt_api = Http::Api::PromptResourceApi.new(api_client)
9
+ end
10
+
11
+ def save_prompt(prompt_name, description, prompt_template, models: nil, version: nil, auto_increment: false)
12
+ @prompt_api.save_prompt(
13
+ prompt_name, prompt_template,
14
+ description: description, models: models,
15
+ version: version, auto_increment: auto_increment
16
+ )
17
+ end
18
+
19
+ def get_prompt(prompt_name)
20
+ @prompt_api.get_prompt(prompt_name)
21
+ end
22
+
23
+ def get_prompts
24
+ @prompt_api.get_prompts
25
+ end
26
+
27
+ def delete_prompt(prompt_name)
28
+ @prompt_api.delete_prompt(prompt_name)
29
+ end
30
+
31
+ def get_tags_for_prompt_template(prompt_name)
32
+ @prompt_api.get_tags_for_prompt_template(prompt_name)
33
+ end
34
+
35
+ def update_tag_for_prompt_template(prompt_name, tags)
36
+ @prompt_api.update_tag_for_prompt_template(prompt_name, tags)
37
+ end
38
+
39
+ def delete_tag_for_prompt_template(prompt_name, tags)
40
+ @prompt_api.delete_tag_for_prompt_template(prompt_name, tags)
41
+ end
42
+
43
+ def test_prompt(prompt_text, variables, ai_integration, text_complete_model, temperature: 0.1, top_p: 0.9,
44
+ stop_words: nil)
45
+ request = Http::Models::PromptTemplateTestRequest.new(
46
+ prompt: prompt_text,
47
+ prompt_variables: variables,
48
+ llm_provider: ai_integration,
49
+ model: text_complete_model,
50
+ temperature: temperature,
51
+ top_p: top_p,
52
+ stop_words: stop_words
53
+ )
54
+ @prompt_api.test_prompt(request)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../configuration'
4
+ require_relative '../http/api_client'
5
+ require_relative '../http/api/scheduler_resource_api'
6
+
7
+ module Conductor
8
+ module Client
9
+ # SchedulerClient - High-level client for workflow schedule operations
10
+ class SchedulerClient
11
+ attr_reader :scheduler_api
12
+
13
+ # Initialize SchedulerClient
14
+ # @param [Configuration] configuration Optional configuration
15
+ def initialize(configuration = nil)
16
+ @configuration = configuration || Configuration.new
17
+ api_client = Http::ApiClient.new(configuration: @configuration)
18
+ @scheduler_api = Http::Api::SchedulerResourceApi.new(api_client)
19
+ end
20
+
21
+ # Save (create/update) a schedule
22
+ # @param [SaveScheduleRequest] request Schedule request
23
+ # @return [void]
24
+ def save_schedule(request)
25
+ @scheduler_api.save_schedule(request)
26
+ end
27
+
28
+ # Get a schedule by name
29
+ # @param [String] name Schedule name
30
+ # @return [WorkflowSchedule]
31
+ def get_schedule(name)
32
+ @scheduler_api.get_schedule(name)
33
+ end
34
+
35
+ # Get all schedules
36
+ # @param [String] workflow_name Filter by workflow name (optional)
37
+ # @return [Array<WorkflowSchedule>]
38
+ def get_all_schedules(workflow_name: nil)
39
+ @scheduler_api.get_all_schedules(workflow_name: workflow_name)
40
+ end
41
+
42
+ # Delete a schedule
43
+ # @param [String] name Schedule name
44
+ # @return [void]
45
+ def delete_schedule(name)
46
+ @scheduler_api.delete_schedule(name)
47
+ end
48
+
49
+ # Pause a schedule
50
+ # @param [String] name Schedule name
51
+ # @return [void]
52
+ def pause_schedule(name)
53
+ @scheduler_api.pause_schedule(name)
54
+ end
55
+
56
+ # Resume a schedule
57
+ # @param [String] name Schedule name
58
+ # @return [void]
59
+ def resume_schedule(name)
60
+ @scheduler_api.resume_schedule(name)
61
+ end
62
+
63
+ # Pause all schedules
64
+ # @return [Hash]
65
+ def pause_all_schedules
66
+ @scheduler_api.pause_all_schedules
67
+ end
68
+
69
+ # Resume all schedules
70
+ # @return [Hash]
71
+ def resume_all_schedules
72
+ @scheduler_api.resume_all_schedules
73
+ end
74
+
75
+ # Get next few schedule execution times
76
+ # @param [String] cron_expression Cron expression
77
+ # @param [Integer] schedule_start_time Start time (epoch ms, optional)
78
+ # @param [Integer] schedule_end_time End time (epoch ms, optional)
79
+ # @param [Integer] limit Number of times to return (optional)
80
+ # @return [Array<Integer>]
81
+ def get_next_few_schedule_execution_times(cron_expression, schedule_start_time: nil, schedule_end_time: nil,
82
+ limit: nil)
83
+ @scheduler_api.get_next_few_schedules(
84
+ cron_expression,
85
+ schedule_start_time: schedule_start_time,
86
+ schedule_end_time: schedule_end_time,
87
+ limit: limit
88
+ )
89
+ end
90
+
91
+ # Search schedule executions
92
+ # @param [Integer] start Start index (default: 0)
93
+ # @param [Integer] size Page size (default: 100)
94
+ # @param [String] sort Sort order (optional)
95
+ # @param [String] free_text Free text search (default: '*')
96
+ # @param [String] query Query string (optional)
97
+ # @return [SearchResult]
98
+ def search_schedule_executions(start: 0, size: 100, sort: nil, free_text: '*', query: nil)
99
+ @scheduler_api.search_v2(start: start, size: size, sort: sort, free_text: free_text, query: query)
100
+ end
101
+
102
+ # Requeue all execution records
103
+ # @return [Hash]
104
+ def requeue_all_execution_records
105
+ @scheduler_api.requeue_all_execution_records
106
+ end
107
+
108
+ # Set tags for a schedule
109
+ # @param [String] name Schedule name
110
+ # @param [Array<Hash>] tags Tags to set
111
+ # @return [void]
112
+ def set_scheduler_tags(name, tags)
113
+ @scheduler_api.put_tag_for_schedule(name, tags)
114
+ end
115
+
116
+ # Get tags for a schedule
117
+ # @param [String] name Schedule name
118
+ # @return [Array<Hash>]
119
+ def get_scheduler_tags(name)
120
+ @scheduler_api.get_tags_for_schedule(name)
121
+ end
122
+
123
+ # Delete tags for a schedule
124
+ # @param [String] name Schedule name
125
+ # @param [Array<Hash>] tags Tags to delete
126
+ # @return [void]
127
+ def delete_scheduler_tags(name, tags)
128
+ @scheduler_api.delete_tag_for_schedule(name, tags)
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Conductor
4
+ module Client
5
+ # SchemaClient - High-level client for schema management operations (Orkes)
6
+ class SchemaClient
7
+ def initialize(api_client)
8
+ @schema_api = Http::Api::SchemaResourceApi.new(api_client)
9
+ end
10
+
11
+ def register_schema(schema, new_version: false)
12
+ @schema_api.save(schema, new_version: new_version)
13
+ end
14
+
15
+ def get_schema(schema_name, version)
16
+ @schema_api.get_schema_by_name_and_version(schema_name, version)
17
+ end
18
+
19
+ def get_all_schemas
20
+ @schema_api.get_all_schemas
21
+ end
22
+
23
+ def delete_schema(schema_name, version)
24
+ @schema_api.delete_schema_by_name_and_version(schema_name, version)
25
+ end
26
+
27
+ def delete_schema_by_name(schema_name)
28
+ @schema_api.delete_schema_by_name(schema_name)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Conductor
4
+ module Client
5
+ # SecretClient - High-level client for secret management operations (Orkes)
6
+ class SecretClient
7
+ def initialize(api_client)
8
+ @secret_api = Http::Api::SecretResourceApi.new(api_client)
9
+ end
10
+
11
+ def put_secret(key, value)
12
+ @secret_api.put_secret(value, key)
13
+ end
14
+
15
+ def get_secret(key)
16
+ @secret_api.get_secret(key)
17
+ end
18
+
19
+ def list_all_secret_names
20
+ @secret_api.list_all_secret_names
21
+ end
22
+
23
+ def list_secrets_that_user_can_grant_access_to
24
+ @secret_api.list_secrets_that_user_can_grant_access_to
25
+ end
26
+
27
+ def delete_secret(key)
28
+ @secret_api.delete_secret(key)
29
+ end
30
+
31
+ def secret_exists(key)
32
+ @secret_api.secret_exists(key)
33
+ end
34
+
35
+ def set_secret_tags(tags, key)
36
+ @secret_api.put_tag_for_secret(tags, key)
37
+ end
38
+
39
+ def get_secret_tags(key)
40
+ @secret_api.get_tags(key)
41
+ end
42
+
43
+ def delete_secret_tags(tags, key)
44
+ @secret_api.delete_tag_for_secret(tags, key)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,168 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../configuration'
4
+ require_relative '../http/api_client'
5
+ require_relative '../http/api/task_resource_api'
6
+
7
+ module Conductor
8
+ module Client
9
+ # TaskClient - High-level client for task operations
10
+ class TaskClient
11
+ attr_reader :task_api
12
+
13
+ # Initialize TaskClient
14
+ # @param [Configuration] configuration Optional configuration
15
+ def initialize(configuration = nil)
16
+ @configuration = configuration || Configuration.new
17
+ api_client = Http::ApiClient.new(configuration: @configuration)
18
+ @task_api = Http::Api::TaskResourceApi.new(api_client)
19
+ end
20
+
21
+ # Poll for a task
22
+ # @param [String] task_type Task type to poll
23
+ # @param [String] worker_id Worker ID (optional)
24
+ # @param [String] domain Domain (optional)
25
+ # @return [Task, nil] Task object or nil if no task available
26
+ def poll_task(task_type, worker_id: nil, domain: nil)
27
+ @task_api.poll(task_type, worker_id: worker_id, domain: domain)
28
+ end
29
+
30
+ # Batch poll for tasks
31
+ # @param [String] task_type Task type to poll
32
+ # @param [Integer] count Number of tasks to poll (default: 1)
33
+ # @param [Integer] timeout Timeout in milliseconds (default: 100)
34
+ # @param [String] worker_id Worker ID (optional)
35
+ # @param [String] domain Domain (optional)
36
+ # @return [Array<Task>] Array of tasks
37
+ def batch_poll_tasks(task_type, count: 1, timeout: 100, worker_id: nil, domain: nil)
38
+ @task_api.batch_poll(task_type, count: count, timeout: timeout, worker_id: worker_id, domain: domain)
39
+ end
40
+
41
+ # Update task status
42
+ # @param [TaskResult] task_result Task result
43
+ # @return [String] Task ID
44
+ def update_task(task_result)
45
+ @task_api.update_task(task_result)
46
+ end
47
+
48
+ # Get task details
49
+ # @param [String] task_id Task ID
50
+ # @return [Task] Task object
51
+ def get_task(task_id)
52
+ @task_api.get_task(task_id)
53
+ end
54
+
55
+ # Remove task from queue
56
+ # @param [String] task_type Task type
57
+ # @param [String] task_id Task ID
58
+ # @return [void]
59
+ def remove_task_from_queue(task_type, task_id)
60
+ @task_api.remove_task_from_queue(task_type, task_id)
61
+ end
62
+
63
+ # Get queue sizes for task types
64
+ # @param [Array<String>] task_types List of task types (optional)
65
+ # @return [Hash<String, Integer>] Map of task type to queue size
66
+ def get_queue_sizes(task_types: nil)
67
+ @task_api.size(task_types: task_types)
68
+ end
69
+
70
+ # Get all queue details
71
+ # @return [Hash<String, Integer>] Map of task type to queue size
72
+ def get_all_queue_details
73
+ @task_api.all_queue_details
74
+ end
75
+
76
+ # Get queue details for a specific task type
77
+ # @param [String] task_type Task type
78
+ # @return [Hash] Queue details
79
+ def get_queue_details(task_type)
80
+ @task_api.get_task_queue_details(task_type)
81
+ end
82
+
83
+ # Add task execution log
84
+ # @param [String] task_id Task ID
85
+ # @param [String] log_message Log message
86
+ # @return [void]
87
+ def add_task_log(task_id, log_message)
88
+ @task_api.log(task_id, log_message)
89
+ end
90
+
91
+ # Get task execution logs
92
+ # @param [String] task_id Task ID
93
+ # @return [Array<TaskExecLog>] Array of task execution logs
94
+ def get_task_logs(task_id)
95
+ @task_api.get_task_logs(task_id)
96
+ end
97
+
98
+ # Get pending tasks for a task type
99
+ # @param [String] task_type Task type
100
+ # @param [Integer] start Start index (default: 0)
101
+ # @param [Integer] count Number of tasks (default: 100)
102
+ # @return [Array<Task>] Array of pending tasks
103
+ def get_pending_tasks(task_type, start: 0, count: 100)
104
+ @task_api.get_pending_task_for_task_type(task_type, start: start, count: count)
105
+ end
106
+
107
+ # Update task by reference name
108
+ # @param [String] workflow_id Workflow ID
109
+ # @param [String] task_ref_name Task reference name
110
+ # @param [String] status New status
111
+ # @param [Hash] output Task output data (optional)
112
+ # @param [String] worker_id Worker ID (optional)
113
+ # @return [String] Updated workflow ID
114
+ def update_task_by_ref_name(workflow_id, task_ref_name, status, output: nil, worker_id: nil)
115
+ @task_api.update_task_by_ref_name(workflow_id, task_ref_name, status, output: output, worker_id: worker_id)
116
+ end
117
+
118
+ # Update task by reference name synchronously (returns workflow state)
119
+ # @param [String] workflow_id Workflow ID
120
+ # @param [String] task_ref_name Task reference name
121
+ # @param [String] status New status
122
+ # @param [Hash] output Task output data (optional)
123
+ # @param [String] worker_id Worker ID (optional)
124
+ # @return [Workflow] Updated workflow
125
+ def update_task_sync(workflow_id, task_ref_name, status, output: nil, worker_id: nil)
126
+ @task_api.update_task_sync(workflow_id, task_ref_name, status, output: output, worker_id: worker_id)
127
+ end
128
+
129
+ # Get poll data for a task type
130
+ # @param [String] task_type Task type name
131
+ # @return [Array<PollData>]
132
+ def get_task_poll_data(task_type)
133
+ @task_api.get_poll_data(task_type)
134
+ end
135
+
136
+ # Get all poll data
137
+ # @return [Array<PollData>]
138
+ def get_all_poll_data
139
+ @task_api.get_all_poll_data
140
+ end
141
+
142
+ # Requeue pending tasks
143
+ # @param [String] task_type Task type name
144
+ # @return [String]
145
+ def requeue_pending_task(task_type)
146
+ @task_api.requeue_pending_task(task_type)
147
+ end
148
+
149
+ # Search for tasks
150
+ # @param [Integer] start Start index (default: 0)
151
+ # @param [Integer] size Page size (default: 100)
152
+ # @param [String] sort Sort order (optional)
153
+ # @param [String] free_text Free text search (default: '*')
154
+ # @param [String] query Query string (optional)
155
+ # @return [SearchResult]
156
+ def search(start: 0, size: 100, sort: nil, free_text: '*', query: nil)
157
+ @task_api.search(start: start, size: size, sort: sort, free_text: free_text, query: query)
158
+ end
159
+
160
+ # Get queue sizes for specific task types
161
+ # @param [Array<String>] task_types List of task type names
162
+ # @return [Hash<String, Integer>]
163
+ def get_queue_sizes_for_tasks(task_types)
164
+ @task_api.get_queue_sizes_for_tasks(task_types)
165
+ end
166
+ end
167
+ end
168
+ end