amit-temporalio 0.3.0-x86_64-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.
Files changed (175) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +2 -0
  3. data/Gemfile +23 -0
  4. data/Rakefile +101 -0
  5. data/lib/temporalio/activity/complete_async_error.rb +11 -0
  6. data/lib/temporalio/activity/context.rb +116 -0
  7. data/lib/temporalio/activity/definition.rb +189 -0
  8. data/lib/temporalio/activity/info.rb +64 -0
  9. data/lib/temporalio/activity.rb +12 -0
  10. data/lib/temporalio/api/activity/v1/message.rb +25 -0
  11. data/lib/temporalio/api/batch/v1/message.rb +31 -0
  12. data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
  13. data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +126 -0
  14. data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +25 -0
  15. data/lib/temporalio/api/cloud/cloudservice.rb +3 -0
  16. data/lib/temporalio/api/cloud/identity/v1/message.rb +41 -0
  17. data/lib/temporalio/api/cloud/namespace/v1/message.rb +42 -0
  18. data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
  19. data/lib/temporalio/api/cloud/operation/v1/message.rb +28 -0
  20. data/lib/temporalio/api/cloud/region/v1/message.rb +24 -0
  21. data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
  22. data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
  23. data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -0
  24. data/lib/temporalio/api/command/v1/message.rb +46 -0
  25. data/lib/temporalio/api/common/v1/grpc_status.rb +23 -0
  26. data/lib/temporalio/api/common/v1/message.rb +47 -0
  27. data/lib/temporalio/api/enums/v1/batch_operation.rb +22 -0
  28. data/lib/temporalio/api/enums/v1/command_type.rb +21 -0
  29. data/lib/temporalio/api/enums/v1/common.rb +26 -0
  30. data/lib/temporalio/api/enums/v1/event_type.rb +21 -0
  31. data/lib/temporalio/api/enums/v1/failed_cause.rb +26 -0
  32. data/lib/temporalio/api/enums/v1/namespace.rb +23 -0
  33. data/lib/temporalio/api/enums/v1/query.rb +22 -0
  34. data/lib/temporalio/api/enums/v1/reset.rb +23 -0
  35. data/lib/temporalio/api/enums/v1/schedule.rb +21 -0
  36. data/lib/temporalio/api/enums/v1/task_queue.rb +25 -0
  37. data/lib/temporalio/api/enums/v1/update.rb +22 -0
  38. data/lib/temporalio/api/enums/v1/workflow.rb +30 -0
  39. data/lib/temporalio/api/errordetails/v1/message.rb +42 -0
  40. data/lib/temporalio/api/export/v1/message.rb +24 -0
  41. data/lib/temporalio/api/failure/v1/message.rb +35 -0
  42. data/lib/temporalio/api/filter/v1/message.rb +27 -0
  43. data/lib/temporalio/api/history/v1/message.rb +90 -0
  44. data/lib/temporalio/api/namespace/v1/message.rb +31 -0
  45. data/lib/temporalio/api/nexus/v1/message.rb +40 -0
  46. data/lib/temporalio/api/operatorservice/v1/request_response.rb +49 -0
  47. data/lib/temporalio/api/operatorservice/v1/service.rb +23 -0
  48. data/lib/temporalio/api/operatorservice.rb +3 -0
  49. data/lib/temporalio/api/payload_visitor.rb +1513 -0
  50. data/lib/temporalio/api/protocol/v1/message.rb +23 -0
  51. data/lib/temporalio/api/query/v1/message.rb +27 -0
  52. data/lib/temporalio/api/replication/v1/message.rb +26 -0
  53. data/lib/temporalio/api/schedule/v1/message.rb +43 -0
  54. data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +25 -0
  55. data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +21 -0
  56. data/lib/temporalio/api/sdk/v1/user_metadata.rb +23 -0
  57. data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +23 -0
  58. data/lib/temporalio/api/taskqueue/v1/message.rb +45 -0
  59. data/lib/temporalio/api/testservice/v1/request_response.rb +31 -0
  60. data/lib/temporalio/api/testservice/v1/service.rb +23 -0
  61. data/lib/temporalio/api/update/v1/message.rb +33 -0
  62. data/lib/temporalio/api/version/v1/message.rb +26 -0
  63. data/lib/temporalio/api/workflow/v1/message.rb +43 -0
  64. data/lib/temporalio/api/workflowservice/v1/request_response.rb +204 -0
  65. data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
  66. data/lib/temporalio/api/workflowservice.rb +3 -0
  67. data/lib/temporalio/api.rb +14 -0
  68. data/lib/temporalio/cancellation.rb +170 -0
  69. data/lib/temporalio/client/activity_id_reference.rb +32 -0
  70. data/lib/temporalio/client/async_activity_handle.rb +85 -0
  71. data/lib/temporalio/client/connection/cloud_service.rb +726 -0
  72. data/lib/temporalio/client/connection/operator_service.rb +201 -0
  73. data/lib/temporalio/client/connection/service.rb +42 -0
  74. data/lib/temporalio/client/connection/test_service.rb +111 -0
  75. data/lib/temporalio/client/connection/workflow_service.rb +1041 -0
  76. data/lib/temporalio/client/connection.rb +316 -0
  77. data/lib/temporalio/client/interceptor.rb +416 -0
  78. data/lib/temporalio/client/schedule.rb +967 -0
  79. data/lib/temporalio/client/schedule_handle.rb +126 -0
  80. data/lib/temporalio/client/workflow_execution.rb +100 -0
  81. data/lib/temporalio/client/workflow_execution_count.rb +36 -0
  82. data/lib/temporalio/client/workflow_execution_status.rb +18 -0
  83. data/lib/temporalio/client/workflow_handle.rb +389 -0
  84. data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
  85. data/lib/temporalio/client/workflow_update_handle.rb +65 -0
  86. data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
  87. data/lib/temporalio/client.rb +484 -0
  88. data/lib/temporalio/common_enums.rb +41 -0
  89. data/lib/temporalio/converters/data_converter.rb +99 -0
  90. data/lib/temporalio/converters/failure_converter.rb +202 -0
  91. data/lib/temporalio/converters/payload_codec.rb +26 -0
  92. data/lib/temporalio/converters/payload_converter/binary_null.rb +34 -0
  93. data/lib/temporalio/converters/payload_converter/binary_plain.rb +35 -0
  94. data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +42 -0
  95. data/lib/temporalio/converters/payload_converter/composite.rb +66 -0
  96. data/lib/temporalio/converters/payload_converter/encoding.rb +35 -0
  97. data/lib/temporalio/converters/payload_converter/json_plain.rb +44 -0
  98. data/lib/temporalio/converters/payload_converter/json_protobuf.rb +41 -0
  99. data/lib/temporalio/converters/payload_converter.rb +71 -0
  100. data/lib/temporalio/converters/raw_value.rb +20 -0
  101. data/lib/temporalio/converters.rb +9 -0
  102. data/lib/temporalio/error/failure.rb +219 -0
  103. data/lib/temporalio/error.rb +155 -0
  104. data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +34 -0
  105. data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +31 -0
  106. data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +33 -0
  107. data/lib/temporalio/internal/bridge/api/common/common.rb +26 -0
  108. data/lib/temporalio/internal/bridge/api/core_interface.rb +40 -0
  109. data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
  110. data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
  111. data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +56 -0
  112. data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +57 -0
  113. data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +30 -0
  114. data/lib/temporalio/internal/bridge/api.rb +3 -0
  115. data/lib/temporalio/internal/bridge/client.rb +95 -0
  116. data/lib/temporalio/internal/bridge/runtime.rb +53 -0
  117. data/lib/temporalio/internal/bridge/temporalio_bridge.bundle +0 -0
  118. data/lib/temporalio/internal/bridge/testing.rb +66 -0
  119. data/lib/temporalio/internal/bridge/worker.rb +85 -0
  120. data/lib/temporalio/internal/bridge.rb +36 -0
  121. data/lib/temporalio/internal/client/implementation.rb +700 -0
  122. data/lib/temporalio/internal/metric.rb +122 -0
  123. data/lib/temporalio/internal/proto_utils.rb +133 -0
  124. data/lib/temporalio/internal/worker/activity_worker.rb +376 -0
  125. data/lib/temporalio/internal/worker/multi_runner.rb +213 -0
  126. data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
  127. data/lib/temporalio/internal/worker/workflow_instance/context.rb +333 -0
  128. data/lib/temporalio/internal/worker/workflow_instance/details.rb +44 -0
  129. data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
  130. data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
  131. data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
  132. data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
  133. data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
  134. data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
  135. data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +415 -0
  136. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
  137. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
  138. data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +163 -0
  139. data/lib/temporalio/internal/worker/workflow_instance.rb +730 -0
  140. data/lib/temporalio/internal/worker/workflow_worker.rb +236 -0
  141. data/lib/temporalio/internal.rb +7 -0
  142. data/lib/temporalio/metric.rb +109 -0
  143. data/lib/temporalio/retry_policy.rb +74 -0
  144. data/lib/temporalio/runtime.rb +314 -0
  145. data/lib/temporalio/scoped_logger.rb +96 -0
  146. data/lib/temporalio/search_attributes.rb +343 -0
  147. data/lib/temporalio/testing/activity_environment.rb +136 -0
  148. data/lib/temporalio/testing/workflow_environment.rb +383 -0
  149. data/lib/temporalio/testing.rb +10 -0
  150. data/lib/temporalio/version.rb +5 -0
  151. data/lib/temporalio/worker/activity_executor/fiber.rb +49 -0
  152. data/lib/temporalio/worker/activity_executor/thread_pool.rb +46 -0
  153. data/lib/temporalio/worker/activity_executor.rb +55 -0
  154. data/lib/temporalio/worker/interceptor.rb +362 -0
  155. data/lib/temporalio/worker/thread_pool.rb +237 -0
  156. data/lib/temporalio/worker/tuner.rb +189 -0
  157. data/lib/temporalio/worker/workflow_executor/thread_pool.rb +230 -0
  158. data/lib/temporalio/worker/workflow_executor.rb +26 -0
  159. data/lib/temporalio/worker/workflow_replayer.rb +343 -0
  160. data/lib/temporalio/worker.rb +569 -0
  161. data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
  162. data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
  163. data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
  164. data/lib/temporalio/workflow/definition.rb +566 -0
  165. data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
  166. data/lib/temporalio/workflow/future.rb +151 -0
  167. data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
  168. data/lib/temporalio/workflow/info.rb +82 -0
  169. data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
  170. data/lib/temporalio/workflow/update_info.rb +20 -0
  171. data/lib/temporalio/workflow.rb +529 -0
  172. data/lib/temporalio/workflow_history.rb +47 -0
  173. data/lib/temporalio.rb +11 -0
  174. data/temporalio.gemspec +28 -0
  175. 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