Class: Temporalio::Runtime

Inherits:
Object
  • Object
show all
Defined in:
lib/temporalio/runtime.rb,
lib/temporalio/runtime/metric_buffer.rb

Overview

Runtime for Temporal Ruby SDK.

Only one global Runtime needs to exist. Users are encouraged to use Runtime.default. To configure it, create a runtime before any clients are created, and set it via Runtime.default=. Every time a new runtime is created, a new internal Rust thread pool is created.

Defined Under Namespace

Classes: LoggingFilterOptions, LoggingOptions, MetricBuffer, MetricsOptions, OpenTelemetryMetricsOptions, PrometheusMetricsOptions, TelemetryOptions

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(telemetry: TelemetryOptions.new) ⇒ Runtime

Create new Runtime. For most users, this should only be done once globally. In addition to creating a Rust thread pool, this also consumes a Ruby thread for its lifetime.

Parameters:

  • telemetry (TelemetryOptions) (defaults to: TelemetryOptions.new)

    Telemetry options to set.



316
317
318
319
320
321
322
323
324
325
326
327
328
329
# File 'lib/temporalio/runtime.rb', line 316

def initialize(telemetry: TelemetryOptions.new)
  # Set runtime on the buffer which will fail if the buffer is used on another runtime
  telemetry.metrics&.buffer&._set_runtime(self)

  @core_runtime = Internal::Bridge::Runtime.new(
    Internal::Bridge::Runtime::Options.new(telemetry: telemetry._to_bridge)
  )
  @metric_meter = Internal::Metric::Meter.create_from_runtime(self) || Metric::Meter.null
  # We need a thread to run the command loop
  # TODO(cretz): Is this something users should be concerned about or need control over?
  Thread.new do
    @core_runtime.run_command_loop
  end
end

Instance Attribute Details

#metric_meterMetric::Meter (readonly)

Returns Metric meter that can create and record metric values.

Returns:

  • (Metric::Meter)

    Metric meter that can create and record metric values.



310
311
312
# File 'lib/temporalio/runtime.rb', line 310

def metric_meter
  @metric_meter
end

Class Method Details

.defaultRuntime

Default runtime, lazily created upon first access. If needing a different default, make sure it is updated via default= before this is called (either directly or as a parameter to something like Client).

Returns:



295
296
297
# File 'lib/temporalio/runtime.rb', line 295

def self.default
  @default ||= Runtime.new
end

.default=(runtime) ⇒ Object

Set the default runtime. Must be called before default accessed.

Parameters:

  • runtime (Runtime)

    Runtime to set as default.

Raises:

  • If default has already been accessed.



303
304
305
306
307
# File 'lib/temporalio/runtime.rb', line 303

def self.default=(runtime)
  raise 'Runtime already set or requested' unless @default.nil?

  @default = runtime
end