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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +142 -0
- data/LICENSE +190 -0
- data/README.md +517 -0
- data/examples/agentic_workflows/llm_chat.rb +106 -0
- data/examples/dynamic_workflow.rb +177 -0
- data/examples/event_handler.rb +94 -0
- data/examples/event_listener_examples.rb +430 -0
- data/examples/helloworld/greetings_worker.rb +24 -0
- data/examples/helloworld/helloworld.rb +99 -0
- data/examples/kitchensink.rb +213 -0
- data/examples/metadata_journey.rb +189 -0
- data/examples/metrics_example.rb +284 -0
- data/examples/new_dsl_demo.rb +141 -0
- data/examples/orkes/http_poll.rb +83 -0
- data/examples/orkes/secrets_example.rb +69 -0
- data/examples/orkes/wait_for_webhook.rb +90 -0
- data/examples/prompt_journey.rb +245 -0
- data/examples/rag_workflow.rb +167 -0
- data/examples/schedule_journey.rb +244 -0
- data/examples/simple_worker.rb +125 -0
- data/examples/simple_workflow.rb +89 -0
- data/examples/task_context_example.rb +257 -0
- data/examples/task_listener_example.rb +192 -0
- data/examples/worker_configuration_example.rb +282 -0
- data/examples/workflow_dsl.rb +316 -0
- data/examples/workflow_ops.rb +305 -0
- data/lib/conductor/client/authorization_client.rb +238 -0
- data/lib/conductor/client/integration_client.rb +108 -0
- data/lib/conductor/client/metadata_client.rb +139 -0
- data/lib/conductor/client/prompt_client.rb +58 -0
- data/lib/conductor/client/scheduler_client.rb +132 -0
- data/lib/conductor/client/schema_client.rb +32 -0
- data/lib/conductor/client/secret_client.rb +48 -0
- data/lib/conductor/client/task_client.rb +168 -0
- data/lib/conductor/client/workflow_client.rb +242 -0
- data/lib/conductor/configuration/authentication_settings.rb +17 -0
- data/lib/conductor/configuration.rb +103 -0
- data/lib/conductor/exceptions.rb +86 -0
- data/lib/conductor/http/api/application_resource_api.rb +107 -0
- data/lib/conductor/http/api/authorization_resource_api.rb +56 -0
- data/lib/conductor/http/api/event_resource_api.rb +133 -0
- data/lib/conductor/http/api/gateway_auth_resource_api.rb +48 -0
- data/lib/conductor/http/api/group_resource_api.rb +76 -0
- data/lib/conductor/http/api/integration_resource_api.rb +145 -0
- data/lib/conductor/http/api/metadata_resource_api.rb +231 -0
- data/lib/conductor/http/api/prompt_resource_api.rb +81 -0
- data/lib/conductor/http/api/role_resource_api.rb +60 -0
- data/lib/conductor/http/api/scheduler_resource_api.rb +211 -0
- data/lib/conductor/http/api/schema_resource_api.rb +82 -0
- data/lib/conductor/http/api/secret_resource_api.rb +134 -0
- data/lib/conductor/http/api/task_resource_api.rb +321 -0
- data/lib/conductor/http/api/token_resource_api.rb +42 -0
- data/lib/conductor/http/api/user_resource_api.rb +59 -0
- data/lib/conductor/http/api/workflow_bulk_resource_api.rb +91 -0
- data/lib/conductor/http/api/workflow_resource_api.rb +451 -0
- data/lib/conductor/http/api_client.rb +437 -0
- data/lib/conductor/http/models/authentication_config.rb +67 -0
- data/lib/conductor/http/models/authorization_request.rb +39 -0
- data/lib/conductor/http/models/base_model.rb +162 -0
- data/lib/conductor/http/models/bulk_response.rb +39 -0
- data/lib/conductor/http/models/conductor_application.rb +39 -0
- data/lib/conductor/http/models/conductor_user.rb +53 -0
- data/lib/conductor/http/models/create_or_update_application_request.rb +24 -0
- data/lib/conductor/http/models/create_or_update_role_request.rb +27 -0
- data/lib/conductor/http/models/event_handler.rb +130 -0
- data/lib/conductor/http/models/generate_token_request.rb +27 -0
- data/lib/conductor/http/models/group.rb +36 -0
- data/lib/conductor/http/models/integration.rb +70 -0
- data/lib/conductor/http/models/integration_api.rb +53 -0
- data/lib/conductor/http/models/integration_api_update.rb +43 -0
- data/lib/conductor/http/models/integration_update.rb +36 -0
- data/lib/conductor/http/models/permission.rb +24 -0
- data/lib/conductor/http/models/poll_data.rb +33 -0
- data/lib/conductor/http/models/prompt_template.rb +59 -0
- data/lib/conductor/http/models/prompt_template_test_request.rb +43 -0
- data/lib/conductor/http/models/rerun_workflow_request.rb +37 -0
- data/lib/conductor/http/models/role.rb +27 -0
- data/lib/conductor/http/models/schema_def.rb +59 -0
- data/lib/conductor/http/models/search_result.rb +187 -0
- data/lib/conductor/http/models/skip_task_request.rb +27 -0
- data/lib/conductor/http/models/start_workflow_request.rb +68 -0
- data/lib/conductor/http/models/subject_ref.rb +35 -0
- data/lib/conductor/http/models/tag_object.rb +36 -0
- data/lib/conductor/http/models/target_ref.rb +39 -0
- data/lib/conductor/http/models/task.rb +156 -0
- data/lib/conductor/http/models/task_def.rb +95 -0
- data/lib/conductor/http/models/task_exec_log.rb +30 -0
- data/lib/conductor/http/models/task_result.rb +115 -0
- data/lib/conductor/http/models/task_result_status.rb +24 -0
- data/lib/conductor/http/models/token.rb +33 -0
- data/lib/conductor/http/models/upsert_group_request.rb +30 -0
- data/lib/conductor/http/models/upsert_user_request.rb +39 -0
- data/lib/conductor/http/models/workflow.rb +202 -0
- data/lib/conductor/http/models/workflow_def.rb +73 -0
- data/lib/conductor/http/models/workflow_schedule.rb +100 -0
- data/lib/conductor/http/models/workflow_state_update.rb +30 -0
- data/lib/conductor/http/models/workflow_status_constants.rb +57 -0
- data/lib/conductor/http/models/workflow_task.rb +169 -0
- data/lib/conductor/http/models/workflow_test_request.rb +67 -0
- data/lib/conductor/http/rest_client.rb +211 -0
- data/lib/conductor/orkes/models/access_key.rb +56 -0
- data/lib/conductor/orkes/models/granted_permission.rb +27 -0
- data/lib/conductor/orkes/models/metadata_tag.rb +15 -0
- data/lib/conductor/orkes/models/rate_limit_tag.rb +15 -0
- data/lib/conductor/orkes/orkes_clients.rb +69 -0
- data/lib/conductor/version.rb +5 -0
- data/lib/conductor/worker/events/conductor_event.rb +40 -0
- data/lib/conductor/worker/events/global_dispatcher.rb +37 -0
- data/lib/conductor/worker/events/http_events.rb +25 -0
- data/lib/conductor/worker/events/listener_registry.rb +40 -0
- data/lib/conductor/worker/events/listeners.rb +34 -0
- data/lib/conductor/worker/events/sync_event_dispatcher.rb +78 -0
- data/lib/conductor/worker/events/task_runner_events.rb +271 -0
- data/lib/conductor/worker/events/workflow_events.rb +49 -0
- data/lib/conductor/worker/fiber_executor.rb +532 -0
- data/lib/conductor/worker/ractor_task_runner.rb +501 -0
- data/lib/conductor/worker/task_context.rb +114 -0
- data/lib/conductor/worker/task_definition_registrar.rb +322 -0
- data/lib/conductor/worker/task_handler.rb +360 -0
- data/lib/conductor/worker/task_in_progress.rb +60 -0
- data/lib/conductor/worker/task_runner.rb +538 -0
- data/lib/conductor/worker/telemetry/metrics_collector.rb +196 -0
- data/lib/conductor/worker/telemetry/prometheus_backend.rb +224 -0
- data/lib/conductor/worker/worker.rb +355 -0
- data/lib/conductor/worker/worker_config.rb +154 -0
- data/lib/conductor/worker/worker_registry.rb +71 -0
- data/lib/conductor/workflow/dsl/input_ref.rb +37 -0
- data/lib/conductor/workflow/dsl/output_ref.rb +44 -0
- data/lib/conductor/workflow/dsl/parallel_builder.rb +49 -0
- data/lib/conductor/workflow/dsl/switch_builder.rb +74 -0
- data/lib/conductor/workflow/dsl/task_ref.rb +178 -0
- data/lib/conductor/workflow/dsl/workflow_builder.rb +1016 -0
- data/lib/conductor/workflow/dsl/workflow_definition.rb +150 -0
- data/lib/conductor/workflow/llm/chat_message.rb +47 -0
- data/lib/conductor/workflow/llm/embedding_model.rb +19 -0
- data/lib/conductor/workflow/llm/tool_call.rb +43 -0
- data/lib/conductor/workflow/llm/tool_spec.rb +46 -0
- data/lib/conductor/workflow/task_type.rb +68 -0
- data/lib/conductor/workflow/timeout_policy.rb +31 -0
- data/lib/conductor/workflow/workflow_executor.rb +373 -0
- data/lib/conductor.rb +192 -0
- 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
|