temporal-ruby 0.0.0 → 0.0.1.pre.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +19 -42
- data/lib/gen/temporal/api/command/v1/message_pb.rb +146 -0
- data/lib/gen/temporal/api/common/v1/message_pb.rb +67 -0
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +35 -0
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +34 -0
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +62 -0
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +60 -0
- data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +31 -0
- data/lib/gen/temporal/api/enums/v1/query_pb.rb +31 -0
- data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +30 -0
- data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +82 -0
- data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +55 -0
- data/lib/gen/temporal/api/failure/v1/message_pb.rb +81 -0
- data/lib/gen/temporal/api/filter/v1/message_pb.rb +38 -0
- data/lib/gen/temporal/api/history/v1/message_pb.rb +423 -0
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +55 -0
- data/lib/gen/temporal/api/query/v1/message_pb.rb +36 -0
- data/lib/gen/temporal/api/replication/v1/message_pb.rb +27 -0
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +60 -0
- data/lib/gen/temporal/api/version/v1/message_pb.rb +28 -0
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +83 -0
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +538 -0
- data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +19 -0
- data/lib/gen/temporal/api/workflowservice/v1/service_services_pb.rb +223 -0
- data/lib/temporal-ruby.rb +1 -0
- data/lib/temporal.rb +137 -0
- data/lib/temporal/activity.rb +33 -0
- data/lib/temporal/activity/async_token.rb +34 -0
- data/lib/temporal/activity/context.rb +64 -0
- data/lib/temporal/activity/poller.rb +79 -0
- data/lib/temporal/activity/task_processor.rb +78 -0
- data/lib/temporal/activity/workflow_convenience_methods.rb +41 -0
- data/lib/temporal/client.rb +21 -0
- data/lib/temporal/client/errors.rb +8 -0
- data/lib/temporal/client/grpc_client.rb +345 -0
- data/lib/temporal/client/serializer.rb +31 -0
- data/lib/temporal/client/serializer/base.rb +23 -0
- data/lib/temporal/client/serializer/cancel_timer.rb +19 -0
- data/lib/temporal/client/serializer/complete_workflow.rb +20 -0
- data/lib/temporal/client/serializer/fail_workflow.rb +20 -0
- data/lib/temporal/client/serializer/failure.rb +29 -0
- data/lib/temporal/client/serializer/payload.rb +25 -0
- data/lib/temporal/client/serializer/record_marker.rb +23 -0
- data/lib/temporal/client/serializer/request_activity_cancellation.rb +19 -0
- data/lib/temporal/client/serializer/schedule_activity.rb +53 -0
- data/lib/temporal/client/serializer/start_child_workflow.rb +51 -0
- data/lib/temporal/client/serializer/start_timer.rb +20 -0
- data/lib/temporal/concerns/executable.rb +37 -0
- data/lib/temporal/concerns/typed.rb +40 -0
- data/lib/temporal/configuration.rb +44 -0
- data/lib/temporal/errors.rb +38 -0
- data/lib/temporal/executable_lookup.rb +25 -0
- data/lib/temporal/execution_options.rb +35 -0
- data/lib/temporal/json.rb +18 -0
- data/lib/temporal/metadata.rb +68 -0
- data/lib/temporal/metadata/activity.rb +27 -0
- data/lib/temporal/metadata/base.rb +17 -0
- data/lib/temporal/metadata/workflow.rb +22 -0
- data/lib/temporal/metadata/workflow_task.rb +25 -0
- data/lib/temporal/metrics.rb +37 -0
- data/lib/temporal/metrics_adapters/log.rb +33 -0
- data/lib/temporal/metrics_adapters/null.rb +9 -0
- data/lib/temporal/middleware/chain.rb +30 -0
- data/lib/temporal/middleware/entry.rb +9 -0
- data/lib/temporal/retry_policy.rb +27 -0
- data/lib/temporal/saga/concern.rb +23 -0
- data/lib/temporal/saga/result.rb +22 -0
- data/lib/temporal/saga/saga.rb +24 -0
- data/lib/temporal/testing.rb +50 -0
- data/lib/temporal/testing/future_registry.rb +27 -0
- data/lib/temporal/testing/local_activity_context.rb +17 -0
- data/lib/temporal/testing/local_workflow_context.rb +178 -0
- data/lib/temporal/testing/temporal_override.rb +121 -0
- data/lib/temporal/testing/workflow_execution.rb +44 -0
- data/lib/temporal/testing/workflow_override.rb +36 -0
- data/lib/temporal/thread_local_context.rb +14 -0
- data/lib/temporal/thread_pool.rb +63 -0
- data/lib/temporal/types.rb +7 -0
- data/lib/temporal/uuid.rb +19 -0
- data/lib/temporal/version.rb +1 -1
- data/lib/temporal/worker.rb +88 -0
- data/lib/temporal/workflow.rb +42 -0
- data/lib/temporal/workflow/command.rb +39 -0
- data/lib/temporal/workflow/command_state_machine.rb +48 -0
- data/lib/temporal/workflow/context.rb +243 -0
- data/lib/temporal/workflow/convenience_methods.rb +34 -0
- data/lib/temporal/workflow/dispatcher.rb +31 -0
- data/lib/temporal/workflow/execution_info.rb +51 -0
- data/lib/temporal/workflow/executor.rb +45 -0
- data/lib/temporal/workflow/future.rb +77 -0
- data/lib/temporal/workflow/history.rb +76 -0
- data/lib/temporal/workflow/history/event.rb +69 -0
- data/lib/temporal/workflow/history/event_target.rb +75 -0
- data/lib/temporal/workflow/history/window.rb +40 -0
- data/lib/temporal/workflow/poller.rb +67 -0
- data/lib/temporal/workflow/replay_aware_logger.rb +36 -0
- data/lib/temporal/workflow/state_manager.rb +342 -0
- data/lib/temporal/workflow/task_processor.rb +78 -0
- data/rbi/temporal-ruby.rbi +43 -0
- data/temporal.gemspec +10 -2
- metadata +186 -6
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'temporal/workflow/command'
|
2
|
+
require 'temporal/client/serializer/schedule_activity'
|
3
|
+
require 'temporal/client/serializer/start_child_workflow'
|
4
|
+
require 'temporal/client/serializer/request_activity_cancellation'
|
5
|
+
require 'temporal/client/serializer/record_marker'
|
6
|
+
require 'temporal/client/serializer/start_timer'
|
7
|
+
require 'temporal/client/serializer/cancel_timer'
|
8
|
+
require 'temporal/client/serializer/complete_workflow'
|
9
|
+
require 'temporal/client/serializer/fail_workflow'
|
10
|
+
|
11
|
+
module Temporal
|
12
|
+
module Client
|
13
|
+
module Serializer
|
14
|
+
SERIALIZERS_MAP = {
|
15
|
+
Workflow::Command::ScheduleActivity => Serializer::ScheduleActivity,
|
16
|
+
Workflow::Command::StartChildWorkflow => Serializer::StartChildWorkflow,
|
17
|
+
Workflow::Command::RequestActivityCancellation => Serializer::RequestActivityCancellation,
|
18
|
+
Workflow::Command::RecordMarker => Serializer::RecordMarker,
|
19
|
+
Workflow::Command::StartTimer => Serializer::StartTimer,
|
20
|
+
Workflow::Command::CancelTimer => Serializer::CancelTimer,
|
21
|
+
Workflow::Command::CompleteWorkflow => Serializer::CompleteWorkflow,
|
22
|
+
Workflow::Command::FailWorkflow => Serializer::FailWorkflow
|
23
|
+
}.freeze
|
24
|
+
|
25
|
+
def self.serialize(object)
|
26
|
+
serializer = SERIALIZERS_MAP[object.class]
|
27
|
+
serializer.new(object).to_proto
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'oj'
|
2
|
+
require 'gen/temporal/api/common/v1/message_pb'
|
3
|
+
require 'gen/temporal/api/command/v1/message_pb'
|
4
|
+
|
5
|
+
module Temporal
|
6
|
+
module Client
|
7
|
+
module Serializer
|
8
|
+
class Base
|
9
|
+
def initialize(object)
|
10
|
+
@object = object
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_proto
|
14
|
+
raise NotImplementedError, 'serializer needs to implement #to_proto'
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :object
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
|
3
|
+
module Temporal
|
4
|
+
module Client
|
5
|
+
module Serializer
|
6
|
+
class CancelTimer < Base
|
7
|
+
def to_proto
|
8
|
+
Temporal::Api::Decision::V1::Command.new(
|
9
|
+
command_type: Temporal::Api::Enums::V1::CommandType::COMMAND_TYPE_CANCEL_TIMER,
|
10
|
+
cancel_timer_command_attributes:
|
11
|
+
Temporal::Api::Decision::V1::CancelTimerCommandAttributes.new(
|
12
|
+
timer_id: object.timer_id.to_s
|
13
|
+
)
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
require 'temporal/client/serializer/payload'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
module Client
|
6
|
+
module Serializer
|
7
|
+
class CompleteWorkflow < Base
|
8
|
+
def to_proto
|
9
|
+
Temporal::Api::Decision::V1::Command.new(
|
10
|
+
command_type: Temporal::Api::Enums::V1::CommandType::COMMAND_TYPE_COMPLETE_WORKFLOW_EXECUTION,
|
11
|
+
complete_workflow_execution_command_attributes:
|
12
|
+
Temporal::Api::Decision::V1::CompleteWorkflowExecutionCommandAttributes.new(
|
13
|
+
result: Payload.new(object.result).to_proto
|
14
|
+
)
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
require 'temporal/json'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
module Client
|
6
|
+
module Serializer
|
7
|
+
class FailWorkflow < Base
|
8
|
+
def to_proto
|
9
|
+
Temporal::Api::Decision::V1::Command.new(
|
10
|
+
command_type: Temporal::Api::Enums::V1::CommandType::COMMAND_TYPE_FAIL_WORKFLOW_EXECUTION,
|
11
|
+
fail_workflow_execution_command_attributes:
|
12
|
+
Temporal::Api::Decision::V1::FailWorkflowExecutionCommandAttributes.new(
|
13
|
+
failure: Failure.new(object.exception).to_proto
|
14
|
+
)
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
require 'temporal/json'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
module Client
|
6
|
+
module Serializer
|
7
|
+
class Failure < Base
|
8
|
+
def to_proto
|
9
|
+
Temporal::Api::Failure::V1::Failure.new(
|
10
|
+
message: object.message,
|
11
|
+
stack_trace: stack_trace_from(object.backtrace),
|
12
|
+
application_failure_info: Temporal::Api::Failure::V1::ApplicationFailureInfo.new(
|
13
|
+
type: object.class.name,
|
14
|
+
details: Payload.new(object.message).to_proto
|
15
|
+
)
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def stack_trace_from(backtrace)
|
22
|
+
return unless backtrace
|
23
|
+
|
24
|
+
backtrace.join("\n")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
require 'temporal/json'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
module Client
|
6
|
+
module Serializer
|
7
|
+
class Payload < Base
|
8
|
+
JSON_ENCODING = 'json/plain'.freeze
|
9
|
+
|
10
|
+
def to_proto
|
11
|
+
return if object.nil?
|
12
|
+
|
13
|
+
Temporal::Api::Common::V1::Payloads.new(
|
14
|
+
payloads: [
|
15
|
+
Temporal::Api::Common::V1::Payload.new(
|
16
|
+
metadata: { 'encoding' => JSON_ENCODING },
|
17
|
+
data: JSON.serialize(object)
|
18
|
+
)
|
19
|
+
]
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
require 'temporal/client/serializer/payload'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
module Client
|
6
|
+
module Serializer
|
7
|
+
class RecordMarker < Base
|
8
|
+
def to_proto
|
9
|
+
Temporal::Api::Decision::V1::Command.new(
|
10
|
+
command_type: Temporal::Api::Enums::V1::CommandType::COMMAND_TYPE_RECORD_MARKER,
|
11
|
+
record_marker_command_attributes:
|
12
|
+
Temporal::Api::Decision::V1::RecordMarkerCommandAttributes.new(
|
13
|
+
marker_name: object.name,
|
14
|
+
details: {
|
15
|
+
'data' => Payload.new(object.details).to_proto
|
16
|
+
}
|
17
|
+
)
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
|
3
|
+
module Temporal
|
4
|
+
module Client
|
5
|
+
module Serializer
|
6
|
+
class RequestActivityCancellation < Base
|
7
|
+
def to_proto
|
8
|
+
Temporal::Api::Decision::V1::Command.new(
|
9
|
+
command_type: Temporal::Api::Enums::V1::CommandType::COMMAND_TYPE_REQUEST_CANCEL_ACTIVITY_TASK,
|
10
|
+
request_cancel_activity_task_command_attributes:
|
11
|
+
Temporal::Api::Decision::V1::RequestCancelActivityTaskCommandAttributes.new(
|
12
|
+
scheduled_event_id: object.activity_id.to_i
|
13
|
+
)
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
require 'temporal/client/serializer/payload'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
module Client
|
6
|
+
module Serializer
|
7
|
+
class ScheduleActivity < Base
|
8
|
+
def to_proto
|
9
|
+
Temporal::Api::Decision::V1::Command.new(
|
10
|
+
command_type: Temporal::Api::Enums::V1::CommandType::COMMAND_TYPE_SCHEDULE_ACTIVITY_TASK,
|
11
|
+
schedule_activity_task_command_attributes:
|
12
|
+
Temporal::Api::Decision::V1::ScheduleActivityTaskCommandAttributes.new(
|
13
|
+
activity_id: object.activity_id.to_s,
|
14
|
+
activity_type: Temporal::Api::Common::V1::ActivityType.new(name: object.activity_type),
|
15
|
+
input: Payload.new(object.input).to_proto,
|
16
|
+
namespace: object.namespace,
|
17
|
+
task_queue: Temporal::Api::TaskQueue::V1::TaskQueue.new(name: object.task_queue),
|
18
|
+
schedule_to_close_timeout: object.timeouts[:schedule_to_close],
|
19
|
+
schedule_to_start_timeout: object.timeouts[:schedule_to_start],
|
20
|
+
start_to_close_timeout: object.timeouts[:start_to_close],
|
21
|
+
heartbeat_timeout: object.timeouts[:heartbeat],
|
22
|
+
retry_policy: serialize_retry_policy(object.retry_policy),
|
23
|
+
header: serialize_headers(object.headers)
|
24
|
+
)
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def serialize_retry_policy(retry_policy)
|
31
|
+
return unless retry_policy
|
32
|
+
|
33
|
+
non_retriable_errors = Array(retry_policy.non_retriable_errors).map(&:name)
|
34
|
+
options = {
|
35
|
+
initial_interval: retry_policy.interval,
|
36
|
+
backoff_coefficient: retry_policy.backoff,
|
37
|
+
maximum_interval: retry_policy.max_interval,
|
38
|
+
maximum_attempts: retry_policy.max_attempts,
|
39
|
+
non_retryable_error_types: non_retriable_errors
|
40
|
+
}.compact
|
41
|
+
|
42
|
+
Temporal::Api::Common::V1::RetryPolicy.new(options)
|
43
|
+
end
|
44
|
+
|
45
|
+
def serialize_headers(headers)
|
46
|
+
return unless headers
|
47
|
+
|
48
|
+
Temporal::Api::Common::V1::Header.new(fields: object.headers)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
require 'temporal/client/serializer/payload'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
module Client
|
6
|
+
module Serializer
|
7
|
+
class StartChildWorkflow < Base
|
8
|
+
def to_proto
|
9
|
+
Temporal::Api::Decision::V1::Command.new(
|
10
|
+
command_type: Temporal::Api::Enums::V1::CommandType::COMMAND_TYPE_START_CHILD_WORKFLOW_EXECUTION,
|
11
|
+
start_child_workflow_execution_command_attributes:
|
12
|
+
Temporal::Api::Decision::V1::StartChildWorkflowExecutionCommandAttributes.new(
|
13
|
+
namespace: object.namespace,
|
14
|
+
workflow_id: object.workflow_id.to_s,
|
15
|
+
workflow_type: Temporal::Api::Common::V1::WorkflowType.new(name: object.workflow_type),
|
16
|
+
task_queue: Temporal::Api::TaskQueue::V1::TaskQueue.new(name: object.task_queue),
|
17
|
+
input: Payload.new(object.input).to_proto,
|
18
|
+
workflow_execution_timeout: object.timeouts[:execution],
|
19
|
+
workflow_task_timeout: object.timeouts[:task],
|
20
|
+
retry_policy: serialize_retry_policy(object.retry_policy),
|
21
|
+
header: serialize_headers(object.headers)
|
22
|
+
)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def serialize_retry_policy(retry_policy)
|
29
|
+
return unless retry_policy
|
30
|
+
|
31
|
+
non_retriable_errors = Array(retry_policy.non_retriable_errors).map(&:name)
|
32
|
+
options = {
|
33
|
+
initial_interval: retry_policy.interval,
|
34
|
+
backoff_coefficient: retry_policy.backoff,
|
35
|
+
maximum_interval: retry_policy.max_interval,
|
36
|
+
maximum_attempts: retry_policy.max_attempts,
|
37
|
+
non_retriable_error_reasons: non_retriable_errors,
|
38
|
+
}.compact
|
39
|
+
|
40
|
+
Temporal::Api::Common::V1::RetryPolicy.new(options)
|
41
|
+
end
|
42
|
+
|
43
|
+
def serialize_headers(headers)
|
44
|
+
return unless headers
|
45
|
+
|
46
|
+
Temporal::Api::Common::V1::Header.new(fields: object.headers)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'temporal/client/serializer/base'
|
2
|
+
|
3
|
+
module Temporal
|
4
|
+
module Client
|
5
|
+
module Serializer
|
6
|
+
class StartTimer < Base
|
7
|
+
def to_proto
|
8
|
+
Temporal::Api::Decision::V1::Command.new(
|
9
|
+
command_type: Temporal::Api::Enums::V1::CommandType::COMMAND_TYPE_START_TIMER,
|
10
|
+
start_timer_command_attributes:
|
11
|
+
Temporal::Api::Decision::V1::StartTimerCommandAttributes.new(
|
12
|
+
timer_id: object.timer_id.to_s,
|
13
|
+
start_to_fire_timeout: object.timeout
|
14
|
+
)
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'temporal/retry_policy'
|
2
|
+
|
3
|
+
module Temporal
|
4
|
+
module Concerns
|
5
|
+
module Executable
|
6
|
+
def namespace(*args)
|
7
|
+
return @namespace if args.empty?
|
8
|
+
@namespace = args.first
|
9
|
+
end
|
10
|
+
|
11
|
+
def task_queue(*args)
|
12
|
+
return @task_queue if args.empty?
|
13
|
+
@task_queue = args.first
|
14
|
+
end
|
15
|
+
|
16
|
+
def task_list(*args)
|
17
|
+
task_queue(*args)
|
18
|
+
end
|
19
|
+
|
20
|
+
def retry_policy(*args)
|
21
|
+
return @retry_policy if args.empty?
|
22
|
+
@retry_policy = Temporal::RetryPolicy.new(args.first)
|
23
|
+
@retry_policy.validate!
|
24
|
+
end
|
25
|
+
|
26
|
+
def timeouts(*args)
|
27
|
+
return @timeouts if args.empty?
|
28
|
+
@timeouts = args.first
|
29
|
+
end
|
30
|
+
|
31
|
+
def headers(*args)
|
32
|
+
return @headers if args.empty?
|
33
|
+
@headers = args.first
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'dry-struct'
|
2
|
+
require 'temporal/types'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
module Concerns
|
6
|
+
module Typed
|
7
|
+
def self.included(base)
|
8
|
+
base.extend ClassMethods
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
attr_reader :input_class
|
13
|
+
|
14
|
+
def execute_in_context(context, input)
|
15
|
+
input = input_class[*input] if input_class
|
16
|
+
|
17
|
+
super(context, input)
|
18
|
+
end
|
19
|
+
|
20
|
+
def input(klass = nil, &block)
|
21
|
+
if klass
|
22
|
+
unless klass.is_a?(Dry::Types::Type)
|
23
|
+
raise 'Unsupported input class. Use one of the provided Temporal::Types'
|
24
|
+
end
|
25
|
+
@input_class = klass
|
26
|
+
else
|
27
|
+
@input_class = generate_struct
|
28
|
+
@input_class.instance_eval(&block)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def generate_struct
|
35
|
+
Class.new(Dry::Struct::Value) { transform_keys(&:to_sym) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'temporal/metrics_adapters/null'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
class Configuration
|
6
|
+
attr_reader :timeouts
|
7
|
+
attr_accessor :client_type, :host, :port, :logger, :metrics_adapter, :namespace, :task_queue, :headers
|
8
|
+
|
9
|
+
DEFAULT_TIMEOUTS = {
|
10
|
+
execution: 60, # End-to-end workflow time
|
11
|
+
task: 10, # Workflow task processing time
|
12
|
+
schedule_to_close: nil, # End-to-end activity time (default: schedule_to_start + start_to_close)
|
13
|
+
schedule_to_start: 10, # Queue time for an activity
|
14
|
+
start_to_close: 30, # Time spent processing an activity
|
15
|
+
heartbeat: nil # Max time between heartbeats (off by default)
|
16
|
+
}.freeze
|
17
|
+
|
18
|
+
DEFAULT_HEADERS = {}.freeze
|
19
|
+
DEFAULT_NAMESPACE = 'default-namespace'.freeze
|
20
|
+
DEFAULT_TASK_QUEUE = 'default-task-queue'.freeze
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
@client_type = :grpc
|
24
|
+
@logger = Logger.new(STDOUT, progname: 'temporal_client')
|
25
|
+
@metrics_adapter = MetricsAdapters::Null.new
|
26
|
+
@timeouts = DEFAULT_TIMEOUTS
|
27
|
+
@namespace = DEFAULT_NAMESPACE
|
28
|
+
@task_queue = DEFAULT_TASK_QUEUE
|
29
|
+
@headers = DEFAULT_HEADERS
|
30
|
+
end
|
31
|
+
|
32
|
+
def task_list
|
33
|
+
@task_queue
|
34
|
+
end
|
35
|
+
|
36
|
+
def task_list=(name)
|
37
|
+
self.task_queue = name
|
38
|
+
end
|
39
|
+
|
40
|
+
def timeouts=(new_timeouts)
|
41
|
+
@timeouts = DEFAULT_TIMEOUTS.merge(new_timeouts)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|