amit-temporalio 0.3.0-arm64-darwin
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/.yardopts +2 -0
- data/Gemfile +23 -0
- data/Rakefile +101 -0
- data/lib/temporalio/activity/complete_async_error.rb +11 -0
- data/lib/temporalio/activity/context.rb +116 -0
- data/lib/temporalio/activity/definition.rb +189 -0
- data/lib/temporalio/activity/info.rb +64 -0
- data/lib/temporalio/activity.rb +12 -0
- data/lib/temporalio/api/activity/v1/message.rb +25 -0
- data/lib/temporalio/api/batch/v1/message.rb +31 -0
- data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
- data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +126 -0
- data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +25 -0
- data/lib/temporalio/api/cloud/cloudservice.rb +3 -0
- data/lib/temporalio/api/cloud/identity/v1/message.rb +41 -0
- data/lib/temporalio/api/cloud/namespace/v1/message.rb +42 -0
- data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
- data/lib/temporalio/api/cloud/operation/v1/message.rb +28 -0
- data/lib/temporalio/api/cloud/region/v1/message.rb +24 -0
- data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
- data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
- data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -0
- data/lib/temporalio/api/command/v1/message.rb +46 -0
- data/lib/temporalio/api/common/v1/grpc_status.rb +23 -0
- data/lib/temporalio/api/common/v1/message.rb +47 -0
- data/lib/temporalio/api/enums/v1/batch_operation.rb +22 -0
- data/lib/temporalio/api/enums/v1/command_type.rb +21 -0
- data/lib/temporalio/api/enums/v1/common.rb +26 -0
- data/lib/temporalio/api/enums/v1/event_type.rb +21 -0
- data/lib/temporalio/api/enums/v1/failed_cause.rb +26 -0
- data/lib/temporalio/api/enums/v1/namespace.rb +23 -0
- data/lib/temporalio/api/enums/v1/query.rb +22 -0
- data/lib/temporalio/api/enums/v1/reset.rb +23 -0
- data/lib/temporalio/api/enums/v1/schedule.rb +21 -0
- data/lib/temporalio/api/enums/v1/task_queue.rb +25 -0
- data/lib/temporalio/api/enums/v1/update.rb +22 -0
- data/lib/temporalio/api/enums/v1/workflow.rb +30 -0
- data/lib/temporalio/api/errordetails/v1/message.rb +42 -0
- data/lib/temporalio/api/export/v1/message.rb +24 -0
- data/lib/temporalio/api/failure/v1/message.rb +35 -0
- data/lib/temporalio/api/filter/v1/message.rb +27 -0
- data/lib/temporalio/api/history/v1/message.rb +90 -0
- data/lib/temporalio/api/namespace/v1/message.rb +31 -0
- data/lib/temporalio/api/nexus/v1/message.rb +40 -0
- data/lib/temporalio/api/operatorservice/v1/request_response.rb +49 -0
- data/lib/temporalio/api/operatorservice/v1/service.rb +23 -0
- data/lib/temporalio/api/operatorservice.rb +3 -0
- data/lib/temporalio/api/payload_visitor.rb +1513 -0
- data/lib/temporalio/api/protocol/v1/message.rb +23 -0
- data/lib/temporalio/api/query/v1/message.rb +27 -0
- data/lib/temporalio/api/replication/v1/message.rb +26 -0
- data/lib/temporalio/api/schedule/v1/message.rb +43 -0
- data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +25 -0
- data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +21 -0
- data/lib/temporalio/api/sdk/v1/user_metadata.rb +23 -0
- data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +23 -0
- data/lib/temporalio/api/taskqueue/v1/message.rb +45 -0
- data/lib/temporalio/api/testservice/v1/request_response.rb +31 -0
- data/lib/temporalio/api/testservice/v1/service.rb +23 -0
- data/lib/temporalio/api/update/v1/message.rb +33 -0
- data/lib/temporalio/api/version/v1/message.rb +26 -0
- data/lib/temporalio/api/workflow/v1/message.rb +43 -0
- data/lib/temporalio/api/workflowservice/v1/request_response.rb +204 -0
- data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
- data/lib/temporalio/api/workflowservice.rb +3 -0
- data/lib/temporalio/api.rb +14 -0
- data/lib/temporalio/cancellation.rb +170 -0
- data/lib/temporalio/client/activity_id_reference.rb +32 -0
- data/lib/temporalio/client/async_activity_handle.rb +85 -0
- data/lib/temporalio/client/connection/cloud_service.rb +726 -0
- data/lib/temporalio/client/connection/operator_service.rb +201 -0
- data/lib/temporalio/client/connection/service.rb +42 -0
- data/lib/temporalio/client/connection/test_service.rb +111 -0
- data/lib/temporalio/client/connection/workflow_service.rb +1041 -0
- data/lib/temporalio/client/connection.rb +316 -0
- data/lib/temporalio/client/interceptor.rb +416 -0
- data/lib/temporalio/client/schedule.rb +967 -0
- data/lib/temporalio/client/schedule_handle.rb +126 -0
- data/lib/temporalio/client/workflow_execution.rb +100 -0
- data/lib/temporalio/client/workflow_execution_count.rb +36 -0
- data/lib/temporalio/client/workflow_execution_status.rb +18 -0
- data/lib/temporalio/client/workflow_handle.rb +389 -0
- data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
- data/lib/temporalio/client/workflow_update_handle.rb +65 -0
- data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
- data/lib/temporalio/client.rb +484 -0
- data/lib/temporalio/common_enums.rb +41 -0
- data/lib/temporalio/converters/data_converter.rb +99 -0
- data/lib/temporalio/converters/failure_converter.rb +202 -0
- data/lib/temporalio/converters/payload_codec.rb +26 -0
- data/lib/temporalio/converters/payload_converter/binary_null.rb +34 -0
- data/lib/temporalio/converters/payload_converter/binary_plain.rb +35 -0
- data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +42 -0
- data/lib/temporalio/converters/payload_converter/composite.rb +66 -0
- data/lib/temporalio/converters/payload_converter/encoding.rb +35 -0
- data/lib/temporalio/converters/payload_converter/json_plain.rb +44 -0
- data/lib/temporalio/converters/payload_converter/json_protobuf.rb +41 -0
- data/lib/temporalio/converters/payload_converter.rb +71 -0
- data/lib/temporalio/converters/raw_value.rb +20 -0
- data/lib/temporalio/converters.rb +9 -0
- data/lib/temporalio/error/failure.rb +219 -0
- data/lib/temporalio/error.rb +155 -0
- data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +34 -0
- data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +31 -0
- data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +33 -0
- data/lib/temporalio/internal/bridge/api/common/common.rb +26 -0
- data/lib/temporalio/internal/bridge/api/core_interface.rb +40 -0
- data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
- data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
- data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +56 -0
- data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +57 -0
- data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +30 -0
- data/lib/temporalio/internal/bridge/api.rb +3 -0
- data/lib/temporalio/internal/bridge/client.rb +95 -0
- data/lib/temporalio/internal/bridge/runtime.rb +53 -0
- data/lib/temporalio/internal/bridge/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/testing.rb +66 -0
- data/lib/temporalio/internal/bridge/worker.rb +85 -0
- data/lib/temporalio/internal/bridge.rb +36 -0
- data/lib/temporalio/internal/client/implementation.rb +700 -0
- data/lib/temporalio/internal/metric.rb +122 -0
- data/lib/temporalio/internal/proto_utils.rb +133 -0
- data/lib/temporalio/internal/worker/activity_worker.rb +376 -0
- data/lib/temporalio/internal/worker/multi_runner.rb +213 -0
- data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
- data/lib/temporalio/internal/worker/workflow_instance/context.rb +333 -0
- data/lib/temporalio/internal/worker/workflow_instance/details.rb +44 -0
- data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
- data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
- data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
- data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
- data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +415 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
- data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +163 -0
- data/lib/temporalio/internal/worker/workflow_instance.rb +730 -0
- data/lib/temporalio/internal/worker/workflow_worker.rb +236 -0
- data/lib/temporalio/internal.rb +7 -0
- data/lib/temporalio/metric.rb +109 -0
- data/lib/temporalio/retry_policy.rb +74 -0
- data/lib/temporalio/runtime.rb +314 -0
- data/lib/temporalio/scoped_logger.rb +96 -0
- data/lib/temporalio/search_attributes.rb +343 -0
- data/lib/temporalio/testing/activity_environment.rb +136 -0
- data/lib/temporalio/testing/workflow_environment.rb +383 -0
- data/lib/temporalio/testing.rb +10 -0
- data/lib/temporalio/version.rb +5 -0
- data/lib/temporalio/worker/activity_executor/fiber.rb +49 -0
- data/lib/temporalio/worker/activity_executor/thread_pool.rb +46 -0
- data/lib/temporalio/worker/activity_executor.rb +55 -0
- data/lib/temporalio/worker/interceptor.rb +362 -0
- data/lib/temporalio/worker/thread_pool.rb +237 -0
- data/lib/temporalio/worker/tuner.rb +189 -0
- data/lib/temporalio/worker/workflow_executor/thread_pool.rb +230 -0
- data/lib/temporalio/worker/workflow_executor.rb +26 -0
- data/lib/temporalio/worker/workflow_replayer.rb +343 -0
- data/lib/temporalio/worker.rb +569 -0
- data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
- data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
- data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
- data/lib/temporalio/workflow/definition.rb +566 -0
- data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
- data/lib/temporalio/workflow/future.rb +151 -0
- data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
- data/lib/temporalio/workflow/info.rb +82 -0
- data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
- data/lib/temporalio/workflow/update_info.rb +20 -0
- data/lib/temporalio/workflow.rb +529 -0
- data/lib/temporalio/workflow_history.rb +47 -0
- data/lib/temporalio.rb +11 -0
- data/temporalio.gemspec +28 -0
- metadata +236 -0
@@ -0,0 +1,314 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'temporalio/internal/bridge'
|
4
|
+
require 'temporalio/internal/bridge/runtime'
|
5
|
+
require 'temporalio/internal/metric'
|
6
|
+
require 'temporalio/metric'
|
7
|
+
|
8
|
+
module Temporalio
|
9
|
+
# Runtime for Temporal Ruby SDK.
|
10
|
+
#
|
11
|
+
# Only one global {Runtime} needs to exist. Users are encouraged to use {default}. To configure it, create a runtime
|
12
|
+
# before any clients are created, and set it via {default=}. Every time a new runtime is created, a new internal Rust
|
13
|
+
# thread pool is created.
|
14
|
+
class Runtime
|
15
|
+
TelemetryOptions = Data.define(
|
16
|
+
:logging,
|
17
|
+
:metrics
|
18
|
+
)
|
19
|
+
|
20
|
+
# Telemetry options for the runtime.
|
21
|
+
#
|
22
|
+
# @!attribute logging
|
23
|
+
# @return [LoggingOptions, nil] Logging options, default is new {LoggingOptions} with no parameters. Can be set
|
24
|
+
# to nil to disable logging.
|
25
|
+
# @!attribute metrics
|
26
|
+
# @return [MetricsOptions, nil] Metrics options.
|
27
|
+
class TelemetryOptions
|
28
|
+
# Create telemetry options.
|
29
|
+
#
|
30
|
+
# @param logging [LoggingOptions, nil] Logging options, default is new {LoggingOptions} with no parameters. Can be
|
31
|
+
# set to nil to disable logging.
|
32
|
+
# @param metrics [MetricsOptions, nil] Metrics options.
|
33
|
+
def initialize(logging: LoggingOptions.new, metrics: nil)
|
34
|
+
super
|
35
|
+
end
|
36
|
+
|
37
|
+
# @!visibility private
|
38
|
+
def _to_bridge
|
39
|
+
# @type self: TelemetryOptions
|
40
|
+
Internal::Bridge::Runtime::TelemetryOptions.new(
|
41
|
+
logging: logging&._to_bridge,
|
42
|
+
metrics: metrics&._to_bridge
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
LoggingOptions = Data.define(
|
48
|
+
:log_filter
|
49
|
+
# TODO(cretz): forward_to
|
50
|
+
)
|
51
|
+
|
52
|
+
# Logging options for runtime telemetry.
|
53
|
+
#
|
54
|
+
# @!attribute log_filter
|
55
|
+
# @return [LoggingFilterOptions, String] Logging filter for Core, default is new {LoggingFilterOptions} with no
|
56
|
+
# parameters.
|
57
|
+
class LoggingOptions
|
58
|
+
# Create logging options
|
59
|
+
#
|
60
|
+
# @param log_filter [LoggingFilterOptions, String] Logging filter for Core.
|
61
|
+
def initialize(log_filter: LoggingFilterOptions.new)
|
62
|
+
super
|
63
|
+
end
|
64
|
+
|
65
|
+
# @!visibility private
|
66
|
+
def _to_bridge
|
67
|
+
# @type self: LoggingOptions
|
68
|
+
Internal::Bridge::Runtime::LoggingOptions.new(
|
69
|
+
log_filter: if log_filter.is_a?(String)
|
70
|
+
log_filter
|
71
|
+
elsif log_filter.is_a?(LoggingFilterOptions)
|
72
|
+
log_filter._to_bridge
|
73
|
+
else
|
74
|
+
raise 'Log filter must be string or LoggingFilterOptions'
|
75
|
+
end
|
76
|
+
)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
LoggingFilterOptions = Data.define(
|
81
|
+
:core_level,
|
82
|
+
:other_level
|
83
|
+
)
|
84
|
+
|
85
|
+
# Logging filter options for Core.
|
86
|
+
#
|
87
|
+
# @!attribute core_level
|
88
|
+
# @return ['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR'] Log level for Core log messages.
|
89
|
+
# @!attribute other_level
|
90
|
+
# @return ['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR'] Log level for other Rust log messages.
|
91
|
+
class LoggingFilterOptions
|
92
|
+
# Create logging filter options.
|
93
|
+
#
|
94
|
+
# @param core_level ['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR'] Log level for Core log messages.
|
95
|
+
# @!attribute other_level ['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR'] Log level for other Rust log messages.
|
96
|
+
def initialize(core_level: 'WARN', other_level: 'ERROR')
|
97
|
+
super
|
98
|
+
end
|
99
|
+
|
100
|
+
# @!visibility private
|
101
|
+
def _to_bridge
|
102
|
+
# @type self: LoggingFilterOptions
|
103
|
+
"#{other_level},temporal_sdk_core=#{core_level},temporal_client=#{core_level},temporal_sdk=#{core_level}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
MetricsOptions = Data.define(
|
108
|
+
:opentelemetry,
|
109
|
+
:prometheus,
|
110
|
+
:attach_service_name,
|
111
|
+
:global_tags,
|
112
|
+
:metric_prefix
|
113
|
+
)
|
114
|
+
|
115
|
+
# Metrics options for runtime telemetry. Either {opentelemetry} or {prometheus} required, but not both.
|
116
|
+
#
|
117
|
+
# @!attribute opentelemetry
|
118
|
+
# @return [OpenTelemetryMetricsOptions, nil] OpenTelemetry options if using OpenTelemetry. This is mutually
|
119
|
+
# exclusive with +prometheus+.
|
120
|
+
# @!attribute prometheus
|
121
|
+
# @return [PrometheusMetricsOptions, nil] Prometheus options if using Prometheus. This is mutually exclusive with
|
122
|
+
# +opentelemetry+.
|
123
|
+
# @!attribute attach_service_name
|
124
|
+
# @return [Boolean] Whether to put the service_name on every metric.
|
125
|
+
# @!attribute global_tags
|
126
|
+
# @return [Hash<String, String>, nil] Resource tags to be applied to all metrics.
|
127
|
+
# @!attribute metric_prefix
|
128
|
+
# @return [String, nil] Prefix to put on every Temporal metric. If unset, defaults to `temporal_`.
|
129
|
+
class MetricsOptions
|
130
|
+
# Create metrics options. Either `opentelemetry` or `prometheus` required, but not both.
|
131
|
+
#
|
132
|
+
# @param opentelemetry [OpenTelemetryMetricsOptions, nil] OpenTelemetry options if using OpenTelemetry. This is
|
133
|
+
# mutually exclusive with `prometheus`.
|
134
|
+
# @param prometheus [PrometheusMetricsOptions, nil] Prometheus options if using Prometheus. This is mutually
|
135
|
+
# exclusive with `opentelemetry`.
|
136
|
+
# @param attach_service_name [Boolean] Whether to put the service_name on every metric.
|
137
|
+
# @param global_tags [Hash<String, String>, nil] Resource tags to be applied to all metrics.
|
138
|
+
# @param metric_prefix [String, nil] Prefix to put on every Temporal metric. If unset, defaults to `temporal_`.
|
139
|
+
def initialize(
|
140
|
+
opentelemetry: nil,
|
141
|
+
prometheus: nil,
|
142
|
+
attach_service_name: true,
|
143
|
+
global_tags: nil,
|
144
|
+
metric_prefix: nil
|
145
|
+
)
|
146
|
+
super
|
147
|
+
end
|
148
|
+
|
149
|
+
# @!visibility private
|
150
|
+
def _to_bridge
|
151
|
+
# @type self: MetricsOptions
|
152
|
+
Internal::Bridge::Runtime::MetricsOptions.new(
|
153
|
+
opentelemetry: opentelemetry&._to_bridge,
|
154
|
+
prometheus: prometheus&._to_bridge,
|
155
|
+
attach_service_name:,
|
156
|
+
global_tags:,
|
157
|
+
metric_prefix:
|
158
|
+
)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
OpenTelemetryMetricsOptions = Data.define(
|
163
|
+
:url,
|
164
|
+
:headers,
|
165
|
+
:metric_periodicity,
|
166
|
+
:metric_temporality,
|
167
|
+
:durations_as_seconds
|
168
|
+
)
|
169
|
+
|
170
|
+
# Options for exporting metrics to OpenTelemetry.
|
171
|
+
#
|
172
|
+
# @!attribute url
|
173
|
+
# @return [String] URL for OpenTelemetry endpoint.
|
174
|
+
# @!attribute headers
|
175
|
+
# @return [Hash<String, String>, nil] Headers for OpenTelemetry endpoint.
|
176
|
+
# @!attribute metric_periodicity
|
177
|
+
# @return [Float, nil] How frequently metrics should be exported, unset uses internal default.
|
178
|
+
# @!attribute metric_temporality
|
179
|
+
# @return [MetricTemporality] How frequently metrics should be exported, default is
|
180
|
+
# {MetricTemporality::CUMULATIVE}.
|
181
|
+
# @!attribute durations_as_seconds
|
182
|
+
# @return [Boolean] Whether to use float seconds instead of integer milliseconds for durations, default is
|
183
|
+
# +false+.
|
184
|
+
class OpenTelemetryMetricsOptions
|
185
|
+
# OpenTelemetry metric temporality.
|
186
|
+
module MetricTemporality
|
187
|
+
CUMULATIVE = 1
|
188
|
+
DELTA = 2
|
189
|
+
end
|
190
|
+
|
191
|
+
# Create OpenTelemetry options.
|
192
|
+
#
|
193
|
+
# @param url [String] URL for OpenTelemetry endpoint.
|
194
|
+
# @param headers [Hash<String, String>, nil] Headers for OpenTelemetry endpoint.
|
195
|
+
# @param metric_periodicity [Float, nil] How frequently metrics should be exported, unset uses internal default.
|
196
|
+
# @param metric_temporality [MetricTemporality] How frequently metrics should be exported.
|
197
|
+
# @param durations_as_seconds [Boolean] Whether to use float seconds instead of integer milliseconds for
|
198
|
+
# durations.
|
199
|
+
def initialize(
|
200
|
+
url:,
|
201
|
+
headers: nil,
|
202
|
+
metric_periodicity: nil,
|
203
|
+
metric_temporality: MetricTemporality::CUMULATIVE,
|
204
|
+
durations_as_seconds: false
|
205
|
+
)
|
206
|
+
super
|
207
|
+
end
|
208
|
+
|
209
|
+
# @!visibility private
|
210
|
+
def _to_bridge
|
211
|
+
# @type self: OpenTelemetryMetricsOptions
|
212
|
+
Internal::Bridge::Runtime::OpenTelemetryMetricsOptions.new(
|
213
|
+
url:,
|
214
|
+
headers:,
|
215
|
+
metric_periodicity:,
|
216
|
+
metric_temporality_delta: case metric_temporality
|
217
|
+
when MetricTemporality::CUMULATIVE then false
|
218
|
+
when MetricTemporality::DELTA then true
|
219
|
+
else raise 'Unrecognized metric temporality'
|
220
|
+
end,
|
221
|
+
durations_as_seconds:
|
222
|
+
)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
PrometheusMetricsOptions = Data.define(
|
227
|
+
:bind_address,
|
228
|
+
:counters_total_suffix,
|
229
|
+
:unit_suffix,
|
230
|
+
:durations_as_seconds
|
231
|
+
)
|
232
|
+
|
233
|
+
# Options for exporting metrics to Prometheus.
|
234
|
+
#
|
235
|
+
# @!attribute bind_address
|
236
|
+
# @return [String] Address to bind to for Prometheus endpoint.
|
237
|
+
# @!attribute counters_total_suffix
|
238
|
+
# @return [Boolean] If `true`, all counters will include a `_total` suffix.
|
239
|
+
# @!attribute unit_suffix
|
240
|
+
# @return [Boolean] If `true`, all histograms will include the unit in their name as a suffix.
|
241
|
+
# @!attribute durations_as_seconds
|
242
|
+
# @return [Boolean] Whether to use float seconds instead of integer milliseconds for durations.
|
243
|
+
class PrometheusMetricsOptions
|
244
|
+
# Create Prometheus options.
|
245
|
+
#
|
246
|
+
# @param bind_address [String] Address to bind to for Prometheus endpoint.
|
247
|
+
# @param counters_total_suffix [Boolean] If `true`, all counters will include a `_total` suffix.
|
248
|
+
# @param unit_suffix [Boolean] If `true`, all histograms will include the unit in their name as a suffix.
|
249
|
+
# @param durations_as_seconds [Boolean] Whether to use float seconds instead of integer milliseconds for
|
250
|
+
# durations.
|
251
|
+
def initialize(
|
252
|
+
bind_address:,
|
253
|
+
counters_total_suffix: false,
|
254
|
+
unit_suffix: false,
|
255
|
+
durations_as_seconds: false
|
256
|
+
)
|
257
|
+
super
|
258
|
+
end
|
259
|
+
|
260
|
+
# @!visibility private
|
261
|
+
def _to_bridge
|
262
|
+
# @type self: PrometheusMetricsOptions
|
263
|
+
Internal::Bridge::Runtime::PrometheusMetricsOptions.new(
|
264
|
+
bind_address:,
|
265
|
+
counters_total_suffix:,
|
266
|
+
unit_suffix:,
|
267
|
+
durations_as_seconds:
|
268
|
+
)
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
# Default runtime, lazily created upon first access. If needing a different default, make sure it is updated via
|
273
|
+
# {default=} before this is called (either directly or as a parameter to something like {Client}).
|
274
|
+
#
|
275
|
+
# @return [Runtime] Default runtime.
|
276
|
+
def self.default
|
277
|
+
@default ||= Runtime.new
|
278
|
+
end
|
279
|
+
|
280
|
+
# Set the default runtime. Must be called before {default} accessed.
|
281
|
+
#
|
282
|
+
# @param runtime [Runtime] Runtime to set as default.
|
283
|
+
# @raise If default has already been accessed.
|
284
|
+
def self.default=(runtime)
|
285
|
+
raise 'Runtime already set or requested' unless @default.nil?
|
286
|
+
|
287
|
+
@default = runtime
|
288
|
+
end
|
289
|
+
|
290
|
+
# @return [Metric::Meter] Metric meter that can create and record metric values.
|
291
|
+
attr_reader :metric_meter
|
292
|
+
|
293
|
+
# Create new Runtime. For most users, this should only be done once globally. In addition to creating a Rust thread
|
294
|
+
# pool, this also consumes a Ruby thread for its lifetime.
|
295
|
+
#
|
296
|
+
# @param telemetry [TelemetryOptions] Telemetry options to set.
|
297
|
+
def initialize(telemetry: TelemetryOptions.new)
|
298
|
+
@core_runtime = Internal::Bridge::Runtime.new(
|
299
|
+
Internal::Bridge::Runtime::Options.new(telemetry: telemetry._to_bridge)
|
300
|
+
)
|
301
|
+
@metric_meter = Internal::Metric::Meter.create_from_runtime(self) || Metric::Meter.null
|
302
|
+
# We need a thread to run the command loop
|
303
|
+
# TODO(cretz): Is this something users should be concerned about or need control over?
|
304
|
+
Thread.new do
|
305
|
+
@core_runtime.run_command_loop
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
# @!visibility private
|
310
|
+
def _core_runtime
|
311
|
+
@core_runtime
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'delegate'
|
4
|
+
require 'logger'
|
5
|
+
|
6
|
+
module Temporalio
|
7
|
+
# Implementation via delegator to {::Logger} that puts scoped values on the log message and appends them to the log
|
8
|
+
# message.
|
9
|
+
class ScopedLogger < SimpleDelegator
|
10
|
+
# @!attribute scoped_values_getter
|
11
|
+
# @return [Proc, nil] Proc to call to get scoped values when needed.
|
12
|
+
attr_accessor :scoped_values_getter
|
13
|
+
|
14
|
+
# @!attribute scoped_values_getter
|
15
|
+
# @return [Boolean] Whether the scoped value appending is disabled.
|
16
|
+
attr_accessor :disable_scoped_values
|
17
|
+
|
18
|
+
# @see Logger.add
|
19
|
+
def add(severity, message = nil, progname = nil)
|
20
|
+
return true if (severity || Logger::Unknown) < level
|
21
|
+
return super if scoped_values_getter.nil? || @disable_scoped_values
|
22
|
+
|
23
|
+
scoped_values = scoped_values_getter.call
|
24
|
+
return super if scoped_values.nil?
|
25
|
+
|
26
|
+
if message.nil?
|
27
|
+
if block_given?
|
28
|
+
message = yield
|
29
|
+
else
|
30
|
+
message = progname
|
31
|
+
progname = nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
# For exceptions we need to dup and append here, for everything else we
|
35
|
+
# need to delegate to a log message
|
36
|
+
new_message = if message.is_a?(Exception)
|
37
|
+
message.exception("#{message.message} #{scoped_values}")
|
38
|
+
else
|
39
|
+
LogMessage.new(message, scoped_values)
|
40
|
+
end
|
41
|
+
super(severity, new_message, progname)
|
42
|
+
end
|
43
|
+
alias log add
|
44
|
+
|
45
|
+
# @see Logger.debug
|
46
|
+
def debug(progname = nil, &)
|
47
|
+
add(Logger::DEBUG, nil, progname, &)
|
48
|
+
end
|
49
|
+
|
50
|
+
# @see Logger.info
|
51
|
+
def info(progname = nil, &)
|
52
|
+
add(Logger::INFO, nil, progname, &)
|
53
|
+
end
|
54
|
+
|
55
|
+
# @see Logger.warn
|
56
|
+
def warn(progname = nil, &)
|
57
|
+
add(Logger::WARN, nil, progname, &)
|
58
|
+
end
|
59
|
+
|
60
|
+
# @see Logger.error
|
61
|
+
def error(progname = nil, &)
|
62
|
+
add(Logger::ERROR, nil, progname, &)
|
63
|
+
end
|
64
|
+
|
65
|
+
# @see Logger.fatal
|
66
|
+
def fatal(progname = nil, &)
|
67
|
+
add(Logger::FATAL, nil, progname, &)
|
68
|
+
end
|
69
|
+
|
70
|
+
# @see Logger.unknown
|
71
|
+
def unknown(progname = nil, &)
|
72
|
+
add(Logger::UNKNOWN, nil, progname, &)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Scoped log message wrapping original log message.
|
76
|
+
class LogMessage
|
77
|
+
# @return [Object] Original log message.
|
78
|
+
attr_reader :message
|
79
|
+
|
80
|
+
# @return [Object] Scoped values.
|
81
|
+
attr_reader :scoped_values
|
82
|
+
|
83
|
+
# @!visibility private
|
84
|
+
def initialize(message, scoped_values)
|
85
|
+
@message = message
|
86
|
+
@scoped_values = scoped_values
|
87
|
+
end
|
88
|
+
|
89
|
+
# @return [String] Message with scoped values appended.
|
90
|
+
def inspect
|
91
|
+
message_str = message.is_a?(String) ? message : message.inspect
|
92
|
+
"#{message_str} #{scoped_values}"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|