cw-datadog 2.23.0.2 → 2.23.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/ext/datadog_profiling_native_extension/extconf.rb +4 -2
  3. data/ext/libdatadog_api/library_config.c +12 -11
  4. data/ext/libdatadog_extconf_helpers.rb +1 -1
  5. data/lib/datadog/appsec/api_security/route_extractor.rb +20 -5
  6. data/lib/datadog/appsec/api_security/sampler.rb +3 -1
  7. data/lib/datadog/appsec/assets/blocked.html +8 -0
  8. data/lib/datadog/appsec/assets/blocked.json +1 -1
  9. data/lib/datadog/appsec/assets/blocked.text +3 -1
  10. data/lib/datadog/appsec/assets.rb +1 -1
  11. data/lib/datadog/appsec/remote.rb +4 -0
  12. data/lib/datadog/appsec/response.rb +18 -4
  13. data/lib/datadog/core/cloudwise/client.rb +412 -25
  14. data/lib/datadog/core/cloudwise/component.rb +195 -52
  15. data/lib/datadog/core/cloudwise/docc_heartbeat_worker.rb +105 -0
  16. data/lib/datadog/core/cloudwise/docc_operation_worker.rb +191 -0
  17. data/lib/datadog/core/cloudwise/docc_registration_worker.rb +89 -0
  18. data/lib/datadog/core/cloudwise/license_worker.rb +90 -4
  19. data/lib/datadog/core/cloudwise/probe_state.rb +134 -12
  20. data/lib/datadog/core/configuration/components.rb +10 -9
  21. data/lib/datadog/core/configuration/settings.rb +43 -0
  22. data/lib/datadog/core/configuration/supported_configurations.rb +6 -2
  23. data/lib/datadog/core/remote/client/capabilities.rb +7 -0
  24. data/lib/datadog/core/remote/component.rb +2 -2
  25. data/lib/datadog/core/remote/transport/config.rb +2 -10
  26. data/lib/datadog/core/remote/transport/http/config.rb +9 -9
  27. data/lib/datadog/core/remote/transport/http/negotiation.rb +17 -8
  28. data/lib/datadog/core/remote/transport/http.rb +2 -0
  29. data/lib/datadog/core/remote/transport/negotiation.rb +2 -18
  30. data/lib/datadog/core/remote/worker.rb +23 -35
  31. data/lib/datadog/core/telemetry/component.rb +26 -13
  32. data/lib/datadog/core/telemetry/event/app_started.rb +67 -49
  33. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
  34. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +5 -6
  35. data/lib/datadog/core/telemetry/transport/telemetry.rb +1 -2
  36. data/lib/datadog/core/telemetry/worker.rb +51 -6
  37. data/lib/datadog/core/transport/http/adapters/net.rb +2 -0
  38. data/lib/datadog/core/transport/http/client.rb +69 -0
  39. data/lib/datadog/core/utils/only_once_successful.rb +6 -2
  40. data/lib/datadog/data_streams/transport/http/client.rb +4 -32
  41. data/lib/datadog/data_streams/transport/stats.rb +1 -1
  42. data/lib/datadog/di/probe_notification_builder.rb +35 -13
  43. data/lib/datadog/di/transport/diagnostics.rb +2 -2
  44. data/lib/datadog/di/transport/http/diagnostics.rb +2 -4
  45. data/lib/datadog/di/transport/http/input.rb +2 -4
  46. data/lib/datadog/di/transport/input.rb +2 -2
  47. data/lib/datadog/open_feature/component.rb +60 -0
  48. data/lib/datadog/open_feature/configuration.rb +27 -0
  49. data/lib/datadog/open_feature/evaluation_engine.rb +59 -0
  50. data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
  51. data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
  52. data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
  53. data/lib/datadog/open_feature/exposures/event.rb +60 -0
  54. data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
  55. data/lib/datadog/open_feature/exposures/worker.rb +116 -0
  56. data/lib/datadog/open_feature/ext.rb +13 -0
  57. data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
  58. data/lib/datadog/open_feature/provider.rb +134 -0
  59. data/lib/datadog/open_feature/remote.rb +74 -0
  60. data/lib/datadog/open_feature/resolution_details.rb +35 -0
  61. data/lib/datadog/open_feature/transport.rb +72 -0
  62. data/lib/datadog/open_feature.rb +19 -0
  63. data/lib/datadog/profiling/component.rb +6 -0
  64. data/lib/datadog/profiling/profiler.rb +4 -0
  65. data/lib/datadog/profiling.rb +1 -2
  66. data/lib/datadog/single_step_instrument.rb +1 -1
  67. data/lib/datadog/tracing/contrib/cloudwise/propagation.rb +164 -7
  68. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +22 -17
  69. data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
  70. data/lib/datadog/tracing/contrib/karafka/patcher.rb +14 -0
  71. data/lib/datadog/tracing/contrib/rack/middlewares.rb +6 -2
  72. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
  73. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
  74. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
  75. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
  76. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
  77. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +46 -0
  78. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
  79. data/lib/datadog/tracing/contrib/waterdrop.rb +37 -0
  80. data/lib/datadog/tracing/contrib.rb +1 -0
  81. data/lib/datadog/tracing/transport/http/api.rb +73 -1
  82. data/lib/datadog/tracing/transport/http/client.rb +12 -26
  83. data/lib/datadog/tracing/transport/http/traces.rb +4 -2
  84. data/lib/datadog/tracing/transport/trace_formatter.rb +16 -0
  85. data/lib/datadog/version.rb +2 -2
  86. data/lib/datadog.rb +1 -0
  87. metadata +38 -15
  88. data/lib/datadog/core/cloudwise/IMPLEMENTATION_V2.md +0 -517
  89. data/lib/datadog/core/cloudwise/QUICKSTART.md +0 -398
  90. data/lib/datadog/core/cloudwise/README.md +0 -722
  91. data/lib/datadog/core/remote/transport/http/client.rb +0 -49
  92. data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
  93. data/lib/datadog/di/transport/http/client.rb +0 -47
