类:Mongo::Tracing::OpenTelemetry::Tracer Private

继承:
对象
  • 对象
显示全部
定义于:
lib/ Mongo/tracing/open_telemetry/tracer.rb

Overview

此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。

用于MongoDB操作和命令的 OpenTelemetry 跟踪器。

实例属性摘要折叠

实例方法摘要折叠

构造函数详情

#initialize (enabled: nil, query_text_max_length: nil, otel_tracer: nil) ⇒ 跟踪器

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

初始化新的 OpenTelemetry 跟踪器。

参数:

  • enabled (Boolean | nil) (默认为: nil

    是否启用 OpenTelemetry。默认值为 nil,这意味着它将检查环境变量 OTEL_RUBY_INSTRUMENTATION_MONGODB_ENABLED(值:true/1/yes)。如果未设立环境变量,则默认禁用 OpenTelemetry。

  • query_text_max_length ( Integer | nil ) (默认为: nil

    捕获的查询文本的最大长度。默认为零,这意味着它将检查环境变量 OTEL_RUBY_INSTRUMENTATION_MONGODB_QUERY_TEXT_MAX_LENGTH。如果未设立环境变量,则不会捕获查询文本。

  • otel_tracer OpenTelemetry::Trace::Tracer | nil (默认为: nil

    要使用的 OpenTelemetry 跟踪器实现。默认为 nil,这意味着它将使用来自 OpenTelemetry 跟踪器提供商程序的默认跟踪器。



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 42

def 初始化(已启用: nil, query_text_max_length: nil, otel_tracer: nil)
  @enabled = if enabled.nil?
               %w[true 1 ].包括?(ENV['OTEL_RUBY_INSTRUMENTATION_MONGODB_ENABLED']&。Downcase)
             else
               enabled
             end
  check_opentelemetry_loaded
  @query_text_max_length = if query_text_max_length.nil?
                             ENV['OTEL_RUBY_INSTRUMENTATION_MONGODB_QUERY_TEXT_MAX_LENGTH'].to_i
                           else
                             query_text_max_length
                           end
  @otel_tracer = otel_tracer || initialize_tracer
  @operation_tracer = OperationTracer.new(@otel_tracer, self)
  @command_tracer = CommandTracer.new(@otel_tracer, self, query_text_max_length: @query_text_max_length)
end

实例属性详细信息

#otel_tracerOpenTelemetry::Trace::Tracer (只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回用于为MongoDB操作和命令创建跨度的 OpenTelemetry 跟踪器实现。

返回:

  • ( OpenTelemetry::Trace::Tracer )

    用于为MongoDB操作和命令创建 span 的 OpenTelemetry 跟踪实现。



27
28
29
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 27

def otel_tracer
  @otel_tracer
end

实例方法详细信息

#cursor_context_mapHash

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回用于跟踪游标相关 OpenTelemetry游标的游标上下文映射。

返回:

  • (哈希)

    游标ID 到 OpenTelemetry 上下文的映射。



145
146
147
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 145

def cursor_context_map
  @cursor_context_map ||= {}
end

#cursor_map_key (session, cursor_id) ⇒ String | nil

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

为上下文映射中的游标跟踪生成唯一键。

参数:

  • 会话 ( Mongo::Session )

    与游标关联的会话。

  • cursor_id ( Integer )

    游标 ID。

返回:

  • ( string | nil )

    组合了 会话ID和游标ID 的唯一键,如果其中一个为 nil,则为 nil。



155
156
157
158
159
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 155

def cursor_map_key(会话, cursor_id)
  return if cursor_id.nil? || 会话.nil?

  "#{session.session_id['id'].to_uuid}-#{cursor_id}"
end

#已启用?布尔值

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

是否启用 OpenTelemetry。

返回:

  • ( Boolean )

    如果启用了 OpenTelemetry,则为 true;否则为 false。



62
63
64
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 62

def 已启用?
  @enabled
end

#finish_transaction_span (session) ⇒ 对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

完成ACID 事务跨度并停用其上下文。

参数:



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 123

def finish_transaction_span(会话)
  return 除非 已启用?

  key = transaction_map_key(会话)
  return 除非 key

  span = transaction_span_map.删除(key)
  token = transaction_token_map.删除(key)
  transaction_context_map.删除(key)

  return 除非 span && token

  开始
    span.完成
  确保
    ::OpenTelemetry::上下文.detach(token)
  end
end

#parent_context_for (operation_context, cursor_id) ⇒ OpenTelemetry::Context | nil

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

确定操作的父 OpenTelemetry 上下文。

如果该操作是ACID 事务的一部分,则返回ACID 事务上下文,否则返回 nil。当前未实现基于游标的上下文嵌套。

参数:

  • operation_context ( Mongo::Operation::Context )

    操作上下文。

  • cursor_id ( Integer )

    游标ID(如果适用)。

返回:

  • ( OpenTelemetry::Context | nil )

    父上下文或 nil。



170
171
172
173
174
175
176
177
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 170

def parent_context_for(operation_context, cursor_id)
  if (key = transaction_map_key(operation_context.会话))
    transaction_context_map[key]
  elsif (_key = cursor_map_key(operation_context.会话, cursor_id))
    # 除非决定如何嵌套游标操作,否则返回 nil。
    nil
  end
end

# start_transaction_span (session) ⇒ 对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

启动ACID 事务跨度并激活其上下文。

参数:



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 95

def start_transaction_span(会话)
  return 除非 已启用?

  key = transaction_map_key(会话)
  return 除非 key

  # 创建具有最少属性的ACID 事务跨度
  span = @otel_tracer.start_span(
    'transaction',
    属性: { 'db.system.name' => 'mongodb' },
    kind: :client
  )

  # 创建包含此跨度的上下文
  上下文 = ::OpenTelemetry::TRACE.context_with_span(span)

  # 激活上下文并存储令牌以供以后分离
  token = ::OpenTelemetry::上下文.附加(上下文)

  # 存储范围、令牌和上下文以供日后检索
  transaction_span_map[key] = span
  transaction_token_map[key] = token
  transaction_context_map[key] = 上下文
end

#trace_command (message, operation_context, connection) {... } ⇒ 对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

跟踪MongoDB命令。

参数:

产量:

  • 表示要跟踪的命令的区块。

返回:

  • ( Object )

    命令的结果。



86
87
88
89
90
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 86

def trace_command(message, operation_context, 连接, )
  return 产量 除非 已启用?

  @command_tracer.trace_command(message, operation_context, 连接, )
end

#trace_operation (operation, operation_context, op_name: nil) {... } ⇒ 对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

跟踪MongoDB操作。

参数:

  • 操作 (Mongo::Operation)

    要跟踪的MongoDB操作。

  • operation_context ( Mongo::Operation::Context )

    操作的上下文。

  • op_name (String, nil) (默认为: nil

    操作的可选名称。

产量:

  • 表示要跟踪的操作的区块。

返回:

  • ( Object )

    操作的结果。



73
74
75
76
77
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 73

def trace_operation(操作, operation_context, op_name: nil, )
  return 产量 除非 已启用?

  @operation_tracer.trace_operation(操作, operation_context, op_name: op_name, )
end

#transaction_context_mapHash

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回用于跟踪活动ACID 事务上下文的ACID 事务上下文映射。

返回:

  • (哈希)

    ACID 事务密钥到 OpenTelemetry 上下文的映射。



182
183
184
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 182

def transaction_context_map
  @transaction_context_map ||= {}
end

# transaction_map_key (session) ⇒ String | nil

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

生成用于ACID 事务跟踪的唯一密钥。

对于隐式会话或不在ACID 事务中的会话,返回 nil。

参数:

返回:

  • ( string | nil )

    结合会话ID和ACID 事务编号的唯一密钥,或者为零。



207
208
209
210
211
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 207

def transaction_map_key(会话)
  return if 会话.nil? || 会话.隐式? || !会话.in_transaction?

  " #{ session . session_id [ ' id ' ] . to_uuid } - #{ session . txn_num } "
end

#transaction_span_mapHash

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回用于跟踪活动ACID 事务跨度的ACID 事务跨度映射。

返回:

  • (哈希)

    ACID 事务密钥到 OpenTelemetry span 的映射。



189
190
191
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 189

def transaction_span_map
  @transaction_span_map ||= {}
end

#transaction_token_mapHash

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回用于跟踪上下文附件令牌的ACID 事务令牌映射。

返回:

  • (哈希)

    ACID 事务密钥到 OpenTelemetry 上下文令牌的映射。



196
197
198
# 文件 'lib/mongo/tracing/open_telemetry/tracer.rb', line 196

def transaction_token_map
  @transaction_token_map ||= {}
end