Module: Daytona
- Defined in:
- lib/daytona/git.rb,
lib/daytona/sdk.rb,
lib/daytona/otel.rb,
lib/daytona/util.rb,
lib/daytona/config.rb,
lib/daytona/volume.rb,
lib/daytona/daytona.rb,
lib/daytona/process.rb,
lib/daytona/sandbox.rb,
lib/daytona/common/git.rb,
lib/daytona/common/pty.rb,
lib/daytona/lsp_server.rb,
lib/daytona/file_system.rb,
lib/daytona/sdk/version.rb,
lib/daytona/common/image.rb,
lib/daytona/computer_use.rb,
lib/daytona/common/charts.rb,
lib/daytona/common/daytona.rb,
lib/daytona/common/process.rb,
lib/daytona/object_storage.rb,
lib/daytona/volume_service.rb,
lib/daytona/common/response.rb,
lib/daytona/common/snapshot.rb,
lib/daytona/code_interpreter.rb,
lib/daytona/common/resources.rb,
lib/daytona/snapshot_service.rb,
lib/daytona/common/file_system.rb,
lib/daytona/common/code_language.rb,
lib/daytona/common/code_interpreter.rb,
lib/daytona/code_toolbox/sandbox_js_code_toolbox.rb,
lib/daytona/code_toolbox/sandbox_ts_code_toolbox.rb,
lib/daytona/code_toolbox/sandbox_python_code_toolbox.rb
Defined Under Namespace
Modules: Charts, CodeLanguage, Instrumentation, Sdk, Util Classes: CodeInterpreter, CodeRunParams, ComputerUse, Config, Context, CreateSandboxBaseParams, CreateSandboxFromImageParams, CreateSandboxFromSnapshotParams, CreateSnapshotParams, Daytona, ExecuteResponse, ExecutionArtifacts, ExecutionError, ExecutionResult, FileSystem, FileUpload, Git, GitCommitResponse, Image, LspServer, ObjectStorage, OtelState, OutputMessage, PaginatedResource, Process, PtyHandle, PtyResult, PtySize, Resources, Sandbox, SandboxJsCodeToolbox, SandboxPythonCodeToolbox, SandboxTsCodeToolbox, SessionCommandLogsResponse, SessionExecuteRequest, SessionExecuteResponse, Snapshot, SnapshotService, Volume, VolumeService
Class Method Summary collapse
-
.init_otel(sdk_version) ⇒ OtelState
Initializes OTel providers, sets globals, installs Typhoeus propagation.
-
.install_typhoeus_propagation ⇒ Object
Installs Typhoeus.before callback for W3C trace-context propagation.
-
.shutdown_otel(state) ⇒ Object
Flushes and shuts down OTel providers.
-
.to_snake_case(str) ⇒ Object
Converts “ClassName.method_name” to “class_name_method_name”.
-
.with_instrumentation(otel_state, component, method_name, &block) ⇒ Object
Wraps a block with OTel span creation and duration histogram recording.
Class Method Details
.init_otel(sdk_version) ⇒ OtelState
Initializes OTel providers, sets globals, installs Typhoeus propagation. OTel gems are required lazily so they are never loaded when disabled.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/daytona/otel.rb', line 38 def self.init_otel(sdk_version) # rubocop:disable Metrics/MethodLength require 'opentelemetry-sdk' require 'opentelemetry-metrics-sdk' require 'opentelemetry-exporter-otlp' require 'opentelemetry-exporter-otlp-metrics' resource = OpenTelemetry::SDK::Resources::Resource.create( 'service.name' => 'daytona-ruby-sdk', 'service.version' => sdk_version ) tracer_provider = OpenTelemetry::SDK::Trace::TracerProvider.new(resource:) tracer_provider.add_span_processor( OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new( OpenTelemetry::Exporter::OTLP::Exporter.new ) ) OpenTelemetry.tracer_provider = tracer_provider meter_provider = OpenTelemetry::SDK::Metrics::MeterProvider.new(resource:) meter_provider.add_metric_reader( OpenTelemetry::SDK::Metrics::Export::PeriodicMetricReader.new( exporter: OpenTelemetry::Exporter::OTLP::Metrics::MetricsExporter.new ) ) OpenTelemetry.meter_provider = meter_provider tracer = tracer_provider.tracer('daytona-ruby-sdk', sdk_version) meter = meter_provider.meter('daytona-ruby-sdk') # Install Typhoeus trace-context propagation install_typhoeus_propagation OtelState.new(tracer_provider:, meter_provider:, tracer:, meter:) end |
.install_typhoeus_propagation ⇒ Object
Installs Typhoeus.before callback for W3C trace-context propagation.
129 130 131 132 133 134 135 136 137 |
# File 'lib/daytona/otel.rb', line 129 def self.install_typhoeus_propagation return unless defined?(Typhoeus) Typhoeus.before do |request| headers = request.[:headers] ||= {} OpenTelemetry.propagation.inject(headers) true end end |
.shutdown_otel(state) ⇒ Object
Flushes and shuts down OTel providers.
75 76 77 |
# File 'lib/daytona/otel.rb', line 75 def self.shutdown_otel(state) state&.shutdown end |
.to_snake_case(str) ⇒ Object
Converts “ClassName.method_name” to “class_name_method_name”.
114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/daytona/otel.rb', line 114 def self.to_snake_case(str) result = +'' str.each_char.with_index do |char, i| if char == '.' result << '_' elsif char =~ /[A-Z]/ && i > 0 && str[i - 1] != '.' result << '_' << char.downcase else result << char.downcase end end result end |
.with_instrumentation(otel_state, component, method_name, &block) ⇒ Object
Wraps a block with OTel span creation and duration histogram recording. When otel_state is nil (OTel disabled), calls the block directly.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/daytona/otel.rb', line 86 def self.with_instrumentation(otel_state, component, method_name, &block) # rubocop:disable Metrics/MethodLength return block.call unless otel_state span_name = "#{component}.#{method_name}" metric_name = "#{to_snake_case(span_name)}_duration" status = 'success' otel_state.tracer.in_span( span_name, attributes: { 'component' => component, 'method' => method_name } ) do |_span| start_time = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC) begin block.call rescue StandardError => e status = 'error' raise e ensure duration_ms = (::Process.clock_gettime(::Process::CLOCK_MONOTONIC) - start_time) * 1000.0 otel_state.histogram(metric_name).record( duration_ms, attributes: { 'component' => component, 'method' => method_name, 'status' => status } ) end end end |