@@ -1,398 +0,0 @@
1
- # Cloudwise 快速开始指南
2
-
3
- ## 🚀 5 分钟快速测试
4
-
5
- ### 步骤 1: 启动 Mock API 服务器
6
-
7
- ```bash
8
- cd lib/datadog/core/cloudwise
9
- ruby mock_api_server.rb
10
- ```
11
-
12
- 你会看到:
13
-
14
- ```
15
- ============================================================
16
- 🚀 Cloudwise Mock API Server
17
- ============================================================
18
- Server starting on http://localhost:8080
19
- ...
20
- ```
21
-
22
- 在浏览器中打开 http://localhost:8080 查看 API 文档。
23
-
24
- ### 步骤 2: 运行集成测试
25
-
26
- 在另一个终端窗口:
27
-
28
- ```bash
29
- cd lib/datadog/core/cloudwise
30
-
31
- # 方式 1: 完整流程(会调用 generateHostId)
32
- ruby test_integration.rb
33
-
34
- # 方式 2: 使用已有 account_id(跳过 generateHostId)
35
- CLOUDWISE_ACCOUNT_ID=acc-existing-123 ruby test_integration.rb
36
- ```
37
-
38
- ### 步骤 3: 观察日志
39
-
40
- 你会看到类似的输出:
41
-
42
- ```
43
- 🧪 Cloudwise Integration Test
44
- ✅ Mock API server is running
45
- ✅ Datadog configured
46
- ⏳ Waiting for Cloudwise initialization (5 seconds)...
47
-
48
- ============================================================
49
- 📊 Cloudwise Status
50
- ============================================================
51
- Enabled: true
52
- Account ID: acc-1234567890-123
53
- Host ID Generated: ✅
54
- Probe Active: 🟢 Active
55
- Heartbeat Running: ✅
56
- License Running: ✅
57
- App Reg Running: ✅
58
- App Registered: ✅
59
- ============================================================
60
- ```
61
-
62
- ### 步骤 4: 测试探针熔断
63
-
64
- 在第三个终端窗口,切换探针状态:
65
-
66
- ```bash
67
- curl http://localhost:8080/admin/toggle_probe
68
- ```
69
-
70
- 返回:
71
-
72
- ```json
73
- {
74
- "status": "suspended",
75
- "message": "Probe status changed to suspended"
76
- }
77
- ```
78
-
79
- 观察测试脚本的输出,会看到:
80
-
81
- ```
82
- ⚠️ PROBE STATE CHANGED!
83
- 🔴 Probe suspended - data collection stopped
84
- ```
85
-
86
- 再次调用恢复探针:
87
-
88
- ```bash
89
- curl http://localhost:8080/admin/toggle_probe
90
- ```
91
-
92
- 会看到:
93
-
94
- ```
95
- ⚠️ PROBE STATE CHANGED!
96
- 🟢 Probe recovered - data collection resumed
97
- ```
98
-
99
- ## 📝 完整集成步骤
100
-
101
- ### 1. 添加配置
102
-
103
- 编辑 `lib/datadog/core/configuration/settings.rb`,添加:
104
-
105
- ```ruby
106
- settings :cloudwise do
107
- option :enabled do |o|
108
- o.type :bool
109
- o.env 'DD_CLOUDWISE_ENABLED'
110
- o.default false
111
- end
112
-
113
- option :base_url do |o|
114
- o.type :string
115
- o.env 'DD_CLOUDWISE_BASE_URL'
116
- o.default 'http://localhost:8080'
117
- end
118
-
119
- option :server_name do |o|
120
- o.type :string
121
- o.env 'DD_CLOUDWISE_SERVER_NAME'
122
- o.default { Socket.gethostname }
123
- end
124
-
125
- option :license_key do |o|
126
- o.type :string, nilable: true
127
- o.env 'DD_CLOUDWISE_LICENSE_KEY'
128
- o.default nil
129
- end
130
-
131
- option :heartbeat_interval do |o|
132
- o.type :int
133
- o.env 'DD_CLOUDWISE_HEARTBEAT_INTERVAL'
134
- o.default 60
135
- end
136
-
137
- option :license_check_interval do |o|
138
- o.type :int
139
- o.env 'DD_CLOUDWISE_LICENSE_CHECK_INTERVAL'
140
- o.default 300
141
- end
142
-
143
- option :app_registration_interval do |o|
144
- o.type :int
145
- o.env 'DD_CLOUDWISE_APP_REGISTRATION_INTERVAL'
146
- o.default 600
147
- end
148
- end
149
- ```
150
-
151
- ### 2. 集成组件
152
-
153
- 编辑 `lib/datadog/core/configuration/components.rb`:
154
-
155
- ```ruby
156
- class Components
157
- def initialize(settings)
158
- # ... 现有代码 ...
159
-
160
- # Cloudwise component
161
- @cloudwise = build_cloudwise(settings)
162
- end
163
-
164
- attr_reader :cloudwise
165
-
166
- private
167
-
168
- def build_cloudwise(settings)
169
- require_relative '../cloudwise/component'
170
- Datadog::Core::Cloudwise::Component.new(
171
- settings: settings,
172
- logger: logger
173
- )
174
- end
175
-
176
- def startup!
177
- # ... 现有代码 ...
178
- cloudwise.start if cloudwise.enabled?
179
- end
180
-
181
- def shutdown!
182
- # ... 现有代码 ...
183
- cloudwise.stop if cloudwise.enabled?
184
- end
185
- end
186
- ```
187
-
188
- ### 3. 配置应用
189
-
190
- 在你的应用中:
191
-
192
- ```ruby
193
- require 'datadog'
194
-
195
- Datadog.configure do |c|
196
- c.service = 'my-app'
197
-
198
- # Cloudwise 配置
199
- c.cloudwise.enabled = true
200
- c.cloudwise.base_url = ENV['CLOUDWISE_API_URL']
201
- c.cloudwise.server_name = ENV['SERVER_NAME']
202
- c.cloudwise.license_key = ENV['CLOUDWISE_LICENSE_KEY']
203
- end
204
- ```
205
-
206
- 或使用环境变量:
207
-
208
- ```bash
209
- export DD_CLOUDWISE_ENABLED=true
210
- export DD_CLOUDWISE_BASE_URL=https://api.cloudwise.com
211
- export DD_CLOUDWISE_SERVER_NAME=my-app
212
- export DD_CLOUDWISE_LICENSE_KEY=your-license-key
213
- ```
214
-
215
- ## 🎯 关键功能
216
-
217
- ### 1. Host ID 生成
218
-
219
- - **自动执行**: 应用启动时
220
- - **失败重试**: 每 2 分钟
221
- - **完成后**: 自动停止 Worker
222
-
223
- ### 2. 心跳注册
224
-
225
- - **执行周期**: 60 秒
226
- - **失败重试**: 间隔 2 秒,最多 3 次
227
- - **探针熔断**: 返回 code=1001 时停止采集
228
- - **探针恢复**: 返回 code=1000/1002 时恢复采集
229
-
230
- ### 3. License 校验
231
-
232
- - **执行周期**: 5 分钟
233
- - **失败重试**: 间隔 2 秒,最多 3 次
234
- - **校验失败**: 停止数据采集
235
- - **校验成功**: 恢复数据采集
236
-
237
- ### 4. 应用注册
238
-
239
- - **执行周期**: 10 分钟
240
- - **失败重试**: 间隔 2 秒,最多 3 次
241
- - **注意**: 注册失败不影响数据采集
242
-
243
- ## 🔍 状态监控
244
-
245
- ### 查看状态
246
-
247
- ```ruby
248
- status = Datadog.components.cloudwise.status
249
- puts status.inspect
250
- ```
251
-
252
- 输出:
253
-
254
- ```ruby
255
- {
256
- enabled: true,
257
- account_id: "acc-1234567890-123",
258
- host_id_generated: true,
259
- probe_active: true,
260
- probe_suspended: false,
261
- heartbeat_running: true,
262
- license_running: true,
263
- app_registration_running: true,
264
- app_registered: true
265
- }
266
- ```
267
-
268
- ### 健康检查端点
269
-
270
- ```ruby
271
- # In Rails
272
- get '/health/cloudwise' do
273
- cloudwise = Datadog.components.cloudwise
274
-
275
- if cloudwise&.probe_active?
276
- render json: { status: 'ok', probe: 'active' }
277
- else
278
- render json: { status: 'suspended', probe: 'suspended' }, status: 503
279
- end
280
- end
281
- ```
282
-
283
- ## 📊 日志示例
284
-
285
- ### 正常运行
286
-
287
- ```
288
- [INFO] 🚀 Starting Cloudwise Component
289
- [INFO] 📍 Step 1: Starting Host ID generation worker...
290
- [INFO] Cloudwise: Generated Host ID, account_id: acc-xxx
291
- [INFO] 💓 Step 2: Starting Heartbeat worker (60s interval)...
292
- [INFO] 🔑 Step 3: Starting License verification worker (5 min interval)...
293
- [INFO] 📝 Step 4: Starting Application registration worker (10 min interval)...
294
- [INFO] ✅ Cloudwise Component started successfully
295
- ```
296
-
297
- ### 探针熔断
298
-
299
- ```
300
- [WARN] 🔴 Cloudwise: Probe suspended - data collection stopped
301
- [DEBUG] Cloudwise: Probe suspended, skipping trace submission
302
- ```
303
-
304
- ### 探针恢复
305
-
306
- ```
307
- [INFO] 🟢 Cloudwise: Probe resumed - data collection active
308
- ```
309
-
310
- ## 🧪 测试场景
311
-
312
- ### 场景 1: 正常运行
313
-
314
- 1. 启动 Mock API 服务器
315
- 2. 启动应用
316
- 3. 观察所有接口正常调用
317
-
318
- ### 场景 2: 探针熔断
319
-
320
- 1. 切换探针状态: `curl http://localhost:8080/admin/toggle_probe`
321
- 2. 观察数据采集停止
322
- 3. 再次切换恢复
323
- 4. 观察数据采集恢复
324
-
325
- ### 场景 3: License 失效
326
-
327
- 1. 切换 License 状态: `curl http://localhost:8080/admin/toggle_license`
328
- 2. 等待 License 校验(5 分钟或重启应用加快测试)
329
- 3. 观察数据采集停止
330
- 4. 切换 License 状态恢复
331
-
332
- ### 场景 4: 网络故障
333
-
334
- 1. 停止 Mock API 服务器
335
- 2. 观察重试日志
336
- 3. 重启 Mock API 服务器
337
- 4. 观察自动恢复
338
-
339
- ## 📚 文档索引
340
-
341
- | 文档 | 说明 |
342
- |------|------|
343
- | `QUICKSTART.md` | 本文件 - 快速开始 |
344
- | `README.md` | 完整功能文档 |
345
- | `INTEGRATION_GUIDE.md` | 详细集成步骤 |
346
- | `example.rb` | 代码示例 |
347
- | `mock_api_server.rb` | 测试服务器 |
348
- | `test_integration.rb` | 集成测试脚本 |
349
-
350
- ## 🆘 常见问题
351
-
352
- ### Q: 如何验证 Cloudwise 是否正常工作?
353
-
354
- A: 查看日志中是否有 Cloudwise 相关输出,或检查状态:
355
-
356
- ```ruby
357
- puts Datadog.components.cloudwise.status
358
- ```
359
-
360
- ### Q: 如何临时禁用 Cloudwise?
361
-
362
- A: 设置环境变量:
363
-
364
- ```bash
365
- export DD_CLOUDWISE_ENABLED=false
366
- ```
367
-
368
- 或在代码中:
369
-
370
- ```ruby
371
- c.cloudwise.enabled = false
372
- ```
373
-
374
- ### Q: 探针熔断后多久会恢复?
375
-
376
- A: 取决于心跳或 License 校验接口下次返回成功的时间:
377
- - 心跳: 最多 60 秒
378
- - License: 最多 5 分钟
379
-
380
- ### Q: Host ID 一直生成失败怎么办?
381
-
382
- A: 检查:
383
- 1. API 服务器是否可达
384
- 2. base_url 配置是否正确
385
- 3. license_key 是否有效
386
- 4. 网络防火墙设置
387
-
388
- ## 🎉 完成!
389
-
390
- 现在你已经了解了 Cloudwise 集成的基本使用。
391
-
392
- 更多详细信息,请参考:
393
- - `README.md` - 完整功能文档
394
- - `INTEGRATION_GUIDE.md` - 详细集成指南
395
- - `CLOUDWISE_IMPLEMENTATION.md` - 实现总结
396
-
397
- 祝使用愉快!🚀
398
-