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
Overview
frozen_string_literal: true
Defined Under Namespace
Modules: ChartType, Charts, CodeLanguage, Instrumentation, Sdk, Util Classes: BarChart, BarData, BoxAndWhiskerChart, BoxAndWhiskerData, Chart, Chart2D, CodeInterpreter, CodeRunParams, CompositeChart, ComputerUse, Config, Context, CreateSandboxBaseParams, CreateSandboxFromImageParams, CreateSandboxFromSnapshotParams, CreateSnapshotParams, Daytona, ExecuteResponse, ExecutionArtifacts, ExecutionError, ExecutionResult, FileSystem, FileUpload, Git, GitCommitResponse, Image, LineChart, LspServer, ObjectStorage, OtelState, OutputMessage, PaginatedResource, PieChart, PieData, PointChart, PointData, Process, PtyHandle, PtyResult, PtySize, Resources, Sandbox, ScatterChart, SessionCommandLogsResponse, SessionExecuteRequest, SessionExecuteResponse, Snapshot, SnapshotService, Volume, VolumeService
Constant Summary collapse
- ChartElement =
DaytonaToolboxApiClient::ChartElement
- CODE_TOOLBOX_LANGUAGE_LABEL =
'code-toolbox-language'
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.
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 73 74 75 |
# File 'lib/daytona/otel.rb', line 41 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.
132 133 134 135 136 137 138 139 140 |
# File 'lib/daytona/otel.rb', line 132 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.
78 79 80 |
# File 'lib/daytona/otel.rb', line 78 def self.shutdown_otel(state) state&.shutdown end |
.to_snake_case(str) ⇒ Object
Converts “ClassName.method_name” to “class_name_method_name”.
117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/daytona/otel.rb', line 117 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.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/daytona/otel.rb', line 89 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 |