Module: Datadog::Tracing::Transport::HTTP::API

Defined in:
lib/datadog/tracing/transport/http/api.rb

Overview

Namespace for API components

Constant Summary collapse

V4 =

Default API versions

'v0.4'
V3 =
'v0.3'

Class Method Summary collapse

Class Method Details

.cloudwise_integrated_mode?Boolean

检查是否启用 integrated_mode

Returns:

  • (Boolean)


101
102
103
104
105
106
107
108
109
# File 'lib/datadog/tracing/transport/http/api.rb', line 101

def cloudwise_integrated_mode?
  return false unless defined?(Datadog.configuration) &&
    Datadog.configuration.respond_to?(:cloudwise)

  integrated_mode = Datadog.configuration.cloudwise.integrated_mode
  token = Datadog.configuration.cloudwise.token

  integrated_mode && token && !token.empty?
end

.defaultsObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/datadog/tracing/transport/http/api.rb', line 23

def defaults
  # 获取 traces V4 路径(动态根据配置决定)
  v4_traces_path = get_traces_v4_path

  Core::Transport::HTTP::API::Map[
    V4 => Traces::API::Spec.new do |s|
      s.traces = Traces::API::Endpoint.new(
        v4_traces_path,
        Core::Encoding::MsgpackEncoder,
        service_rates: true
      )
    end,
    V3 => Traces::API::Spec.new do |s|
      s.traces = Traces::API::Endpoint.new(
        '/v0.3/traces',
        Core::Encoding::MsgpackEncoder
      )
    end,
  ].with_fallbacks(V4 => V3)
end

.get_prefix_by_mode(mode) ⇒ String?

根据模式获取前缀

Parameters:

  • mode (String)

    前缀模式:'doop', 'apm', 'custom'

Returns:

  • (String, nil)

    前缀字符串,如果模式无效返回 nil



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/datadog/tracing/transport/http/api.rb', line 82

def get_prefix_by_mode(mode)
  case mode.to_s.downcase
  when 'doop'
    '/doop-agent-api'
  when 'apm'
    '/apm'
  when 'custom'
    # 使用 api_prefix 配置的自定义前缀
    if Datadog.configuration.cloudwise.respond_to?(:api_prefix)
      api_prefix = Datadog.configuration.cloudwise.api_prefix
      if api_prefix && !api_prefix.empty?
        return api_prefix.start_with?('/') ? api_prefix : "/#{api_prefix}"
      end
    end
    nil
  end
end

.get_traces_v4_pathObject

获取 Traces V4 API 路径 优先级:api_prefix_mode > api_prefix > integrated_mode > 默认



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
76
77
# File 'lib/datadog/tracing/transport/http/api.rb', line 46

def get_traces_v4_path
  base_path = '/api/v2/traces'

  return base_path unless defined?(Datadog.configuration) &&
    Datadog.configuration.respond_to?(:cloudwise)

  # 优先级 1: api_prefix_mode 模式配置(最高优先级,简化配置)
  if Datadog.configuration.cloudwise.respond_to?(:api_prefix_mode)
    api_prefix_mode = Datadog.configuration.cloudwise.api_prefix_mode
    if api_prefix_mode && !api_prefix_mode.empty?
      prefix = get_prefix_by_mode(api_prefix_mode)
      return "#{prefix}#{base_path}" if prefix
    end
  end

  # 优先级 2: 显式配置的 api_prefix(自定义前缀)
  if Datadog.configuration.cloudwise.respond_to?(:api_prefix)
    api_prefix = Datadog.configuration.cloudwise.api_prefix
    if api_prefix && !api_prefix.empty?
      prefix = api_prefix.start_with?('/') ? api_prefix : "/#{api_prefix}"
      return "#{prefix}#{base_path}"
    end
  end

  # 优先级 3: integrated_mode 使用 /apm 前缀
  if cloudwise_integrated_mode?
    return "/apm#{base_path}"
  end

  # 优先级 4: 无前缀(默认)
  base_path
end